FCN论文笔记

一.Introduction

       全卷积网络(FCN)是用于图片语义分割的一种卷积神经网络(CNN),由Jonathan Long,Evan Shelhamer 和Trevor Darrell提出,由此开启了深度学习在语义分割中的应用。语义分割是计算机视觉领域很重要的一个分支,在自动驾驶、地面检测等方面都起到很重要作用。与简单区分前景后景的图像分割技术不同,语义分割则不仅是区分每个像素的前后景,更需要将其所属类别预测出来,属于像素层面的分类,是密集的目标识别。传统用于语义分割的CNN网络每个像素点用包围其的对象或区域类别进行标注,无论是在分割速度还是分割精度层面都很不理想。FCN参考了CNN在图像分类领域成功的经验,是一种端到端、像素到像素的模型,在多个语义分割的指标中均达到了state-of-the-art。

       FCN的主要贡献在一下3个方面:

1. FCN是一个端到端,像素到像素的模型,与传统得CNN最后将特征图拉伸成一维向量丢失空域信息不同,FCN能尽可能得保存图片得空域信息,显著提高分割效果。

2. FCN的输入图片尺寸是任意的,无需对图片进行预处理。传统的CNN网络结构如AlexNet、VGG、ResNet等都要求输入特定大小的图片,如AlexNet要求输入图片尺寸为3*224*224。要求输入图片为特定尺寸的原因是这些模型中最后的全连接层中神经元个数是固定的,而FCN用反卷积代替了全连接层,所以不存在输入图片尺寸的限制。

3. 跳跃结构。CNN的一个特点是浅层网络提取简单的局部特征,深层网络提取高层次的语义特征,FCN通过跳跃结构将局部特征和语义特征结合,显著提高分割效果。

 

二 . Fully convolutional networks

       FCN的网络结构如图2.1所示,图2.1中,采用的是VGG16作为卷积层,包括图中的conv1到conv7和poop1到pool5。由于在卷积中使用下采样使图像不断变小,为使得图像恢复到原来的大小,FCN采取了反卷积。为平衡全局信息和局部信息,FCN引入了跳跃结构,包括从pool3层跳跃的FCN-8s,从pool4层跳跃的FCN-16s和没有跳跃的FCN-32s。下文为FCN结构的详细介绍。

 

图2.1:FCN-VGG16结构图

 

1. 基本CNN结构

       由图2.1可以看出,FCN模型的前端为传统的CNN模型,基本的CNN操作如卷积、池化等操作无需介绍。图2.1的FCN模型中conv1到conv7和poop1到pool5为基本VGG网络,其中conv6与conv7相当于VGG中的两层全连接网络。VGG网络结构如图2.2所示,FCN选择使用VGG16网络,其中,卷积核参数为:pad=0,k=3,stride=1;池化为最大池化方法,参数为pad=0,k=2,stride=2。VGG的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2),采用连续的几个3x3的卷积核代替较大卷积核(11x11,7x7,5x5),这是因为对于给定的感受野,采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且参数更少。VGG16的网络特性决定了卷积层不改变特征图的长和宽,经过一次池化层,特征图长宽因为下采样而缩小一半,这点很好理解:为方便起见,在下文中,假设输入图片的长宽相等,即尺寸为  ,则卷积层输出的图片长宽为:

⋯⋯

可以看出,卷积层对图片的长宽没有影响,池化层的输出长宽为:

  

然后再经过conv6和conv7,最终得到的输出长宽为:

       由公式(3)可得,当输入图像长度或宽度小于192时,conv7层输出的特征图长或宽为负值,这显然是错误的,所以,为了避免这个错误产生,FCN中的VGG16网络与原VGG16的一点不同是,FCN在conv1_1层中设置了pad=100来扩充图像,之所以选择pad=100,除了满足conv7输出的特征图长宽不会为负数之外,还考虑了crop裁剪层的要求,在下文中会说明。这样,最后conv7层输出的特征图长宽就变为了:

       但是pad=100会向原始图片中引入噪音,这也是FCN网络的一个缺点所在。在FCN-32s中,conv7层之后并没有直接上采样恢复原始图片大小,而是先通过一个名为score_fr的卷积层,score卷积层在FCN-16s和FCN-8s中也有应用,卷积核的参数均为pad=0,k=1,stride=1,因为在论文中使用的PASCAL VOC语义分割数据集中有21类,且使用softmax分类,所以score层有21个卷积核,

 

2. 上采样

       经score_fr层后,特征图大小变为 ,需要将特征图的长宽恢复至原图像 ,即需要上采样。常见的上采样方法有很多,FCN主要用到的是反卷积(deconvolution)表示的双线性插值(Bilinear Interpolation)法。

图2.2: VGG网络结构图

2.1 双线性插值

         双线性插值是函数拟合问题,是两个方向上的线性插值,具体实现比较简单,原理不再过多解释。双线性用于上采样如图2.3所示,数学形式如公式(5)所示。

 

图2.3 双线性插值用于上采样

