FCN全卷积神经网络_全卷积神经网络 fcn_iamcfb_的博客
FCN是在CNN基础上的发展和延申。CNN的强大之处在于它的多层神经网络结构能够自动学习影像的深层次特征。同时CNN的局部感知、权值共享、下采样的特点，是学习到的特征具有平移、旋转、缩放不变性，这保证了网络结构能够适应不同形态的二维图像，更重要的是，它能够学习影像中由于拍摄角度不同、尺度不同等原因造成的地物不同形态的特征，有利于提高影像的分类i精度。然而CNN的下采样会降低影像分辨率，丢失细节信息，输出的结果通常是待分类图像属于某一类别的概率向量值，且CNN的全连接层中的向量长度是固定的，限制了输入图像的尺寸也必须是固定值。
针对CNN的缺点，FCN提出，用于解决图像语义分割方面的问题。图像语义分割是计算机视觉领域的重要概念，是指将像素根据图像中表达的语义信息的不同进行分组或分割，从而对图像上的每个像素点实现语义标注。图像语义分割即影像的分类。因此FCN能够确定影像中每一个像素的类别，不仅能够识别像素“是什么”，还能够定位像素“在哪里”，实现了从CNN图像级别的分类进一步延伸到像素级别的分类。
FCN的原理
FCN与CNN在结构上的区别如下图所示。图a表示一个CNN结构，假设针对一个6分类问题，输入层的图像尺寸为128*128，经过2个卷积层和1个池化层，再与2个全连接层相连，全连接层将二维特征图映射成固定长度的特征向量，最后输出一个6维向量，向量中的概率值分别表示输入图片属于每一类的概率，概率最大的值为预测的分类结果。在利用CNN进行影像分类时通常采用的思路是利用滑动窗口遍历整张待分类影像，将得到的小图像块作为输入图像进行训练和预测，每个图像块中心像素的类别即为该图像块的类别，最后整合所有类别结果得到整张影像的分类结果图。这种方法存在缺点：（1）计算效率低，滑动窗口得到的图像块存在大量重复，对每个图像块进行训练得到分类结果，浪费计算资源且计算缓慢；（2）存储量大，针对每一个像素点的分类，均需要存储一个图像块，使得存储空间成倍增长；（3）感知区域有限，图像块的尺寸限制了感知区域的大小，使CNN学习的特征只包含局部特征，影响分类效果。
FCN结构如下图b所示，它用卷积层代替了CNN中的全连接层，使经过第4个卷积层输出的结果是一个140维52*52的特征图，然后，FCN对该特征图进行上采样操作，将其恢复至原图128*128的尺寸，最后在这个特征图上进行逐像素的分类。上采样操作不仅可以对每个像素都产生一个预测，即识别像素“是什么”，也能还原像素在原图中的位置，保留原始输入图像的空间信息，即定位像素“在哪里”，因此FCN可以实现影像的密集逐像素分类。
在FCN中，将特征图恢复至原图尺寸的过程称为上采样，上采样操作常用的是反卷积（Deconvolution）、反池化等方法。
FCN中的反卷积与数学意义的反卷积过程不同，它实际上采用的是转置卷积（Transpose convolution）的过程，目的是还原特征图的尺寸。下图为卷积和反卷积过程示意图。卷积过程中输入图像为4*4，通过步长为1、大小为3*3的卷积核，得到2*2大小的特征图。反卷积过程则是希望通过2*2的输入图像获得4*4大小的输出特征图。
反池化操作是池化操作的逆过程。对于最大池化，需记录下池化过程中最大值的位置，并在反池化过程中将输入图像中的元素值赋予特征图中相应的位置上，其余位置为0，如下图a。对于平均池化，则反池化过程是在特征图中的每个位置均赋予与输入图像中的元素相同的值，如下图b。
FCN的特点
FCN主要有三个特点，分别是全卷积化（Fully Convolutional）、上采样（Upsampling）和跳跃结构（Skip Architecture）。
全卷积化 是将网络结构中的全连接层全部转换成卷积层。一方面，它将输出结果从一维向量转换为二维矩阵，有利于进行后续的上采样操作。另一方面，由于全连接层的神经元节点是固定的，因此它与上一层特征图中所有神经元节点之间的权值个数也是固定的，当神经网络结构确定后，权值个数不能改变，特征图的大小也不能改变，所以层层反推，CNN的输入图像大小必须是固定的，而卷积层中的权值参数个数与特征图的尺寸无关，因此全卷积化的FCN可以接受任意尺寸的输入图像。同时GPU（图形处理器）能够加速卷积操作，进而缩短计算时间，提高计算效率。
上采样 能够保证预测图与输入图像间具有相同的尺寸，实现像素到像素之间的映射。但由于FCN中的池化操作会降低图像分辨率，因此最后一层卷积层输出的特征图会丢失细节信息，且上采样过程只能还原图像尺寸，无法还原图像的本来特征，因此对特征图进行上采样后获得的图像分割精度低，分割边缘粗糙。因此跳跃结构提出。
在神经网络中，浅层网络输出的特征图分辨率高，保留了更多的细节信息，随着层数的加深，深层网络学习的特征更加抽象，保留了更多语义信息，但输出的特征图分辨率低。跳跃结构是指融合不同层次的特征图，将低层网络的细节信息和高层网络的语义信息进行结合，再进行上采样操作，优化输出的结果。如下图所示的FCN结构。 原图经过了5组卷积和池化操作之后，图像尺寸缩小为原图的1/32，再经过两个卷积层后，图像的维度发生变化，但尺寸不变，对conv7得到的特征图进行32倍的上采样得到和原图相同尺寸的预测图FCN-32s，但该结果显然是很粗糙的，它仅仅展示了空间的大致框架，缺少细节信息。对此，采用特征图融合的方法，将conv7的特征图经过2倍的上采样得到原图1/16的尺寸，再与pool4的特征图对应的元素相加，最后再进行16倍的上采样得到预测图FCN-16s。同理，对conv7和pool4的特征图分别进行4倍、2倍的上采样，再与pool3的特征图对应元素相加，最后再进行8倍的上采样得到与原图尺寸一致的预测图FCN-8s。实验结果表明，FCN-8s的预测结果最优，FCN-16s次之，FCN-32s最差。因为FCN-8s充分利用了pool3、pool4和conv7的特征图，结合了三者的细节信息和语义信息，因此结果最好。所以，跳跃结构能够优化输出结果，一定程度上实现识别与定位精度的并存。