本文将介绍U-net模型,以及其tensorflow的实现,保存在Github

U-net 结构

U-net及其TensorFlow的实现
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
U-net及其TensorFlow的实现 U-net及其TensorFlow的实现 U-net及其TensorFlow的实现

测试30张图片,准确率平均96.55%,就是耗时比较长,花了37.0466s

数据

数据使用的是ISBI Challenge 2012中的数据集。Github地址中的data_set文件夹中包含train、label 和 test数据

参考文献

1.《U-net Convolutional networks for biomedical image segmentation》

相关文章: