U-Net: Convolutional Networks for Biomedical Image Segmentation 論文筆記

1. 結構

1.1 結構分為Encoder和Decoder兩部分。

      • Encoder包含5個卷積塊,每個塊由兩個3*3卷積後接一個pooling最後一個卷積塊沒有池化。兩個卷積操作先將通道翻倍,然後通道不變再卷機。每個卷積塊中圖像尺寸有微小的變化。
      • Decoder也是由5個卷積塊組成,不同的是,每個卷積塊中先up-conv把圖像尺寸翻倍,在pytorch中,上採樣是通過 @轉置卷積 來實現的。同時,把轉置卷積之後的feature map把和對應的encoder層產生的feature map(為了尺寸一致,會先裁剪)連接起來,然後經過兩次2*2的尺寸不變卷積,兩次卷積通道先減一半,然後通道不變。另一個不同就是,上採樣的轉置卷積在尺寸翻倍的同時,通道數會減半。eg. 1024*28*28,上採樣後變成512*56*56,加上encoder的map,變成1024*56*56。
      • U-Net中為瞭解決圖像在卷積在變小,損失細節的問題,使用了利用鏡像來擴大圖像的方法,也就是輸入圖像比輸出(原圖大小)大,如下圖。在FCN中,為瞭解決這個問題,它是在第一層卷積的時候用了padding = 100。
      • #關於max-pooling max pooling在不同的channel上是分開執行的,也就是說並不是之前理解的pooling後每一個通道的feature map都是相同的。

2. 其他

2.1 關於輸出

      • 根據反捲積可視化的經驗,在把feature map重建回像素空間時,只需要一個map就可以得到圖像,在U-Net,包括FCN中,最終的輸出是和目標的類別有關的,如果需要分割的有20類,最終輸出的圖形通道就是21個(每個目標+背景),每一個代表一類目標在每個像素的可能性。對於比較常見的只檢測一個目標的問題,輸出就只有兩個,一個是目標的像素可能性,一個是背景的像素可能性。

2.2 關於decoder過程的思考

      • 在可視化過程中,重建是利用unpooling和轉置卷積進行的,也就是轉置卷積過程用的是和正向卷積同一套權重。但是在U-Net和FCN中,權重都是獨立學習的。
      • 感覺比較類似的是無監督網路,因為無監督中做loss的時候,是和原圖來比較的
      • FCN,U-Net區別
        • FCN和U-Net不同的在於反捲積的層數,和特徵融合的方式。
          • 下圖是FCN的融合,可以看到是直接相加
        • 在FCN上採樣的過程全都是使用了轉置卷積,對於FCN8s來說,decoder有三層,使用了3次轉置卷積。而U-Net是轉置卷積和卷積交替使用,直觀來看,這樣可以在重建的時候學到更多的東西。
      • 回到上一個層面,感覺U-Net,FCN在在學習過程中都用到了encoder中產生的feature map,直觀上是為了在重建的時候有更多的信息。但有個方面,就是在訓練過程中,encoder的權重也是在學習過程中變化的,和可視化不同的是,在U-Net中,雖然表面看起來decoder和encoder是對稱的,但嚴格來說並不對稱,encoder是3*3卷積,decoder是2*2卷積。另外,這兩種網路都是針對feature map實現encoder和decoder的聯繫,在filrer上並沒有這麼做。不知道是否有別的論文嘗試過。

Reference

U-Net: Convolutional Networks for Biomedical Image Segmentation

推薦閱讀:

相關文章