FCN 笔记
关键点
- 全卷积
- 不含全连接层,可适应任意尺寸输入
- 上采样
- 转置卷积:卷积在神经网络结构的正向和反向传播中做相反的运算
- 转置卷积权值:双线性插值,学习率置 0(不学习)
- 跳跃结构
- 特征融合时,逐点相加
- crop_layer:配合 deconvolution 层使用,为了得到和原图分辨率相同的分割图。
输入图片小于 192*192 无法处理 → conv1_1 padding = 100 → crop_layer
一、全卷积网络(FCN)
卷积神经网络从图像分类到到对象检测、实例分割、到图像语义分割、是卷积特征提取从粗糙输出到精炼输出的不断升级,基于卷积神经网络的全卷积分割网络FCN是像素级别的图像语义分割网络,相比以前传统的图像分割方法,基于卷积神经网络的分割更加的精准,适应性更强。
上图是 FCN 网络像素级别的预测,支持每个像素点20个类别预测,多出来的一个类别是背景。
要把一个正常的图像分类网络,转换为一个全卷积网络,就是要对图像分类网络的全连接层重新变为卷积操作,变成携带空间信息多个维度 feature maps,图示如下:
二、 CNN 转换成 FCN
以 AlexNet 为例。AlexNet 网络结构如下图:
AlexNet 各层参数:
AlexNet 输入 224x224 的图像经过网络的降采样,尺寸逐渐缩小,最后为一维的全连接层。
具体转换过程:
-
用于分类的传统 CNN 网络
-
将所有的全连接层转换为 1x1 卷积
网络输入的图像大小可以不再固定
-
通过反卷积或转置卷积,将图像复原到原图的分辨率。
三、上采样
当网络转换为全卷积网络之后,对于正常的卷积输出是越来越小了,要实现密集层像素级别预测就需要多卷积输出进行上采样,在 FCN 网络作者的论文中,作者对如何上采样做了仔细的研究,主要的方法有三种:
- 迁移与合并
- 双线性插值上采样,对所有分类采用同一个 filter,大小固定
- 反向卷积(转置卷积),学习,在这个过程中,filters 大小是可以设置的
FCN网络论文作者经过对比觉得最后一种方法计算更加精准,可以通过卷积学习插值系数,是一种更好的上采样方法,所以 FCN 最终采样是反向卷积实现上采样,完成像素级别预测。
迁移与合并的工作原理可以通过下面这张图来解释
双线性插值比较low,大致看一张图就明白了:
反向卷积/转置卷积可以通过下面一张图表示如下:
其实转置卷积相当于卷积在神经网络结构的正向和反向传播中做相反的运算。
四、Skip Architecture
只对第 5 层的输出(32倍放大)反卷积到原图大小,得到的结果还是不够精确。于是作者采用skiplayer的方法,将第 4 层的输出和第 3 层的输出也依次反卷积(分别需要 16 倍和 8 倍上采样),再通过对应像素求和的方式进行联合,结果就更精细了。
五、网络实现
FCN 的卷积网络部分可以采用 VGG、GoogleNet、AlexNet 等作为前置基础网络,在这些的预训练基础上进行迁移学习与finetuning,对反卷积的结果跟对应的正向feature map进行叠加输出(这样做的目的是得到更加准确的像素级别分割),根据上采样的倍数不一样分为FCN-8S、FCN-16S、FCN-32S,图示如下:
效果对比如下: