【论文笔记】Fully Convolutional Networks for Semantic Segmentation





Author:Jonathan Long  Evan Shelhamer Publish:CVPR】
卷积网络的贡献
  • 改进了全图像分类[19,31,32]
  • 在结构化输出的局部任务上取得了进展:目标检测边界框、部位和关键点预测、局部匹配(通信)
从粗略到精细推理的下一步是像素预测
Semantic segmentation 的固有矛盾:
  • 全局信息解决目标是什么
  • 局部信息解决目标在哪里  
以前的FCN:
  • 从任意大小输入预测密集输出。
  • 通过密集的前馈计算和反向传播,一次性地进行学习和推理。
  • 网络的上采样层进行像素预测并且可以使用子采样池进行网络学习。这种方法既渐进又是绝对有效,并且排除了对其他工作的需要。但是patchwise缺乏全卷积训练的效率。
  • 在没有监督的预训练的情况下应用了小规模卷积网络。
本文提出的FCN:
  • does not make use of pre- and post-processing complications.
  • 利用现有的Classification model进行finetuning.
  • 定义一种新颖的“skip”体系结构,将深,粗,语义信息与浅,细,外观信息相结合
本文FCN方法简介:
将已有的CNN模型的全连接层看成是卷积层,卷积模板大小就是输入的特征map的大小。就是说把全连接网络看成是对整张输入map做卷积,全连接层分别有4096个6*6的卷积核,4096个1*1的卷积核,1000个1*1的卷积核,如下图:
【论文笔记】Fully Convolutional Networks for Semantic Segmentation
【论文笔记】Fully Convolutional Networks for Semantic Segmentation
接下来就要对这1000个1*1卷积核的输出,做upsampling,得到1000个原图大小(如32*32)的输出,这些输出合并后,得到上图所示的heatmap。

Fully convolutional networks
本文的contribution
  • 提出了一种end-to-end的做semantic segmentation的方法,简称FCN
  • 直接拿segmentation 的 ground truth作为监督信息,训练一个端到端的网络,让网络做pixelwise的prediction,直接预测label map
【论文笔记】Fully Convolutional Networks for Semantic Segmentation

method
主要思路是把CNN改为FCN,输入一幅图像后直接在输出端得到dense prediction,也就是每个像素所属的class,从而得到一个end-to-end的方法来实现image  semantic segmentation。
  • 将分类网络转换成全卷积神经网络来得到粗略的输出。
  • 通过OverFeat将粗略的输出连接回像素来进行像素预测。

dense prediction:
1.shift-and-stitch:
设原图与FCN所得输出图之间的降采样因子是f,那么对于原图的每个f×f的区域(不重叠),对输入每一个像素(x,y)向右移动x像素,向下移动y像素(x,y∈{0,...,f-1}),把这个f×f区域对应的output作为此区域中心点像素对应的output,这样就对每个f×f的区域得到了f×f个output,也就是每个像素都能对应一个output,所以是dense prediction。
2.Changing only the filters and layer strides of a convnet:
将下层的输入步幅设置为1,将其输出以s的倍数取样,就像shift-and-stitch一样。然而,对上采样输出的原始滤波器进行卷积不会产生与shift-and-stitch技巧相同的结果,因为原始滤波器仅看到上采样输入减少的部分。为了重现上面的方法,放大CNN网络中的subsampling层的filter的尺寸,得到新的filter:
【论文笔记】Fully Convolutional Networks for Semantic Segmentation【论文笔记】Fully Convolutional Networks for Semantic Segmentation
其中s是subsampling的滑动步长,这个新filter的滑动步长要设为1,这样的话,subsampling就没有缩小图像尺寸,最后可以得到dense prediction。
3.Upsampling上采样:
upsampling的操作可以看成是反卷积(deconvolutional)->叫做转置卷积(Transposed Convolution)更为合适,卷积运算的参数和CNN的参数一样,在训练FCN模型的过程中通过bp算法学习得到。
以往的CNN结构,如AlexNet,VGGNet,池化层缩小了特征图的尺寸。
在语义分割中,我们需要输出和输入图像尺寸相同的分割图片,因此需要对特征图进行上采样。
-------------------------------------------------------------------------------
方法1和方法2都没有采用,这两种方法比较折衷tradeoff:
第一种方法,虽然receptive fileds没有变小,但是由于原图被划分成f*f的区域输入网络,使得filters无法感受更精细的信息
第二种方法, 下采样的功能被减弱,使得更细节的信息能被filter看到,但是receptive fileds会相对变小,可能会损失全局信息,且会对卷积层引入更多运算。     

