医学图像分割 | U-Net网络及他的变体
點擊上方“AI算法修煉營”,選擇“星標(biāo)”公眾號
精選作品,第一時間送達(dá)
今天來簡單歸納一下,醫(yī)學(xué)圖像分割的內(nèi)容,還有很多代表性的工作在之后的文章中不斷更新,由于同一個網(wǎng)絡(luò)結(jié)構(gòu)可能在不同的數(shù)據(jù)集上表現(xiàn)出不一樣的性能,在具體的任務(wù)場景中還是要結(jié)合數(shù)據(jù)集來選擇合適的網(wǎng)絡(luò)。
醫(yī)學(xué)圖像特點
1.圖像語義較為簡單、結(jié)構(gòu)較為固定。我們做腦的,就用腦CT和腦MRI,做胸片的只用胸片CT,做眼底的只用眼底OCT,都是一個固定的器官的成像,而不是全身的。由于器官本身結(jié)構(gòu)固定和語義信息沒有特別豐富,所以高級語義信息和低級特征都顯得很重要(UNet的skip connection和U型結(jié)構(gòu)就派上了用場)。舉兩個例子直觀感受下。
2.數(shù)據(jù)量少。醫(yī)學(xué)影像的數(shù)據(jù)獲取相對難一些,很多比賽只提供不到100例數(shù)據(jù)。所以我們設(shè)計的模型不宜多大,參數(shù)過多,很容易導(dǎo)致過擬合。
原始UNet的參數(shù)量在28M左右(上采樣帶轉(zhuǎn)置卷積的UNet參數(shù)量在31M左右),而如果把channel數(shù)成倍縮小,模型可以更小。縮小兩倍后,UNet參數(shù)量在7.75M。縮小四倍,可以把模型參數(shù)量縮小至2M以內(nèi),非常輕量。個人嘗試過使用Deeplab v3+和DRN等自然圖像語義分割的SOTA網(wǎng)絡(luò)在自己的項目上,發(fā)現(xiàn)效果和UNet差不多,但是參數(shù)量會大很多。
3.多模態(tài)。相比自然影像,醫(yī)療影像比較有趣和不同的一點是,醫(yī)療影像是具有多種模態(tài)的。以ISLES腦梗競賽為例,其官方提供了CBF,MTT,CBV,TMAX,CTP等多種模態(tài)的數(shù)據(jù)。
這就需要我們更好的設(shè)計網(wǎng)絡(luò)去提取不同模態(tài)的特征feature。這里提供兩篇論文供大家參考。
Joint Sequence Learning and Cross-Modality Convolution for 3D Biomedical Segmentation(CVPR 2017) ,
Dense Multi-path U-Net for Ischemic Stroke Lesion Segmentation in Multiple Image Modalities.
4.可解釋性重要。由于醫(yī)療影像最終是輔助醫(yī)生的臨床診斷,所以網(wǎng)絡(luò)告訴醫(yī)生一個3D的CT有沒有病是遠(yuǎn)遠(yuǎn)不夠的,醫(yī)生還要進(jìn)一步的想知道,病灶在哪一層,在哪一層的哪個位置,分割出來了嗎,能求體積嘛?同時對于網(wǎng)絡(luò)給出的分類和分割等結(jié)果,醫(yī)生還想知道為什么,所以一些神經(jīng)網(wǎng)絡(luò)可解釋性的trick就有用處了,比較常用的就是畫activation map。看網(wǎng)絡(luò)的哪些區(qū)域被激活了,如下圖。
這里推薦兩篇工作:周博磊老師的Learning Deep Features for Discriminative Localization(CVPR2016)和其實驗室同學(xué)的 Deep Learning for Identifying Metastatic Breast Cancer(上圖的出處)
(周博磊知乎主頁:https://www.zhihu.com/people/zhou-bo-lei/activities)
U-Net
論文地址:https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/?
代碼地址:https://github.com/wolny/pytorch-3dunet
自2015年以來,在生物醫(yī)學(xué)圖像分割領(lǐng)域,U-Net得到了廣泛的應(yīng)用,該方法在2015年MICCAI會議上提出,目前已達(dá)到四千多次引用。至今,U-Net已經(jīng)有了很多變體,目前已有許多新的卷積神經(jīng)網(wǎng)絡(luò)設(shè)計方式,但很多仍延續(xù)了U-Net的核心思想,加入了新的模塊或者融入其他設(shè)計理念。U-Net架構(gòu)在不同的生物醫(yī)學(xué)分割應(yīng)用中實現(xiàn)了非常好的性能。由于借助具有彈性形變的數(shù)據(jù)增強(qiáng)功能,它只需要少量的的帶標(biāo)注的圖像,并且在NVidia Titan GPU(6 GB)上僅需要10個小時的訓(xùn)練時間。
U-Net如下圖所示,是一個encoder-decoder結(jié)構(gòu),左邊一半的encoder包括若干卷積,池化,把圖像進(jìn)行下采樣,右邊的decoder進(jìn)行上采樣,恢復(fù)到原圖的形狀,給出每個像素的預(yù)測。
具體來說,左側(cè)可視為一個編碼器,右側(cè)可視為一個解碼器。編碼器有四個子模塊,每個子模塊包含兩個卷積層,每個子模塊之后有一個通過max pool實現(xiàn)的下采樣層。輸入圖像的分辨率是572x572, 第1-5個模塊的分辨率分別是572x572, 284x284, 140x140, 68x68和32x32。由于卷積使用的是valid模式,故這里后一個子模塊的分辨率等于(前一個子模塊的分辨率-4)/2。解碼器包含四個子模塊,分辨率通過上采樣操作依次上升,直到與輸入圖像的分辨率一致(由于卷積使用的是valid模式,實際輸出比輸入圖像小一些)。該網(wǎng)絡(luò)還使用了跳躍連接,將上采樣結(jié)果與編碼器中具有相同分辨率的子模塊的輸出進(jìn)行連接,作為解碼器中下一個子模塊的輸入。
?U-Net架構(gòu)
架構(gòu)中的一個重要修改部分是在上采樣中還有大量的特征通道,這些通道允許網(wǎng)絡(luò)將上下文信息傳播到具有更高分辨率的層。因此,拓展路徑或多或少地與收縮路徑對稱,并產(chǎn)生一個U形結(jié)構(gòu)。
在該網(wǎng)絡(luò)中沒有任何完全連接的層,并且僅使用每個卷積的有效部分,即分割映射僅包含在輸入圖像中可獲得完整上下文的像素。該策略允許通過重疊平鋪策略對任意大小的圖像進(jìn)行無縫分割,如圖所示。為了預(yù)測圖像邊界區(qū)域中的像素,通過鏡像輸入圖像來推斷缺失的上下文。這種平鋪策略對于將網(wǎng)絡(luò)應(yīng)用于大型的圖像非常重要,否則分辨率將受到GPU內(nèi)存的限制。
?對任意大型圖像進(jìn)行無縫分割的重疊平鋪策略
對于可用訓(xùn)練數(shù)據(jù)非常少的情況,可以通過對可用的訓(xùn)練圖像應(yīng)用彈性變形來進(jìn)行數(shù)據(jù)增強(qiáng)。這使得網(wǎng)絡(luò)學(xué)習(xí)這種變形的不變性,而不需要在標(biāo)注圖像語料庫中看到這些變形。這在生物醫(yī)學(xué)分割中尤其重要,因為變形曾是組織中最常見的變化,并且可以有效地模擬真實的變形。
許多細(xì)胞分割任務(wù)中的另一個挑戰(zhàn)是分離同一類的接觸目標(biāo)。為此建議使用加權(quán)損失,其中在接觸單元之間分開的背景標(biāo)簽在損失函數(shù)中獲得較大的權(quán)重。
相比于FCN和Deeplab等,UNet共進(jìn)行了4次上采樣,并在同一個stage使用了skip connection,而不是直接在高級語義特征上進(jìn)行監(jiān)督和loss反傳,這樣就保證了最后恢復(fù)出來的特征圖融合了更多的low-level的feature,也使得不同scale的feature得到了的融合,從而可以進(jìn)行多尺度預(yù)測和DeepSupervision。4次上采樣也使得分割圖恢復(fù)邊緣等信息更加精細(xì)。
3D U-Net
論文地址:https://arxiv.org/pdf/1606.06650.pdf
代碼地址:https://github.com/wolny/pytorch-3dunet
3D U-Net是U-Net的一個簡單擴(kuò)展,應(yīng)用于三維圖像分割,結(jié)構(gòu)如下圖所示。相比于U-Net,該網(wǎng)絡(luò)僅用了三次下采樣操作,在每個卷積層后使用了batch normalization,但3D U-Net和U-Net均沒有使用dropout。
為了避免瓶頸,在上采樣和下采樣之前都將通道數(shù)增加為原來的二倍。左側(cè)的紅色虛線方框之內(nèi),在進(jìn)行 maxpooling 之前將通道數(shù)從 64 變?yōu)榱?128,及文中所說的 double;右側(cè)的紅色虛線內(nèi),在進(jìn)行轉(zhuǎn)置卷積之前,將通道數(shù)從 256 變?yōu)榱?512。實際上這種思想來源于 inception V3。使用加權(quán)的 softmax 損失函數(shù),將沒有標(biāo)簽的部分置為 0,讓模型只從有有標(biāo)簽的部分學(xué)習(xí)。
在2018年MICCAI腦腫瘤分割挑戰(zhàn)賽(brats)中,德國癌癥研究中心的團(tuán)隊使用3D U-Net,僅做了少量的改動,取得了該挑戰(zhàn)賽第二名的成績,發(fā)現(xiàn)相比于許多新的網(wǎng)絡(luò),3D U-Net仍然十分具有優(yōu)勢。
Res-UNet 和Dense U-Net
Res-UNet和Dense-UNet分別受到殘差連接和密集連接的啟發(fā),將UNet的每一個子模塊分別替換為具有殘差連接和密集連接的形式。
將Res-UNet用于視網(wǎng)膜圖像的分割,其結(jié)構(gòu)如下圖所示,其中灰色實線表示各個模塊中添加的殘差連接。
密集連接即將子模塊中某一層的輸出分別作為后續(xù)若干層的輸入的一部分,某一層的輸入則來自前面若干層的輸出的組合。
下圖是密集連接的一個例子。該文章中將U-Net的各個子模塊替換為這樣的密集連接模塊,提出Fully Dense UNet 用于去除圖像中的偽影。
MultiResUNet
論文地址:https://arxiv.org/abs/1902.04049.pdf
代碼地址:https://github.com/nibtehaz/MultiResUNet
MultiResUNet提出了一個MutiRes模塊與UNet結(jié)合。MutiRes模塊如下圖(c)所示,是一個殘差連接的擴(kuò)展,在該模塊中三個3x3的卷積結(jié)果拼接起來作為一個組合的特征圖,再與輸入特征圖經(jīng)過1x1卷積得到的結(jié)果相加。
該網(wǎng)絡(luò)的結(jié)構(gòu)圖如下圖所示,其中各個MultiRes模塊的內(nèi)部即為上圖所示。
該網(wǎng)絡(luò)除了MultiRes模塊以外,還提出了一個殘差路徑(ResPath), 使編碼器的特征在與解碼器中的對應(yīng)特征拼接之前,先進(jìn)行了一些額外的卷積操作,如下圖所示。作者認(rèn)為編碼器中的特征由于卷積層數(shù)較淺,是低層次的特征,而解碼器中對應(yīng)的特征由于卷積層更深,是較高層次的特征,二者在語義上有較大差距,推測不宜直接將二者進(jìn)行拼接。因此,使用額外的ResPath使二者在拼接前具有一致的深度,在ResPath1, 2, 3, 4中分別使用4,3,2,1個卷積層。
該文章在ISIC、CVC-ClinicDB、Brats等多個數(shù)據(jù)集上驗證了其性能。
Attention UNet
論文地址:https://arxiv.org/pdf/1804.03999.pdf
代碼地址:
https://github.com/ozan-oktay/Attention-Gated-Networks
Attention UNet在UNet中引入注意力機(jī)制,在對編碼器每個分辨率上的特征與解碼器中對應(yīng)特征進(jìn)行拼接之前,使用了一個注意力模塊,重新調(diào)整了編碼器的輸出特征。該模塊生成一個門控信號,用來控制不同空間位置處特征的重要性,如下圖中紅色圓圈所示。
該方法的注意力模塊內(nèi)部如下圖所示,該模塊通過1x1x1的卷積分別與ReLU和Sigmoid結(jié)合,生成一個權(quán)重圖?, 通過與編碼器中的特征相乘來對其進(jìn)行校正。
下圖展示了注意力權(quán)重圖的可視化效果。從左至右分別是一幅圖像和隨著訓(xùn)練次數(shù)的增加該圖像中得到的注意力權(quán)重。可見得到的注意力權(quán)重傾向于在目標(biāo)器官區(qū)域取得大的值,在背景區(qū)域取得較小的值,有助于提高圖像分割的精度。
Non-local U-Nets for Biomedical Image Segmentation(AAAI2020)
論文地址:https://arxiv.org/abs/1812.04103
代碼地址:https://github.com/Whu-wxy/Non-local-U-Nets-2D-block
global aggregation block
global aggregation block如上圖所示,圖看起來很復(fù)雜,實際上運算過程很簡單。
1.該結(jié)構(gòu)與Attention Is All You Need這篇文章的形式很相似。輸入圖為X(B*H*W*C),經(jīng)過QueryTransform和1*1卷積,轉(zhuǎn)換為Q(B*Hq*Wq*Ck),K(B*H*W*Ck),V(B*H*W*Cv)。QueryTransform可以為卷積,反卷積,插值等你喜歡的方法,最后的輸出結(jié)果的H與W將與這個值一致。
2.代碼里在Unfold之前有Multi-Head(Attention Is All You Need)的操作,不過在論文中沒有說明,實際上是把通道分為N等份。Unfold是把Batch,height,width,N通道合并,Q(B*Hq*Wq*N*ck),K(B*H*W*N*ck),V(B*H*W*N*cv)。
3.接下來是經(jīng)典的點積attention操作,得到一個權(quán)值矩陣A((B*Hq*Wq*N)*(B*H*W*N)),用于self-attention的信息加權(quán),分母Ck是通道數(shù),作用是調(diào)節(jié)矩陣的數(shù)值不要過大,使訓(xùn)練更穩(wěn)定(這個也是Attention Is All You Need提出的)。最后權(quán)值矩陣A和V點乘,得到最終的結(jié)果((B*Hq*Wq*N)*cv),可見輸出的height和width由Q決定,通道數(shù)由V決定。
4.我最近看了兩篇上采樣的論文,DUpsample和CARAFE,現(xiàn)在很多上采樣相關(guān)的論文關(guān)注于在上采樣時用CNN擴(kuò)大感受野,增加圖像局部信息。這篇文章提出的global aggregation block是一個將注意力機(jī)制和上/下采樣相結(jié)合的方法,關(guān)注全圖信息,感受野更大,可以在其他任務(wù)上試用一下,效果如何還是要看實踐的結(jié)果。
Non-local U-Nets
文章提出的Non-local U-Nets如上圖所示。
相比U-Net,卷積層數(shù)減少,圖像下采樣倍率從16倍變成4倍,保留了更多空間信息。encoder和decoder之間的skip connections用相加的方式,不是拼接的方式,讓模型推理速度更快。
上下采樣使用global aggregation block,使分割圖更準(zhǔn)確。
參考文章:
[1]?Section for Biomedical Image Analysis (SBIA)
(?https://www.med.upenn.edu/sbia/brats2018/data.html )
[2] https://zhuanlan.zhihu.com/p/57530767
[3] https://zhuanlan.zhihu.com/p/57237535
[4]https://www.zhihu.com/question/269914775
總結(jié)
以上是生活随笔為你收集整理的医学图像分割 | U-Net网络及他的变体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java入门 - Java初体验
- 下一篇: 计算机性能安全性,第一章 计算机安全与性