FCN论文学习与理解

简介

FCN的全称是Fully Convolutional Network,出自2015年Jonathan Long等人的《Fully Convolutional Networks for Semantic Segmentation》,FCN的提出可以说是图像分割领域的一个里程碑,下面从该论文的内容架构记录个人理解。

FCN的提出背景

FCN出现之前,已有许多CNN 网络模型出现,比如AlexNet,VGG net和GoogLeNet等。本文的FCN也是基于CNN网络架构提出的。我们首先对CNN和FCN做一下简单对比。

  • 一般的CNN网络通常会在网络最后一个卷积层后面添加若干个全连接层(fully connected layer),这些全连接层可以将卷积层产生的特征图(feature map)映射为一个特征向量,该向量的长度一般取决于分类的类别数量。因此CNN结构适用于图像级别的分类和回归任务,因为它们最后都期望得到输入图像的分类的概率。比如1998年提出的LeNet-5,该网络的最后三层即全连接层。
    图1

  • 而本文中提出的FCN是对输入图像进行像素级(pixelwise)的分类,从而解决了语义级别的图像分割问题(Semantic Segmentation)。与CNN不同之处在于,FCN将全连接层全部转换为卷积层,因此FCN可以接受任意尺寸的输入图像,同时利用反卷积层(deconvolution layer)对最后一个卷积层的特征图进行上采样,从抽象的特征中恢复出每个像素所属的类别,且得到与输入图像相同尺寸的输出,从而实现逐像素级的预测。

图2

  • 从上图中可以看到,在经典CNN中,1-5层为卷积层,6-8三层为全连接层,它们分别对应了大小为4096/4096/1000的一维向量,最终对应着1000个类别的分类概率。而FCN将这3层表示为卷积层,卷积核的大小分别为 1 × 1 × 4096 1\times1\times4096 1×1×4096 7 × 7 × 4096 7\times7\times4096 7×7×4096 1 × 1 × 1000 1\times1\times1000 1×1×1000,因此该网络被称为全卷积网络。

核心思想

FCN在CNN的基础上做了以下三方面的改进:

  • 将全连接层转换为卷积层,从而可适应任意尺寸的输入;
  • 在最后添加反卷积层进行上采样以增大数据尺寸,从而获得更为精细的输出;
    关于反卷积,反卷积是上采样的一种方式,上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution)以及反池化(Unpooling)。反卷积也叫转置卷积,它并不是正向卷积的完全逆过程,可以认为它是一种特殊的正向卷积,先按照一定的比例通过补0来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。
    详解可以参考:
    https://www.zhihu.com/question/48279880
    https://www.jianshu.com/p/ff99a7e6c39d
  • 在不同深度的layer之间添加skip结构,从而增强输出的准确性并确保网络的鲁棒性。原文中给出了添加skip结构的原因,“Semantic segmentation faces an inherent tension between semantics and location: global information resolves what while local information resolves where.”,由于浅层的感受野小,可以看到更为精细的pixels,从而可预测更多的位置信息,通过skip将深层的coarse信息与浅层的finer信息融合在一起,可以兼顾local和global的信息,从而提高输出的准确性。

FCN网络

原文的网络结构

图3
从上图中可以看出:
图4

直观的网络结构

图5该网络可以适应任意尺寸的彩色图像输入,同时输出与输入的尺寸相同,深度为:20类目标+1背景=21

卷积部分

虚线上部分为全卷积网络,其中

  • 蓝色代表卷积操作
  • 绿色代表最大池化操作
  • 灰色为裁剪操作,该操作的目的是在融合之前,使用裁剪层统一被融合的两者大小,即裁剪成和输入相同尺寸作为输出
  • 黄色为融合操作,这里采用的是逐数据相加(element wise +)
  • 橙色为上采样操作,即反卷积层
  • 对于不同尺寸的输入图像,各层数据的尺寸相应变化,但其深度(即通道数)保持不变。
skip部分

虚线的下部分为skip连接下的三个预测模板,以第一个预测为例,输入为 16 ∗ 16 ∗ 4096 16*16*4096 16164096,下一卷积层的卷积核大小为 1 ∗ 1 ∗ 21 1*1*21 1121,获得输出为 16 ∗ 16 ∗ 16*16* 1616,相当于对每个像素施加一个全连接层,从4096维特征,预测21类结果。
三个预测模块分别给出了三种预测结果:

  • FCN-32s
    该结果是通过对conv7所得特征图进行卷积核大小为 1 ∗ 1 ∗ 21 1*1*21 1121的卷积后,进行上采样以获得精确输出。
  • FCN-16s
    获取该结果的过程中使用了skip结构,首先对pool4所得特征图进行卷积核大小为 1 ∗ 1 1*1 11的卷积,然后对其进行裁剪得到与conv7预测结果相同尺寸的输出,将该输出与conv7预测结果融合(这里使用的是elementwise +),对该融合结果进行上采样便可得到FCN-16s的预测结果
  • FCN-8s
    原理同上。

原文给出了这三种预测结果的对比图:
图6
容易看出,随着高层信息逐渐与浅层信息的融合,网络所达到的分割效果是越来越好的。至于为什么不再继续融合更浅层的信息,作者在文中给出解释,“ At this point our fusion improvements have met diminishing returns, both with respect to the IU metric which emphasizes large-scale correctness, and also in terms of the improvement visible e.g. inFigure4,so we do not continue fusing even lower layers. ”,继续融合更浅层信息并不会带来更好的分割效果。同时文中也给出了着三种预测再不同度量标准下的一个对比,从中可以发现,分割效果最好的为FCN-8s

图7

网络训练

根据作者的设计思路,FCN网络的训练可以分为四个阶段。

第一阶段

以经典的分类网络进行初始化,其中最后两个红色层为全连接层,在训练中将参数弃去不用。
图8

第二阶段

从特征小图 16 ∗ 16 ∗ 4096 16*16*4096 16164096预测分割小图 16 ∗ 16 ∗ 21 16*16*21 161621,之后直接上采样为大图。 反卷积的步长为32,这个网络称为FCN-32s。
这一阶段使用单GPU训练约需3天。
图9

第三阶段

升采样分为两次完成。
(1)第一次上采样即FCN-32s中的上采样;
(2)第二次上采样前,把pool4的预测结果与conv7的预测结果融合到一起,之后通过上采样得到大图。这里采用了跳级结构提升输出精确性。
第二次反卷积步长为16,这个网络称为FCN-16s。
这一阶段使用单GPU训练约需1天。
图10

第四阶段

升采样分为三次完成。前两次即上述两次上采样,进一步融合了pool3层的预测结果。 第三次反卷积步长为8,记为FCN-8s。
这一阶段使用单GPU训练约需1天。
11
较浅层的预测结果包含了更多细节信息,比较2,3,4阶段可以看出,skip结构利用浅层信息辅助逐步上采样,可以获得更精细的结果。
12

小结

  1. 关于如何逐像素预测分类可参考:
    https://www.cnblogs.com/gujianhan/p/6030639.html
  2. FCN网络的开源代码:
    https://github.com/shelhamer/fcn.berkeleyvision.org
  3. 本文参考:
    https://blog.csdn.net/qq_36269513/article/details/80420363?
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值