fusion prediction

 we build a novel skip architecture that combines coarse, semantic and local, appearance information to refine prediction.
结合粗略的语义和局部外观信息来精简预测。
原因:
在实验中发现,得到的分割结果比较粗糙。最终预测层的32像素步长限制了上采样输出中的细节尺度。
解决方案:
将最终预测层与具有更好的步幅的较低层相结合。
采用skip layer的方法,在浅层处减小upsampling的步长,得到的fine layer 和 高层得到的coarse layer做融合,然后再upsampling得到输出。
这种做法兼顾local和global信息,即文中说的combining what and where,取得了不错的效果提升。FCN-32s为59.4,FCN-16s提升到了62.4,FCN-8s提升到62.7。可以看出效果还是很明显的。
具体步骤:
【论文笔记】Fully Convolutional Networks for Semantic Segmentation
如上图所示,对原图像进行卷积conv1、pool1后原图像缩小为1/2;之后对图像进行第二次conv2、pool2后图像缩小为1/4;接着继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;接着继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32,然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时图像不再叫featureMap而是叫heatMap。
现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap,1/32尺寸的heatMap进行upsampling操作之后,因为这个操作还原的图片仅仅是conv5中的卷积核中的特征,限于精度问题不能够很好地还原图像当中的特征,因此在这里向前迭代。把conv4中的卷积核对上一次upsampling之后的图进行反卷积补充细节(相当于一个插值过程),最后把conv3中的卷积核对刚才upsampling之后的图像进行再次反卷积补充细节,最后就完成了整个图像的还原。
【论文笔记】Fully Convolutional Networks for Semantic Segmentation
FCN-32s:只从VGGNet的第五层提取出信息。在最后一层加上一个反卷积层(本质上是做插值法)生成一张和原来图片差不多大小的图,然后再对图片进行crop输出。
FCN-8s:借助VGG的第三层和第四层的信息,来帮助确定更精确的“位置信息”。FCN-8s从pool3,pool4和pool5中提取出信息,然后通过插值法调整大小把算出来的密度图简单相加。
【论文笔记】Fully Convolutional Networks for Semantic Segmentation【论文笔记】Fully Convolutional Networks for Semantic Segmentation
图片在浅层的convnet里头的位置信息是很好的,然而语义不清晰;而在深层里头的位置信息不好(像素太低),语义很清晰。图片的语义是由于一块“邻域”所决定的,不能只看单像素。所以语义分割图必然非常“粗糙”。所以需要借助前面几层的信息。
实验表明,这样的分割结果更细致更准确。在逐层fusion的过程中,pool3再往上,结果又会变差,所以作者做到这里就停了。可以看到对应的结果:
【论文笔记】Fully Convolutional Networks for Semantic Segmentation【论文笔记】Fully Convolutional Networks for Semantic Segmentation

Experimental

1、对比3种性能较好的几种CNN:AlexNet, VGG16, GoogLeNet进行实验,选择VGG16

2、对比FCN-32s-fixed, FCN-32s, FCN-16s, FCN-8s,证明最好的dense prediction组合是8s

3、FCN-8s和state-of-the-art对比是最优的,R-CNN, SDS.   FCN-16s

4、FCN-16s和现有的一些工作对比,是最优的

5、FCN-32s和FCN-16s在RGB-D和HHA的图像数据集上,优于state-of-the-art


 Conclusion


优点

1、训练一个end-to-end的FCN模型,利用卷积神经网络的很强的学习能力,得到较准确的结果,以前的基于CNN的方法都是要对输入或者输出做一些处理,才能得到最终结果。

2、直接使用现有的CNN网络,如AlexNet, VGG16, GoogLeNet,只需在末尾加上upsampling,参数的学习还是利用CNN本身的反向传播原理,"whole image training is effective and efficient."

3、不限制输入图片的尺寸,不要求图片集中所有图片都是同样尺寸,只需在最后upsampling时按原图被subsampling的比例缩放回来,最后都会输出一张与原图大小一致的dense prediction map。Jonathan Long∗  Evan Shelhamer∗

缺点
根据论文的conclusion部分所示的实验输出sample如下图:
【论文笔记】Fully Convolutional Networks for Semantic Segmentation【论文笔记】Fully Convolutional Networks for Semantic Segmentation
可以直观地看出,本文方法和Groud truth相比,容易丢失较小的目标,比如第一幅图片中的汽车,和第二幅图片中的观众人群,如果要改进的话,这一点上应该是有一些提升空间的。