UNETR:用于三維醫學圖像分割的Transformer

論文鏈接:https://arxiv.org/abs/2103.10504

代碼鏈接: https://monai.io/research/unetr

機構:Vanderbilt University,?NVIDIA

最近琢磨不出來怎么把3d體數據和文本在cnn中融合,因為確實存在在2d里面用的transformer用在3d里面會爆炸這回事,所以干脆去找個經典3d transformer+cnn的好了。要是有知道朋友也可以一起討論一下。因為是兩年前的文章,所以這篇博文主要集中寫方法了。

*媽耶,沒想到真的部分解決我的疑問了,好的洛陽鏟,愛來自中國

摘要

近十年來,具有收縮和擴展路徑的全卷積神經網絡(fcnn)在大多數醫學圖像分割應用中表現出突出的特點。在fcnn中,編碼器通過學習全局和局部特征以及上下文表示來發揮不可或缺的作用,這些特征和上下文表示可用于解碼器的語義輸出預測。盡管取得了成功,但fcnn中卷積層的局部性限制了學習遠程空間依賴關系的能力。受自然語言處理(NLP)在遠程序列學習中最近成功的啟發,我們將體積(3D)醫學圖像分割任務重新制定為序列到序列的預測問題。我們引入了一種新的架構,稱為UNEt-TRansformer(UNETR),它利用Transformer作為編碼器來學習輸入體積的序列表示并有效捕獲全局多尺度信息,同時也遵循編碼器和解碼器的成功“u形”網絡設計。Transformer 編碼器通過不同分辨率的跳過連接直接連接到解碼器,以計算最終的語義分割輸出。我們已經在用于多器官分割的多圖譜標記顱頂(BTCV)數據集和用于腦腫瘤和脾臟分割任務的醫學分割十項全能(MSD)數據集上驗證了我們的方法的性能。我們的基準測試在BTCV排行榜上展示了新的最先進的性能。

背景

fcnn不能有效捕捉全局信息,transformer難以有效捕捉局部信息

我們將3D分割任務重新制定為一維seq to seq 的預測問題,并使用Transformer作為編碼器從嵌入的輸入補丁中學習上下文信息。從Transformer編碼器中提取的表示通過多個分辨率的跳過連接與基于cnn的解碼器合并,以預測分割輸出。在解碼器中我們使用cnn,這是因為Transformer雖然具有學習全局信息的強大能力,但卻無法正確捕獲局部信息。

貢獻

1. 提出了一種新的基于變壓器的體積醫學圖像分割模型。

2. 為此,我們提出了一種新的架構,其中(1)Transformer編碼器直接利用嵌入式3D體來有效捕獲遠程依賴關系;(2)skip-connected decoder結合提取的不同分辨率的表示并預測分割輸出

3.?我們在兩個公共數據集:BTCV[26]和MSD[38]上驗證了我們提出的模型在不同體積分割任務中的有效性。UNETR在BTCV數據集的排行榜上實現了新的最先進的性能,并且在MSD數據集上優于競爭方法。

相關工作

基于cnn的分割網絡

暫略

Vision Transformers

暫略

方法

UNETR架構概述。3D輸入體數據(例如,MRI圖像的C=4通道)被劃分為一系列均勻且不重疊的patch,并使用線性層投影到嵌入空間中。該序列與位置嵌入一起添加,并用作變壓器模型的輸入。提取變壓器中不同層的編碼表示,并通過跳過連接與解碼器合并,以預測最終的分割。給出了補丁分辨率P =16和嵌入尺寸ek =768時的輸出大小。

網絡結構

我們在上圖中概述了所提出的模型。UNETR采用由一堆Transformer組成的收縮-擴展(contracting-expanding)模式作為編碼器,編碼器通過跳過連接連接到解碼器。與NLP中常用的一樣,Transformer在輸入嵌入的一維序列上運行。

我本人就是在3D作為跟文本一樣維度的序列輸入tansformer之后會存在長寬高壓到一個維度上導致做交叉注意力的時候內存會爆掉,看看本文怎么解決的↓

1)img 輸入:x∈R? HxWxDxC,其中H,W是長寬,D是深度,C是channel

2)然后把它拍平成 xv∈R Nx(P^3 x C)? ?式中P^3表示每個patch的分辨率,N =(H*W*D)/P^3為序列長度。

3) 隨后,我們使用線性層將貼片投影到K維嵌入空間中,該嵌入空間在整個Transformer層中保持恒定。

4) 為了保留提取的patch的空間信息,我們添加了一維可學習的位置嵌入 Epos ∈ R NxK 到投影的 patch embedding?Epos ∈ R (P^3 x C)xK,根據公式↓

請注意,可學習的[class]令牌沒有添加到嵌入序列中,因為我們的變壓器主干是為語義分割而設計的。

5)在嵌入層后,我們利用由多頭自注意(MSA)和多層感知器(MLP)子層組成的Transformer塊堆,根據算式

其中Norm()表示層歸一化[1],MLP由兩個具有GELU激活函數的線性層組成,i為中間塊標識符,L為變壓器層數。

MSA子層

由n個并行self-attention層(SA)組成。具體來說,SA塊是一個參數化函數,它學習查詢(q)與序列Z∈R N*K 中相應的鍵(k)和值(v)表示之間的映射

通過測量z中兩個元素及其鍵值對之間的相似性來計算注意權重(A)

其中Kh = K=n是一個比例因子,用于將參數的數量保持在一個常數上,其中鍵K的值不同。

6)?使用計算的注意力權重,序列z中值v的SA輸出計算為

這里,v表示輸入序列和中的值 Kh = K/n是一個比例因子(scaling factor.)
此外,MSA的輸出被定義為

其中Wmsa ∈?R n.Kh x K表示多頭可訓練參數權重。

7) 受類似于U-Net[36]的架構的啟發,其中編碼器的多個分辨率的特征與解碼器合并。我們從transformer提取了大小為 (HxWxD)/P^3 x K?的序列表示zi(i∈{3,6,9,12}),并把他們變形成一個 H/P x W/P xD/P x K的tensor

我們定義中的表示在嵌入空間中被重塑為特征大小為K的Transformer 的輸出(即變壓器的嵌入大小)。此外,如圖2所示,在每個分辨率下,我們利用連續3x3x3的卷積層,然后是規范化層,將嵌入空間中的重塑張量投影到輸入空間中。

8)在我們encoder的bottleneck(即變壓器最后一層的輸出)中,我們將反卷積層應用于變換后的特征映射,將其分辨率提高2倍。

9) 然后,我們將調整大小的特征圖與先前變壓器輸出(例如z9)的特征圖連接起來,并將它們饋送到連續的3x3x3的卷積層中,并使用反卷積層對輸出進行上采樣。這個過程在所有其他后續層中重復,直到原始輸入分辨率,其中最終輸出被送入帶有softmax激活函數的1x1x1卷積層,以生成體素語義預測。

損失函數

soft dice loss

實驗

數據集

BTCV (CT):多器官分割

MSD (MRI/CT):腦腫瘤分割

實現細節

框架:pytorch 和 monai(monai聽說作為醫學深度學習的框架還挺方便的,也是基于pytorch的,有機會學學)

硬件:NVIDIADGX-1服務器

所有模型都以6個批大小進行訓練,使用AdamW優化器[31],初始學習率為0.0001,迭代20000次。

Transformer 模型 :VIT-B16,L=12層,嵌入尺寸k =768

結果

BTCV

MSD

評估指標

Dice(Dice score)

HD (Hausdorff Distance)

總結

本文介紹了一種新的基于Transformer的結構,稱為UNETR,通過將該任務重新表述為一維序列到序列預測問題,用于體醫學圖像的語義分割。我們建議使用轉換器編碼器來增加模型學習遠程依賴關系和在多個尺度上有效捕獲全局上下文表示的能力。我們驗證了UNETR在CT和MRI模式下不同體積分割任務中的有效性。UNETR在BTCV排行榜上的多器官分割的標準和自由競賽中都取得了新的最先進的表現,并且在MSD數據集上優于腦腫瘤和脾臟分割的競爭方法。最后,UNETR已顯示出有效學習醫學圖像中所表示的關鍵解剖關系的潛力。該方法為醫學圖像分析中一類新的基于變壓器的分割模型奠定了基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164684.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wpf使用CefSharp.OffScreen模擬網頁登錄,并獲取身份cookie,C#后臺執行js

