《Fully Convolutional Networks for Semantic Segmentation》学习笔记

1. 总体概念

对于FCN的解释可以使用这样一句话来进行说明:直接用分割好的标记图像(ground truth)作为监督信息,训练一个端到端的网络。让网络做pixelwise的预测(prediction),直接预測分类结果(也可以叫label map)。
《Fully Convolutional Networks for Semantic Segmentation》学习笔记
核心思想
本文包含了当下CNN的三个思想:
(1)不含全连接层(fc)的全卷积(fully conv)网络。可适应任意尺寸输入。
(2)增大数据尺寸的反卷积(deconv)层。能够输出精细的结果。
(3)结合不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精确性。

2. 如何pixelwise prediction

传统的CNN网络是subsampling的,经过卷积之后相应的输出尺寸会减少。要想做pixelwise prediction,必须保证输出尺寸,也就是需要upsampking。对于样的问题,解决办法是这样的
(1) 对传统网络如AlexNet、VGG等的最后全连接层变成卷积层。
《Fully Convolutional Networks for Semantic Segmentation》学习笔记
《Fully Convolutional Networks for Semantic Segmentation》学习笔记
上图的上半部分是传统的CNN分类网络模型,网络的最后面接的是一个全连接层,产生的是对于某一类的预测。但是这样的预测我们是不需要的,所以将其拿掉,就成为了上图下半部分的样子,得到一个16*16的特征图。
(2)加入上采样层(upsampling layer)
这层的实现是采用双线性差值(bilinear)实现的。这里的上采样其实就是bilinear filtering,就是数字图像处理的二维插值。将特征图放大,然后用crop层剪去多余的部分,使其和ground truth有一样的尺寸以便计算各个像素的预测值。bilinear filtering可以用卷积的形式实现。和前面conv层不同,deconv中卷积核不是随机的,而是根据放大的尺寸生成了与类别相同数量的球形的矩阵。

这样做的目的是可以使用现有的经典网络进行前半部分(classification)权值的初始化之后再训练后半部分的网络

3. 网络训练

3.1 网络结构

(1)前半部分
《Fully Convolutional Networks for Semantic Segmentation》学习笔记
以经典的分类网络为初始化。最后两级是全连接(红色),参数弃去不用。比如VGG16网络,网络后面的全连接层,保留全连接层前面的部分,初始化的时候直接使用训练好的VGG16模型参数。
(2)后半部分
这里采用论文中的的图像进行说明
《Fully Convolutional Networks for Semantic Segmentation》学习笔记
可以看到FCN-32s是直接分类完成之后进行的upsampling,FCN-16s使用的是pool4的结果加上两倍upsampling conv7的结果,FCN-8s是使用pool3的结果加上2倍upsampling pool4和四倍upsampling conv7的结果

3.1 FCN-32s

《Fully Convolutional Networks for Semantic Segmentation》学习笔记
从特征小图(16*16*4096)预测分割小图(16*16*21),之后直接升采样为大图。
反卷积(橙色)的步长为32,这个网络称为FCN-32s。

3.2 FCN-16s

《Fully Convolutional Networks for Semantic Segmentation》学习笔记
升采样分为两次完成(橙色×2)。在第二次升采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来。使用跳级结构提升精确性。
第二次反卷积步长为16,这个网络称为FCN-16s。

3.3 FCN-8s

《Fully Convolutional Networks for Semantic Segmentation》学习笔记
升采样分为三次完成(橙色×3)。进一步融合了第3个pooling层的预测结果。第三次反卷积步长为8,记为FCN-8s。

使用上面不同的结构进行分割之后的到的结果是这样的:
《Fully Convolutional Networks for Semantic Segmentation》学习笔记
也就是说较浅层的预测结果包含了更多细节信息,使用它进行分割有更精细的结果。三个不同深度的预测结果进行融合得到的结论是:较浅的结果更为精细,较深的结果更为鲁棒。至于为什么不采用FCN-4s的原因应该是不够鲁棒。

4. 参考

  1. 【图像分割】Fully Convolutional Networks for Semantic Segmentation
  2. 论文阅读笔记:Fully Convolutional Networks for Semantic Segmentation