0 背景
在语义分割领域,unet 也是一个经典网络,尤其是在医学影像分割方面,效果很好。本文对 unet 算法进行一个解读介绍。
1 FCN 网络
语义分割的开山之作是 FCN 网络,具体解读可以参考《全卷积网络 FCN 详解》,
归纳一下,FCN 的特点包括以下三方面:
(1)全卷积网络(fully convolutional)
将原本 CNN 的最后三层全连接层变成卷积层,可以适应任意尺寸的输入,也大幅减少计算量,降低模型复杂度。
(2)上采样(upsample)
采用反卷积网络,使用双线性插值方法完成上采样过程
(3)跳层结构(skip layer)
直接利用上采样对最后一层特征图进行上采样的话,会损失很多细节,边缘模糊,使用跳跃结构,将最后一层的预测(有丰富的全局信息)和更浅层(有更多的局部细节)的预测结合起来(sum 方式),可以恢复细节信息。
2 UNET网络
unet 网络是对 FCN 的改进,其结构图如下所示
unet 是一种典型的编码器-解码器结构,左边卷积网络部分负责完成特征提取,可以看到特征图尺寸不断减小。而右边对应的是上采样过程,通过与不同卷积层的信息进行跳层链接(concat 方式),恢复到和原图接近的大小。
有一些细节需要注意(参考《Unet学习笔记》):
- 可以看到,输入是 572x572 的,但是输出变成了 388x388,这说明经过网络以后,输出的结果和原图不是完全对应的,这在计算loss和输出结果都可以得到体现。
- 蓝色箭头代表 3x3 的卷积操作,并且 stride 是1,padding 策略是 vaild,因此,每个该操作以后,featuremap 的大小会减2。
- 红色箭头代表 2x2 的 maxpooling 操作,需要注意的是,此时的 padding 策略也是 vaild(same 策略会在边缘填充0,保证 featuremap 的每个值都会被取到,vaild 会忽略掉不能进行下去的pooling操作,而不是进行填充),这就会导致如果 pooling 之前featuremap 的大小是奇数,那么就会损失一些信息 。
- 绿色箭头代表 2x2 的反卷积操作,操作会将 featuremap 的大小乘 2,共包含 4 次上采样过程。
- 灰色箭头表示复制和剪切操作,可以发现,在同一层左边的最后一层要比右边的第一层要大一些,这就导致了,想要利用浅层的 feature,就要进行一些剪切,也导致了最终的输出是输入的中心某个区域。
- 输出的最后一层,使用了 1x1 的卷积层做了分类。
3 上采样的三种方式
(1)双线性插值:特点是不需要进行学习,运行速度快,操作简单
(2)反卷积:也叫转置卷积,外圈或中间补零
(3)反池化:记录池化过程中元素在对应 kernel 中的坐标,作为反池化的索引