U-Net再理解🍎
談一談UNet圖像分割🍉
來源公眾號:GiantPandaCV
來源標題:談一談UNet圖像分割
來源標題:https://mp.weixin.qq.com/s/eQgA1OYozKLXx-gbJjDpnw
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
圖像分割結構設計的一些套路:
- 上采樣+下采樣作為整體的網絡結構(Encoder-Decoder)
- 多尺度的特征融合
- 信息流通的方式
- 獲得像素級別的segment map
1. UNet網絡的技巧和思想

UNet最初的設計也是使用在醫學影像的分割,通過經典的編解碼結構、卷積、池化、ReLU激活函數,進行設計
UNet的技巧
- 不用Padding,防止位置發生偏移
- 上采樣使用插值法+conv,而不使用轉置卷積等上采樣方法,讓特征圖保持着均勻的色差
- 使用skip connection更好的進行信息融合
2. UNet++

從UNet++開始,網絡的設計就開始注意原始圖像的位置信息,還有就是整個網絡的信息融合的能力。
所以,UNet++通過一系列嘗試,最終設計成稠密連接,同時有長連接和短連接,並且將UNet中間空心的位置填滿;
可以抓取不同層次的特征/不同大小的感受野。UNet++橫向看可以看做一個稠密結構的DenseNet。
3. UNet3+

UNet++只是針對於同一尺度的稠密連接,而UNet3+則是跨尺度的稠密連接
UNet3+橫縱信息互相交融,像極了國內高鐵的“八橫八縱”的高鐵網,可以獲得更大范圍的信息融合與流通。又一次感覺很多算法上的設計思想都有異曲同工之妙,亦或者說是源於生活。
當然,UNet3+效果在醫療圖像上分割有着不俗的效果,還有一部分是來源於其精心設計的損失函數MS-SSIM,其作為UNet3+組合損失函數的一部分,也會在提點上有着一定的作用(算法除了模型設計,當然還逃脫不了損失的設計)。
4. U2Net
這個網絡的設計,給我的一個感覺就是很飄逸了,這是UNet系列改進的另一條路(我個人覺得,作者對於卷積、池化的使用達到了一個很高的水平,這是在一些常規的設計中還是比較難看到的,用簡單的組件設計出一個很優秀的算法)。
嵌套UNet的方式,不可謂不是一種天秀的方法;同時通過膨脹卷積的使用,在不增加計算量的情況下,獲得了很大的感受野,整個網絡看起來變得很深,但是在參數量上的控制,已經達到了一種爐火純青的地步。
不過,這篇論文的實驗的數據集不在是針對醫療圖像,也沒有去做實驗去比較;但是,U2Net為了獲得更大的感受野,個人覺得在位置信息上丟失的還是比較多的,在對於位置信息的表現力,可能是有所欠缺的。

U-Net 3+: 全尺度的跳躍連接的 UNet🍉
來源公眾號:AI約讀社
來源標題:U-Net 3+: 全尺度的跳躍連接的 UNet
來源標題:https://mp.weixin.qq.com/s/M2y2LuPjOEzsol6-v61iVQ
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
本文是關於UNet+++的簡要回顧。通過增強U-Net架構,在多個數據集上U-NET 3+性能優於Attention UNET,PSPNet,DeepLabV2,DeepLabV3和DeepLabv3 +。這是發表2020 ICASSP的一篇論文,UNet++使用嵌套和密集跳過連接,但它沒有從全尺度探索足夠的信息。在 UNet 3+ 中,使用了全面的跳躍連接和深度監督:
- 全尺度跳躍連接:將來自不同尺度特征圖的低級細節與高級語義結合起來。
- 全尺度的深度監督:從全尺度聚合特征圖中學習分層表示。
- 進一步提出了混合損失函數和分類引導模塊(CGM)
UNet 3+提供更少的參數,但可以產生更准確的位置感知和邊界增強的分割圖。
論文:UNet 3+: A Full-Scale Connected UNet for Medical Image Segmentation
論文鏈接:https://arxiv.org/abs/2004.08790
代碼鏈接:https://github.com/ZJUGiveLab/UNet-Version
01 全尺度跳躍連接
U-Net,U-Net++, U-Net3+ 結構圖:

- 無論是普通的連接U-Net還是密集連接的U-Net ++都缺乏從全尺度探索足夠信息的能力,因此不能明確地得知器官的位置和邊界。
- U-Net 3+ 中的每個解碼器層都融合了來自編碼器的較小和相同尺度的特征圖以及來自解碼器的較大尺度的特征圖,它們捕獲了全尺度下的細粒度語義和粗粒度語義。

