U-net及其TensorFlow的實現
阿新 • • 發佈:2019-01-27
本文將介紹U-net模型,以及其tensorflow的實現,儲存在Github上
U-net 結構
U-net顧名思義,其結構是一個U型的網路
左側為一個下采樣過程,分4組卷積操作(藍色箭頭)進行。每組卷積操作後進行一次maxpool操作(紅色箭頭),將圖片進一步縮小為原來的。通過4組操作將大小的輸入圖片,計算為 大小。
右側的上取樣過程。上取樣過程使用的是4組反捲積(淺綠色箭頭),TensorFlow使用的函式是tf.nn.conv2d_transpose(),每次上取樣將圖片擴充套件為原來的 倍, 然後將對應層的圖片(特徵圖)進行剪裁和複製,然後concat到上卷積的結果上(灰色箭頭)。
上取樣過程結束後,得到 大小的圖, 最後用一個 的卷積核將通道數減到2(深綠色箭頭),即label上的兩種顏色。
tensrflow實現
我按照上述的結構實現後,發現效果不行,感覺是copy and crop處出現了問題,應該不能直接剪裁,因此我做了小部分修改。即:
- 我在作卷積(藍色箭頭)時沒有縮小大小。(例如:第一個下采樣,圖中是 , 而我的是
- 我減小了輸入圖片的大小,圖中是,我減少成了
此外,我還加上了batch_normal,效果挺好的,loss降得很快(詳見unet-TF-withBatchNormal.py
效果
某幅圖片的預測結果,準確度
image | ground_truth | prediction |
---|---|---|
測試30張圖片,準確率平均,就是耗時比較長,花了
資料
資料使用的是ISBI Challenge 2012中的資料集。Github地址中的data_set資料夾中包含train、label 和 test資料