1. 程式人生 > >U-net及其TensorFlow的實現

U-net及其TensorFlow的實現

本文將介紹U-net模型,以及其tensorflow的實現,儲存在Github

U-net 結構

u-net結構
U-net顧名思義,其結構是一個U型的網路
左側為一個下采樣過程,分4組卷積操作(藍色箭頭)進行。每組卷積操作後進行一次maxpool操作(紅色箭頭),將圖片進一步縮小為原來的1/2。通過4組操作將572×572×1大小的輸入圖片,計算為32×32×1024 大小。
右側的上取樣過程。上取樣過程使用的是4組反捲積(淺綠色箭頭),TensorFlow使用的函式是tf.nn.conv2d_transpose(),每次上取樣將圖片擴充套件為原來的2

倍, 然後將對應層的圖片(特徵圖)進行剪裁和複製,然後concat到上卷積的結果上(灰色箭頭)。
上取樣過程結束後,得到388×388×64 大小的圖, 最後用一個1×1 的卷積核將通道數減到2(深綠色箭頭),即label上的兩種顏色。

tensrflow實現

我按照上述的結構實現後,發現效果不行,感覺是copy and crop處出現了問題,應該不能直接剪裁,因此我做了小部分修改。即:

  1. 我在作3×3卷積(藍色箭頭)時沒有縮小大小。(例如:第一個下采樣,圖中是572×572570×570568×568 , 而我的是
    572×572572×572572×572
    )這樣做的好處是省去了剪裁(crop)操作,因為對應層的大小是一樣的(例如:64maxpool323232upsample64),這樣能保留卷積操作提取到的全部資訊(當然,用一個卷積核替代crop改變圖片大小也可以)
  2. 我減小了輸入圖片的大小,圖中是572×572,我減少成了512×512

此外,我還加上了batch_normal,效果挺好的,loss降得很快(詳見unet-TF-withBatchNormal.py

中的函式batch_norm( )

效果

某幅圖片的預測結果,準確度96.88%

image ground_truth prediction
Image label $1600

測試30張圖片,準確率平均96.55%,就是耗時比較長,花了37.0466s

資料

資料使用的是ISBI Challenge 2012中的資料集。Github地址中的data_set資料夾中包含train、label 和 test資料

參考文獻