- 為了構建 \(X_{D e}^{3}\) 特征圖,類似於U-NET,直接接收來自相同尺度編碼器層的特征圖 \(X_{E n}^{3}\)
- 與U-Net 相比,一組編碼器-解碼間跳躍連接通過非重疊最大池化操作將來自較小尺度編碼器層 \(X_{E n}^{1}\)和 \(X_{E n}^{2}\)進行池化下采樣,以便傳遞底層的低級語義信息。
- 通過一系列內部解碼器跳躍連接利用雙線性插值傳輸來自大尺度解碼器層 層\(X_{D e}^{4}\) 和 層\(X_{D e}^{5}\) 的高級語義信息。
- UNet 3+ 中的參數少於UNet和UNet++ 中的參數。(這里有數學證明,有興趣的可以閱讀論文。)
全尺度的深度監督
2.1 深度監督
- UNet 3+ 從每個解碼器階段(Sup1 到 Sup5)產生一個切分側邊輸出,由真實的分類結果監督。
- 為了實現深度監督,每個解碼器階段的最后一層被送入一個普通的 3 × 3 卷積層,然后是一個雙線性上采樣和一個 sigmoid 函數。
2.2 損失函數
- 多尺度結構相似性指數 (MM-SSIM) 損失用於為模糊邊界分配更高的權重。
-
Focal loss起源於RetinaNet,用於處理類不平衡問題。
-
使用標准IoU 損失。
-
因此,開發了一種混合損失用於在三級層次結構(像素級、補丁級和圖片級)中進行分割,它能捕獲大尺度的和精細結構清晰的邊界,混合分割損失被定義為:
2.3. 分類引導模塊 (CGM)
-
非器官圖像中存在誤報。這可能是由於來自背景的噪聲信息保留在較淺層中,導致過度分割現象。
-
為了解決這個問題,增加了一個額外的分類任務,用於預測輸入圖像是否有器官。如在上面的圖所示,經過一系列的操作包括dropout,卷積,maxpooling,sigmoid, 最后有兩個值代表有/沒有器官的概率,最深層次的二維張量 \(X_{E n}^{5}\),其中每一個代表的有/無器官的概率。
-
在argmax 函數的幫助下,二維張量被轉換為 {0,1} 的單個輸出,表示有/無器官。
-
隨后,單分類輸出與側分割輸出相乘。由於二值分類任務的簡單性,該模塊通過優化二值交叉熵損失函數,輕松獲得准確的分類結果,實現了對非器官圖像過分割的指導。
FCN、Unet、Unet++:醫學圖像分割網絡一覽 🍉
來源公眾號:機器學習實驗室
來源標題:FCN、Unet、Unet++:醫學圖像分割網絡一覽
來源標題:https://mp.weixin.qq.com/s/fUCqMCyYmmkPB5uPEyZpZA
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
一、相關知識點解釋
1、圖像分割中幾種定義的區別
語義分割(Semantic Segmentation):就是對一張圖像上的所有像素點進行分類。(eg: FCN/Unet/Unet++/...)
實例分割(Instance Segmentation):可以理解為目標檢測和語義分割的結合。(eg: Mask R-CNN/...)相對目標檢測的邊界框,實例分割可精確到物體的邊緣;相對語義分割,實例分割需要標注出圖上同一物體的不同個體。
全景分割(Panoptic Segmentation):可以理解為語義分割和實例分割的結合。實例分割只對圖像中的object進行檢測,並對檢測到的object進行分割;全景分割是對圖中的所有物體包括背景都要進行檢測和分割。