2.2 反卷积

       双线性插值实现简单,但是上采样效果并不理想,为了克服这一弊端,FCN采用了反卷积实现双线性插值,将双线性插值表示为一个卷积层,这样就可以通过反向传播算法微调参数,使线性的双线性插值增加非线性,得到更好的上采样结果。

       FCN中采用的反卷积又称转置卷积,一般的卷积过程可以表示为矩阵相乘,设输入特征图大小为 ,卷积层参数为pad 、 、stride、 ,则卷积结果可用公式表示:

其中, , 

矩阵代表卷积核, 矩阵代表输入的特征图, 矩阵代表卷积层的输出。反卷积即为对这个矩阵运算过程进行逆运算:

 

       反卷积一个更直观的解释如图2.4所示,以单通道图片为例,先对大小为 的输入图像内部进行填充,图示为在输入图片的每个像素点之间填充0,然后做普通的卷积操作。设 为反卷积输出的图片,若 ,则反卷积的输入输出满足如下关系:

 

图2.4 单通道反卷积示意图

 

 

       因为输入特征图大小为 ,即特征图相对于输出图片的长宽缩小了约32倍,所以在无跳跃结构的FCN中,设置 (FCN-32s,即通过反卷积层将特征图上采样至32倍)、k=64 、 。所以可计算出输出的特征图大小为 ,再通过Crop层裁剪后即可得到大小为 的最后输出的特征图。虽然作者一开始的设想在于训练反卷积层获得非线性的上采样性能,但是在实际实验中,作者发现训练得到的结果与固定双线性插值得到的效果并没有明显异同,故在FCN中并没有训练反卷积层,只是相当于用反卷积层实现了双线性插值而已,这也导致了FCN在上采样中会降低了精确性,是FCN的缺点之一。

 

3. 跳跃结构

       CNN的一大特点在于越深的网络感受野越大,其关于输入图片的全局信息也越多。图像语义分割要解决的两大问题是“what”和”where”,即在判断出图像中出现的物体类别的前提下还要定位物体的位置,深层次的CNN能很好解决“what”这个问题,但是由于网络层次的加深,也破坏了输入图片原始的空域信息而浅层次的CNN网络会更好的保持原始图片的空域信息,所以FCN的跳跃结构就是将CNN的浅层次网络和深层次网络结合。

       由图2.1可知,除了FCN-32s之外,FCN还有两种跳跃网络结构:FCN-16s和FCN-8s。

FCN-16s即是将浅层的pool4层的输出通过score_pool4层,输出浅层特征图大小为 ,将深层的conv7层的输出通过score_fr,输出深层特征图大小为 。为使得浅层特征图与深层特征图融合,需要将浅层特征图和深层特征图大小一致,具体做法为:将浅层特征图通过crop层裁剪至 ,将深层特征图经过反卷积层上采样2倍,然后大小一致的两个特征图对应位置相加即可完成融合。融合后的特征图再通过stride=16(FCN-16s,即通过反卷积层将特征图上采样至原图的16倍)、k=32、 =21的反卷积层得到 的特征图,再通过Crop层裁剪后即可得到大小为21×h×h的最后的特征图。FCN-8s融合了pool3层、 层和 层,具体的网络细节与FCN-16s相似,不再赘述。

 

4.训练

       论文中使用21类的PASCAL VOC数据集,训练集提供原始图片和对应的groud trues,groud trues上每个像素点均有用颜色表示的标签 ,其中 。已经得到了FCN最后输出的特征图,接下来用 分类器对每一个像素点做分类,得到分类结果 , groud trues中对应像素点的标签为 ,则单个像素点的损失函数为:

       FCN中并不是简单的将一副图片上所有像素点的 累加作为最终的 ,因为这样存在以下缺点:逐像素点求 ,运算量大;FCN的输出可以恢复完整的图片之间很强的空间相关性,逐像素点求loss 会产生冗余。避免因空间相关性产生的冗余,一个常用的方法是patchwise training,patchwise training的思路是在感兴趣像素点周围取一个patch,然后将这些patch输入神经网络。作者在实验中发现,patchwise training方法会导致网络收敛慢,于是提出了loss sampling方法,loss sampling对网络输出的特征图上的像素点进行随机采样后再计算 ,降低图像中的空间相关性,同时加快网络收敛速度。

       FCN设置的batchsize=20,设在batchsize张输入图片中通过loss sampling方法最终计算像素点 的像素点个数为 ,则用于反向传播的最终 为:

       以FCN-VGG16为例介绍FCN的训练过程。VGG网络初始化已经训练好的VGG权重,score层初始化为0,反卷积层初始化为双线性插值,最后一层反卷积固定为插值不做学习。首先训练FCN-32s,固定参数值后再训练FCN-16s,最后训练FCN-8s。

 

三.总结

       FCN仍存在一些比较明显的缺点,比如conv1的pad过大增大了噪声;使用双线性插值来上采样使得恢复的图像质量并不高;没有使用CRF考虑像素点之间的关系等,但FCN开启了使用CNN端到端的语义分割的先河,影响了后来的SegNet、U-net和Deeplab,在图像语义分割领域中意义重大。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值