语义分割之FCN

**  论文:Fully Convolutional Networks for Semantic Segmentation**

一. 内容简介

本文提出了一种全卷积神经网络(FCN),选择一些经典的CNN结构将它们的全连接层用卷积层替换,再使用反卷积操作进行上采样使这些CNN得到的feature map恢复到输入图片的尺寸。FCN实现了逐像素的预测,最终得到的结果是一个与输入图片尺寸相同的热图,对每个像素点进行预测都得到一个标签,预测结果相同的像素点构成一类物体,这样就可以实现语义分割的任务。

二. Motivation

语义分割是一个逐像素分类的任务,是一种稠密预测任务。传统方法在预测每个像素的label时需要将每个像素点周围的一个patch分别输入到CNN模型中进行预测,这样就会导致各个patch之间有很多重叠,增加了大量无用的计算量;同时由于patch的大小较小,导致感受野较小,在预测一个像素点时只考虑到它周围的部分,得到的都是局部的特征,缺少全局的特征使得对其分类的预测性能较差。为了解决这些问题,提出了FCN模型实现语义分割。

三. 贡献点

  1. 是第一个对FCN逐像素预测进行端对端的训练的工作。
  2. 不需要进行预处理操作以及后处理操作,只需对基本的CNN基本模型进行监督预训练。不像其他CNN网络需要固定输入图片的尺寸,FCN的输入图片尺寸可以任意。
  3. 给出了基于AlexNet、VGG16和 GoogLeNet的具体的FCN模型。
  4. 在多个数据集中都得到了当时最优秀的结果。

四. 模型结构

FCN与普通CNN不同的是,CNN输出的结果是图片属于每类的概率,而FCN输出的结果是对每个像素点label预测结果的热图。
     语义分割之FCN
本文主要的模型结构给的是基于VGG16所构成的FCN模型,同时还加入了跳连接,将浅层的信息与深层的信息相融合,模型结构如下:        语义分割之FCN
首先,图中第一行是没有加跳连接的VGG16 based FCN,基本的卷积和池化结构与VGG16完全相同,pool5后的全连接层全部替换成了卷积层。VGG*有5次22的最大池化,因此第一行中输出的feature map尺寸为输入图像尺寸的1/32,为了恢复原图尺寸得到相应的热图,将结果进行上采样(用反卷积)恢复,这种结构的网络叫做FCN-32s,因为原图尺寸是conv7输出尺寸的32倍。
其次第二行在pool4后加入了一个跳连接,获取了部分浅层信息。由于经过pool4得到的feature map尺寸是原图的1/16,而conv7得到的feature map尺寸是原图的1/32,因此需要将conv7的输出结果进行上采样操作(本文用的是反卷积实现上采样)使得与pool4的输出尺寸相同,最后两者相加。由于融合的结果尺寸是原图尺寸的1/16,同样上采样恢复到与输入图像相同的尺寸,所以这种结构的网络叫做FCN-16s。这里的上采样操作使用的是反卷积,计算公式为:
          语义分割之FCN
语义分割之FCN
其中o’为反卷积输出尺寸,i为输入尺寸,s为步长,k为卷积核大小,p为padding。
最后一行的是FCN-8s模型,其思路与FCN-16s相同,它使用的是更浅一层pool3得到的特征与pool4的输出以及conv7的输出得到的结果进行融合。
需要注意的是,由于后面对比实验多使用PASCAL VOC数据集,该数据集由20类物体及1类背景构成,因此总共是21类。因此输入图片尺寸如果为H
WD,则三种模型上采样后得到的尺寸都是HW21,文中使用11的卷积层将channel调整为21。最后将得到的HW21中每个像素点的21个通道进行预测(通过上采样操作恢复分辨率之后对每个像素点进行softmax,对每个像素点进行分类),最终得到尺寸为H*W的分割结果。

五. 实验

(1)FCN based 各种CNN性能对比
       语义分割之FCN
文中主要介绍的模型以及后续实验对比使用的都是VGG16 based FCN,因为从实验结果来说他比FCN-AlexNet/GoogLeNet精度都要高得多。
(2)FCN-32s/16s/8s性能对比                语义分割之FCN
            语义分割之FCN
从图和实验结果可以看出,使用了跳连接结构的FCN分割结果更加精细,其中FCN-8s效果最优。
(3)传统方法(利用一个个patch分块预测)与本文方法(利用整个图像而不是分块)对比
             语义分割之FCN
实验结果表明,两种方法可以达到相近的效果,但是不使用patch而使用本文这种整个图像卷积的方法更快速。
(4)在各种数据集上与已有的方法对比
在PASCALVOC 2011 and 2012测试集中:
      语义分割之FCN
在NYUDv2中:  语义分割之FCN
NYUDv2是一个RGB-D图片组成的数据集,实验结果中的FCN-32s RGB即为上文提到的模型;FCN-32s RGBD则是把深度图线性重定标到0-255,在上文提到的模型输入层中增加一个通道;FCN-32s HHA则是使用三个通道对深度图重新编码,这三个通道分别是水平视差、高于地面的高度和像素的局部表面与推断重力方向的倾角,然后把HHA编码得到的三个通道数据线性重定标到0-255,转化为RGB图像。FCN-32s RGB-HHA则是FCN-32s对RGB预测结果与HHA预测结果在最后一层融合。

在SIFT Flow中:   语义分割之FCN
在三个数据集中都达到了当时最高的精度。

注:FCN是一种编码器-解码器(encoder-decoder)结构。其中,编码器使用池化层逐渐缩减输入数据的空间维度,而解码器通过反卷积层等网络层逐步恢复目标的细节和相应的空间维度。从编码器到解码器之间,通常存在直接的信息连接,来帮助解码器更好地恢复目标细节。
FCN利用了中间层的特征,这些特征既与低层的可视化空间信息(边缘、角等)相关,也与高层的语义信息(对象或分类级别的预测)相关。