圖像分類:圖像中的氣球是一個類別。[1]
語義分割:分割出氣球和背景。
目標檢測:圖像中有7個目標氣球,並且檢測出每個氣球的坐標位置。
實例分割:圖像中有7個不同的氣球,在像素層面給出屬於每個氣球的像素。
2. CNN特征學習的優勢
- 高分辨率特征(較淺的卷積層)感知域較小,有利於feature map和原圖進行對齊的,也就是我說的可以提供更多的位置信息。
- 低分辨率信息(深層的卷積層)由於感知域較大,能夠學習到更加抽象一些的特征,可以提供更多的上下文信息,即強語義信息,這有利於像素的精確分類。
3. 上采樣
上采樣(upsampling)一般包括2種方式:
-
Resize,如雙線性插值直接對圖像進行縮放(這種方法在原文中提到)
-
Deconvolution(反卷積)[2],也叫Transposed Convolution(轉置卷積),可以理解為卷積的逆向操作。
4. 醫學影像語義分割的幾個評估指標
1)Jaccard(IoU)
用於比較有限樣本集之間的相似性與差異性。Jaccard值越大,樣本相似度越高。
2)Dice相似系數
一種集合相似度度量指標,通常用於計算兩個樣本的相似度,值的范圍0~1 ,分割結果最好時值為1 ,最差時值為0 。Dice相似系數對mask的內部填充比較敏感。
3)Hausdorff 距離(豪斯多夫距離)
描述兩組點集之間相似程度的一種量度,對分割出的邊界比較敏感。
4)F1-score
用來衡量二分類模型精確度的一種指標,同時考慮到分類模型的准確率和召回率,可看做是准確率和召回率的一種加權平均。
二、FCN網絡的理解
FCN將一般的經典的分類網絡模型(VGG16...)的最后一層的FC層(全連接)換成卷積,這樣可以通過二維的特征圖,后接softmax獲得每個像素點的分類信息,從而解決了分割問題。
核心思想:
- 不含全連接層(fc)的全卷積(fully conv)網絡。可適應任意尺寸輸入。
- 增大數據尺寸的反卷積(deconv)層。能夠輸出精細的結果。
- 結合不同深度層結果的跳級(skip)結構。同時確保魯棒性和精確性。
-
對於FCN-32s,直接對pool5 feature進行32倍上采樣獲得32x upsampled feature,再對32x upsampled feature每個點做softmax prediction獲得32x upsampled feature prediction(即分割圖)。
-
對於FCN-16s,首先對pool5 feature進行2倍上采樣獲得2x upsampled feature,再把pool4 feature和2x upsampled feature逐點相加,然后對相加的feature進行16倍上采樣,並softmax prediction,獲得16x upsampled feature prediction。
-
對於FCN-8s,首先進行pool4+2x upsampled feature逐點相加,然后又進行pool3+2x upsampled逐點相加,即進行更多次特征融合。
FCN缺點:
- 結果不夠精細。進行8倍上采樣雖然比32倍的效果好了很多,但是上采樣的結果還是比較模糊和平滑,對圖像中的細節不敏感。
- 對各個像素進行分類,沒有充分考慮像素與像素之間的關系。忽略了在通常的基於像素分類的分割方法中使用的空間規整(spatial regularization)步驟,缺乏空間一致性。
三、U-net網絡的理解
整個U-Net網絡結構類似於一個大型的字母U,與FCN都是很小的分割網絡,既沒有使用空洞卷積,也沒有后接CRF,結構簡單。
- 首先進行Conv+Pooling下采樣;
- 然后反卷積進行上采樣,crop之前的低層feature map,進行融合;
- 再次上采樣。
- 重復這個過程,直到獲得輸出388x388x2的feature map,
- 最后經過softmax獲得output segment map。總體來說與FCN思路非常類似。
UNet的encoder下采樣4次,一共下采樣16倍,對稱地,其decoder也相應上采樣4次,將encoder得到的高級語義特征圖恢復到原圖片的分辨率。
它采用了與FCN不同的特征融合方式:
- FCN采用的是逐點相加,對應tensorflow的tf.add()函數
- U-Net采用的是channel維度拼接融合,對應tensorflow的tf.concat()函數
四、Unet++網絡的理解
文章對Unet改進的點主要是skip connection,作者認為skip connection 直接將unet中encoder的淺層特征與decoder的深層特征結合是不妥當的,會產生semantic gap。
文中假設:當所結合的淺層特征與深層特征是semantically similar時,網絡的優化問題就會更簡單,因此文章對skip connection的改進就是想bridge/reduce 這個semantic gap。
附Unet++論文地址:https://arxiv.org/pdf/1807.10165.pdf
代碼地址:https://github.com/MrGiovanni/UNetPlusPlus
五、Unet+++算法的理解 [5]
為了彌補UNet和UNet++的缺陷,UNet 3+中的每一個解碼器層都融合了來自編碼器中的小尺度和同尺度的特征圖,以及來自解碼器的大尺度的特征圖,這些特征圖捕獲了全尺度下的細粒度語義和粗粒度語義。
附U-net+++論文地址:https://arxiv.org/abs/2004.08790
六、DeepLab v3+算法簡閱 [6]
Encoder部分
Encoder就是原來的DeepLabv3,需要注意點:
- 輸入尺寸與輸出尺寸比(output stride = 16),最后一個stage的膨脹率rate為2。
- Atrous Spatial Pyramid Pooling module(ASPP)有四個不同的rate,額外一個全局平均池化。
Decoder部分
先把encoder的結果上采樣4倍,然后與resnet中下采樣前的Conv2d特征concat一起,再進行3x3的卷積,最后上采樣4倍得到最終結果。
需要注意點:融合低層次信息前,先進行1x1的卷積,目的是降通道(例如有512個通道,而encoder結果只有256個通道)
附DeepLab v3+論文地址:https://arxiv.org/pdf/1802.02611.pdf
七、Unet在醫學圖像上的適用與CNN分割算法的簡要總結
1. Unet結構特點
UNet相比於FCN和Deeplab等,共進行了4次上采樣,並在同一個stage使用了skip connection,而不是直接在高級語義特征上進行監督和loss反傳,這樣就保證了最后恢復出來的特征圖融合了更多的low-level的feature,也使得不同scale的feature得到了的融合,從而可以進行多尺度預測和DeepSupervision。4次上采樣也使得分割圖恢復邊緣等信息更加精細。
2. 為什么適用於醫學圖像?
- 因為醫學圖像邊界模糊、梯度復雜,需要較多的高分辨率信息。高分辨率用於精准分割。
- 人體內部結構相對固定,分割目標在人體圖像中的分布很具有規律,語義簡單明確,低分辨率信息能夠提供這一信息,用於目標物體的識別。
- UNet結合了低分辨率信息(提供物體類別識別依據)和高分辨率信息(提供精准分割定位依據),完美適用於醫學圖像分割。
3. 分割算法改進總結:
- 下采樣+上采樣:Convlution + Deconvlution/Resize
- 多尺度特征融合:特征逐點相加/特征channel維度拼接
- 獲得像素級別的segement map:對每一個像素點進行判斷類別