语义分割之: FCN

研究生阶段自己对分割这边还是很熟悉的, 工作后发现很多网络只能说出原理和整体框架, 面试时问的很细节, 再次将经典分割网络仔细review一遍.

主要创新点

  • 全卷积网络由分类到语义分割
  • 转置卷积实现上采样
  • 跳跃连接,跨层特征融合

从图像分类到语义分割

图像分类, 对于输入图片经过卷积池化后连接全连接层得到一个一维的类别预测向量. 向量的每个位置代表对某一个类别的响应. 考虑使用 1 * 1 卷积代替全连接层并将卷积核设置为类别数, 网络输出便可训练为每个位置属于每个类别的概率. 由于网络中具有池化操作, 得到的feature map相对于输入缩小了, 需要通过上采样进行空间分辨率恢复.

转置卷积实现上采样

对于普通卷积, 当步长大于1时, 会对图像进行下采样. 转置卷积则是对输入特征进行上采样, 转置卷积过程如下图, 通过先对输入进行填充, 再卷积, 将输出 2 * 2 上采样为 5 * 5. 也叫作分数步卷积, 是对特征图进行扩充, 假如扩张率(dilation)是2, 即意味着在特征图每两个相邻的像素间插入一个值(一般是插0)

对于上采样, 主要分为通过插值进行上采样, 上池化以及转置卷积, 通过插值双线性插值进行上采样使用的也比较多. 区别在于插值的方法进行上采样网络是不参与的, 转置卷积上采样是让网络通过学习进行上采样.

跨层通道融合

在采样VGG-16作为backbone网络时, 经过5个stage的卷积池化, 特征图进行了32倍的下采样, 此时由第五个池化层后得到的特征图进行上采样32倍得到输入大小, 称为 FCN-32s, 如下图:

但是FCN-32s非常粗糙, 虽然随着网络的加深得到的特征更深层, 但失去了空间位置信息. 而浅层则保留了更多的空间位置信息, 因此, 将深层特征与浅层特征进行融合便能进行互补, 提升结果

FCN-16s: 将 pool5层的预测通过转置卷积2倍上采样, 然后与pool4层的预测进行逐位加. 再进行16倍上采样得到输入大小. FCN-8s操作类似.

FCN-32s, FCN-16s, FCN-8s 效果对比如上, 可以看出随着特征的融合的更多,分割结果越精细.

最直观的FCN网络代码, pytorch

result

  • FCN-8s is the best in Pascal VOC 2011.
  • FCN-16s is the best in NYUDv2.
  • FCN-16s is the best in SIFT Flow.

Ref

FCN