目錄 框架信息&#xff1a;MainWindow.xamlMainWindow.xaml.cs爬取邏輯模擬登錄攔截請求Cookie獲取 CookieVisitorHandle 框架信息&#xff1a; CefSharp.OffScreen.NETCore 119.1.20 MainWindow.xaml <Window x:Class"Wpf_CHZC_Img_Identy_ApiDataGet.MainWindow&qu…

API自動化測試:如何構建高效的測試流程

一、引言 在當前的軟件開發環境中&#xff0c;API&#xff08;Application Programming Interface&#xff09;扮演了極為重要的角色&#xff0c;連接著應用的各個部分。對API進行自動化測試能夠提高測試效率&#xff0c;降低錯誤&#xff0c;確保軟件產品的質量。本文將通過實…

SpringMVC(三)

十、攔截器 1、攔截器的配置 SpringMVC中的攔截器用于攔截控制器方法的執行 SpringMVC中的攔截器需要實現HandlerInterceptor SpringMVC的攔截器必須在SpringMVC的配置文件中進行配置&#xff1a; <bean class"com.atguigu.interceptor.FirstInterceptor">…

constexpt

constexpt constexpt是C11引入的新的關鍵字&#xff0c;它用于在編譯時而非運行時計算函數或變量的值。這個特性對于提高程序效率和優化代非常有用。 編譯時常量和運行時常量 編譯時常量&#xff08;Compile-time Constants&#xff09;和運行時常量&#xff08;Runtime Con…

8年經驗之談 —— 如何使用自動化工具編寫測試用例?

以下為作者觀點&#xff0c;僅供參考&#xff1a; 在快速變化的軟件開發領域&#xff0c;保證應用程序的可靠性和質量至關重要。隨著應用程序復雜性和規模的不斷增加&#xff0c;僅手動測試無法滿足行業需求。 這就是測試自動化發揮作用的地方&#xff0c;它使軟件測試人員能…

leetcode做題筆記1410. HTML 實體解析器

「HTML 實體解析器」 是一種特殊的解析器&#xff0c;它將 HTML 代碼作為輸入&#xff0c;并用字符本身替換掉所有這些特殊的字符實體。 HTML 里這些特殊字符和它們對應的字符實體包括&#xff1a; 雙引號&#xff1a;字符實體為 &quot; &#xff0c;對應的字符是 "…

python appium 官網下載

找了半天吐了 https://github.com/appium/appium-desktop/releases/tag/v1.22.3-4

Hibernate批量處理數據

概念&#xff1a; 批量處理數據是指在一個事務場景中處理大量數據。 在應用程序中難以避免進行批量操作&#xff0c;Hibernate提供了以下方式進行批量處理數據&#xff1a; (1)使用HQL進行批量操作 數據庫層面 executeUpdate() (2)使用JDBC API進行批量操作 數據庫層面 …

Vue學習筆記-Object.defineproperty函數

文章目錄 前文提要Object.defineProperty作用Object.defineProperty參數使用例圖getter&#xff0c;也就是get函數setter&#xff0c;也就是set函數 前文提要 本人僅做個人學習記錄&#xff0c;如有錯誤&#xff0c;請多包涵 Object.defineProperty作用 當在js中聲明了一個變…

王道p150 20.將給定的表達式樹轉化為等價的中綴表達式(通過括號反應操作符的計算次序)

本題代碼如下 void btreetoexp(tree t, char deep) {if (t NULL)return;else if (t->lchild NULL && t->rchild NULL)printf("%c", t->data);//輸出操作數&#xff0c;不加括號else {if (deep > 1)printf("(");btreetoexp(t->l…

Rust語言入門教程(二) - 變量與作用域

變量與作用域 變量的聲明與初始化 Rust的基本語法格式如下&#xff1a; fn main(){let bunnies 2; }語句以分號結尾&#xff0c;用花括號包含語句塊。 Rust的語法其實借鑒了很多其他的語言&#xff0c;比如C語言和Python&#xff0c; 所以變量定義的格式看起來也跟很多我們…

shell 腳本的函數和數組

函數 —— 封裝的一個公式&#xff1a;sin、cos、tan —— 函數為腳本的別名 —— 函數就是一個功能模塊&#xff0c;在函數中寫執行的命令即可&#xff1b;使用函數可以避免代碼重復&#xff0c;增加可讀性&#xff0c;簡化腳本&#xff0c;使用函數可以將大的工程分割為若…

Vue中動態class方法

1.方法一&#xff1a;只需要展示一個class樣式&#xff0c;但是動態取值 <div :class"aaa"></div>data:{return () {aaa:colorRed} }.colorRed {color: red; } 2.方法二&#xff1a;表達式判斷是否展示class里面的樣式 <div :class"{colorRed…

函數與數組

一.函數 1、函數的作用 定義較為復雜的但是需要重復使用的內容&#xff0c;以便再次使用&#xff0c;可以直接調用&#xff0c;節約時間&#xff0c;提高效率。 語句塊定義成函數約等于別名&#xff0c;定義函數&#xff0c;再引用函數。 封裝的可重復利用的具有特定功能的…

python+django高校科研項目管理系統2u3mx

高校科研項目管理系統采用擬開發的高校科研項目管理系統通過測試,確保在最大負載的情況下穩定運轉,各個模塊工作正常,具有較高的可用性。系統整體界面簡潔美觀,用戶使用簡單,滿足用戶需要。在因特網發展迅猛的當今社會,高校科研項目管理系統必然會成為在數字信息化建設的一個重…

Linux 查看 CPU 信息相關命令

目錄 lscpu top htop lscpu lscpu 命令是用于顯示有關 CPU 架構的信息&#xff0c;而不是用于實時監視 CPU 負載。它提供有關 CPU 類型、核心數、線程數、架構等的詳細信息。 lscpu top 命令會顯示系統的實時狀態&#xff0c;包括 CPU 使用率、內存使用率等。按下鍵盤上的…

一文詳解Vue生命周期

Vue是一種流行的用于構建用戶界面的漸進式JavaScript框架。Vue框架在開發過程中&#xff0c;特別強調對生命周期的理解和管理。通過使用生命周期鉤子函數&#xff0c;開發者能夠精確地控制Vue實例的創建、掛載、更新以及銷毀過程。本文將對Vue的生命周期進行詳細的介紹&#xf…

YOLOv8訓練自己的目標檢測數據集

YOLOv8訓練自己的目標檢測數據集 目錄標題 源碼下載環境配置安裝包訓練自己的數據集數據集文件格式數據集文件配置超參數文件配置訓練數據集命令行訓練腳本.py文件訓練 進行detect顯示detect的效果 源碼下載 YOLOv8官方的GitHub代碼&#xff0c;同時上面也有基礎環境的配置要…

IntelliJ IDEA 16創建Web項目

首先要理解一個概念&#xff1a;在IntelliJ IDEA中“new Project”相當于eclipse中的工作空間&#xff08;Workspace&#xff09;&#xff0c;而“new Module”相當于eclipse中的工程&#xff08;Project&#xff09;。以下均采用Intellij的說法&#xff0c;請自行對照轉換理解…

Maven倉庫清除remote.repositories、lastUpdated、sha1腳本

Maven倉庫清除remote.repositories、lastUpdated、sha1腳本 1. 腳本功能 清除本地maven倉庫的_remote.repositories、sha1、lastUpdated的文件 2. 腳本內容 set REPOSITORY_PATH%cd% rem 搜索中... for /f "delims" %%i in (dir /b /s "%REPOSITORY_PATH%\*…