Fully Convolutiona Networks for Semantic Segmentation

Posted by Simon Duan on July 27, 2017

原文链接:Fully Convolutional Networks for Semantic Segmentation_2015 CVPR paper


Abstract

论文的Key Point 是建立全卷积网络,输入任意尺寸,经过有效推理和学习,输出相应尺寸的输出结果。

定义了一个跳跃式结构,它结合来自深层的粗糙的语义信息和来自浅层的详细的表征信息,从而产生精确详细的分割信息。

Introduction

早先的方法已经用卷积神经网络解决语义分割问题,其中每个像素都被标记为其封闭对象或区域的类别。

全卷积网络能有效的学习对每个像素做dense predition,如语义分割

通过密集的前馈计算和反向传播,学习和推理能在全图一次性执行。

这种方法非常有效,无论是渐进还是完全的,都能阻止在其他方法中的并发的问题。我们的模型通过将分类网络重释为全卷积络和微调他们的学习表现,将近来在分类上获得的成功移植到密集预测。

语义分割在语义和位置上面临着固有张力问题:全局信息解释是什么、局部信息解释在哪里。深层特征通过一个非线性的局部到全局的金字塔模型编码了位置信息和语义信息。

据我们所知,第一次将卷积网络扩展到任意输入尺寸的时Matan等人,他们将经典的LeNet扩展到识别字符串的位数。Wolf和Platt将输出扩展到二维图。这些工作都是用全卷积的推理和学习来做检测的。Ning等人定义了一种基于全卷积推理的卷积网络用来解决C.elegans的粗糙、多类别的分割。

全卷积计算已经被应用到现有的一些多层次网络中。全卷积训练很少,但是Tompson等人用来学习一种端对端的局部检测和姿势预估的空间模型非常有效。

基于卷积网络的密集预测近期的工作已经将卷积网络应用到密集预测上。这些工作有以下共同点:

  • 限制容量和接受域的小模型
  • Patch-wise Training
  • 超像素投影的后期处理、随机场正则化、滤波或局部分类
  • 移位输入和交错输出
  • 多尺度金字塔处理
  • 饱和双曲线正切非线性
  • 合成

我们的方法并没有这种机制。

我们改编扩展了深层分类结构 、用图像分类作为监督预处理以及全卷积的微调实现了从整个图像输入的高效简单的学习。

我们通过跨层的特征融合定义了一种局部到全局的非线性的端对端的表示方法。

Fully Convolutional Networks

Adapting classifiers for dense prediction

典型的识别网络采用固定尺寸的输入产生非空间的输出。这些网络的全链接层有固定尺寸的输入而且丢弃了空间坐标信息。然而这些全链接层也可以看作卷积核覆盖了全部输入域的卷积。需要把他们加到可以使用任何尺寸输入并输出分类图的全卷积网络中。

将全链接层转化到卷积层可以是分类网络输出热图,添加层和一个空间损失生成一个高效的端对端的密集学习机制

此外 由于输出的图与特殊的输入块在原始网络上的结果相同,计算被高度分摊到这些块的重叠区域。例如AlexNet消耗1.2ms计算一个227 * 227的图像的分类得分,全卷积网络消耗22ms从一个500 * 500的图像中生成一个10 * 10的输出,这比朴素算法快了近5倍。

这些卷积模型的空间输出对于类似于语义分割这样的dense 问题就是一个自然的选择了。

AlexNet示例中相应的逆推过程消耗的时间为单张图像时间2.4ms,全卷积的10 * 10输出图为37ms,结果是相对于正推过程速度加快了。

当我们将分类网络重新解释为任意输入尺寸的全卷积域输出图,输出维数也通过二次采样明显减少。在分类网络下,通过下采样保证filter保持小规模,计算要求合理,这使得全卷积网络的输出变得粗糙,这是通过一个输出单元的接受域的像素步长等同的因素来减小的。

Shift-and-stitch is filter rarefaction

Decreasing subsampling within a net is a tradeoff: the filters see finer information, but have smaller receptive fields and take longer to compute. The shift-and-stitch trick is another kind of tradeoff: the output is denser without decreasing the receptive field sizes of the filters, but the filters are prohibited from accessing information at a finer scale than their original design.

在网内减少二次采样是一种折中的做法:filter能看到更详细的信息,但是它的接受域偏小而且需要花费很长时间计算。Shift-and -stitch技巧是另外一种折中做法:它的输出更加密集而且没有减小filter的接受域范围,但是相对于原始的设计filter不能获取精细的信息。

Upsampling is backwards strided convolution

Another way to connect coarse outputs to dense pixels is interpolation.
另一种将粗糙的输出和密集的像素相结合的方法是插值法。

In our experiments, we find that in-network upsampling is fast and effective for learning dense prediction.
在实验中,我们发现网内上采样对于学习dense prediction是快速且有效的。

Patchwise training is loss sampling

Sampling in patchwise training can correct class imbalance and mitigate the spatial correlation of dense patches. In fully convolutional training, class balance can also be achieved by weighting the loss, and loss sampling can be used to address spatial correlation
Patchwise训练中的采样能纠正分类失不平衡,并减轻密集空间相关性。在全卷积训练中,分类平衡也能通过给损失赋权重实现,对损失的采样能被用来标识空间的相关。


Segmentation Architecture

From classifier to dense FCN

We pick the VGG 16-layer net5, which we found to be equivalent to the 19-layer net on this task. For GoogLeNet, we use only the final loss layer, and improve performance by discarding the final average pooling layer. We decapitate each net by discarding the final classifier layer, and convert all fully connected layers to convolutions. We append a 1 * 1 convolution with channel dimension 21 to predict scores for each of the PASCAL classes (including background) at each of the coarse output locations, followed by a deconvolution layer to bilinearly upsample the coarse outputs to pixel-dense outputs as described in Section 3.3. Table 1 compares the preliminary validation results along with the basic characteristics of each net. We report the best results achieved after convergence at a fixed learning rate (at least 175 epochs)
我们选择16层的VGG网络。对于GoogLeNet,我们仅仅使用最后的loss层,通过丢弃最终的平均池化层提高了表现能力。

通过丢弃最后的分类器我们切去每层的网络头,从而把全链接层转化为卷积层。我们附加了一个1 * 1的通道维数为21的卷积层来预测每一个PASCAL分类在各自粗糙输出位置的得分,后面紧跟一个去卷积层对密集像素的粗糙输出进行双线性上采样。

我们发现可以在一个固定的Learning Rate获得最好的结果。

Combining what and where

We define a new fully convolutional net (FCN) for segmentation that combines layers of the feature hierarchy and refines the spatial precision of the output.
我们定义了用于分割的全卷积网络,这个网络结合了特征层信息并提高了输出的空间预测精度。

对原图像进行卷积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之后的图像进行再次反卷积补充细节,最后就完成了整个图像的还原。

具体来说,就是将不同池化层的结果进行上采样,然后结合这些结果来优化输出。(节参考自FCN简单梳理

Refining fully convolutional nets by fusing information from layers with different strides improves segmentation detail. The first three images show the output from our 32, 16, and 8 pixel stride nets


Comparison of skip FCNs on a subset7 of PASCAL VOC 2011 segval. Learning is end-to-end, except for FCN-32s-fixed, where only the last layer is fine-tuned.
Note that FCN-32s is FCNVGG16, renamed to highlight stride


Conclusion