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


paper: U-Net: Convolutional Networks for Biomedical Image Segmentation

code: PyTorch,官方公布的matlab的caffe版本

如果需要看網絡結構,可以用這個prototxt文件unet prototxt,網絡結構查看工具http://ethereon.github.io/netscope/quickstart.html


Abstract

  1. Unet是2015年的一篇工作了,在醫療圖像分割中,能夠在很少的訓練集上實現比較好的分割效果。同時,設計的Encode-Decode結構(U形結構),在后來的很多方法中被借鑒使用
  2. 現在回過來看UNet的工作,整體思路還是比較簡單的,具體的細節,將按照如下的網絡結構圖進行展開闡述:

Details

  1. 每一層的尺寸

    • 訓練樣本的大小是512*512,為了能夠包含到圖像邊緣的像素點,將訓練樣本擴充為572*572(圖像邊緣多30個像素,用圖像內的像素對稱填充),如下圖
      • 至於為什么擴充30個像素,個人理解是為了保證對Encode中的倒數第二個特征圖(也就是Decode時進行concat的第一個層)crop時不會把原始圖像的邊緣信息裁剪掉,如上圖中右側原始圖像的一個點,其按照Encode的反向過程計算的感受野大小為\( ((0\times2+2+2)\times2+2+2)\times2+2+2)\times2+2+2 = 60 \)
    • Encode過程中,每一層的卷積都是valid卷積,即padding=0,這就會導致每一層執行一次3*3卷積尺寸便縮小減小4個像素。這里如果用same conv,網絡結構設計上應該也會更隨意些
    • 整個UNet共計經過4次下采樣和4次上采樣,除最后一層外全部使用的是3*3(valid conv),最后一層使用1*1,共計23層conv
  2. 每一層的channel個數

    • Encode每次執行pooling后,kernel的個數都會增加一倍,而Decode的過程中,則是反過來的
  3. Encode-Decode結構的連接方式

    • 這里連接是為了將低層特征和高層特征進行融合
    • 對於低層特征(encode部分的feature map),由於前面提到的valild conv,在decode中的層執行upconv操作后,和原始尺寸還是有偏差的,因此直接將encode過程中的feature map裁剪成相同大小的feature map,然后在直接在channel維度concate,而不是element-wise的sum;同時,原始輸入圖像擴充,也保證了這里crop時原始圖像的特征不會被丟棄
  4. Loss

    • unet使用的是二分類交叉熵損失,如果用於多分類,該用多分類交叉熵即可
    • unet本身對二分類交叉熵loss進行了修改,引入weighted map,使得網絡能夠學習到更好的邊界信息,這里不再贅述。(個人理解,對於其他語義分割任務,用原始交叉熵即可)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM