论文阅读笔记:《Fully Convolutional Networks for Semantic Segmentation》

本文详细介绍了FCN(全卷积网络)的核心概念和技术细节,包括如何将传统CNN中的全连接层替换为卷积层,实现图像的像素级分类,解决语义分割问题。此外,还探讨了上采样技术、跳跃结构以及训练过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文阅读笔记:《Fully Convolutional Networks for Semantic Segmentation》

论文下载地址:https://arxiv.org/abs/1411.4038

转载请注明:https://blog.csdn.net/weixin_42143615/article/details/108851024

一、论文简介

FCN将传统卷积网络后面的全连接层换成了卷积层,这样网络的输出不再是类别而是heatmap。同时为了解决因为卷积和池化对图像尺寸的影响,提出使用上采样的方式恢复。具体包括以下核心思想:

1)不含全连接层的全卷积网络,可输入任意尺寸,经过有效的推理和学习产生相应的输出;

2)增大数据尺寸的反卷积层,能够输出精细的结果;

3)定义了一个跳跃式的架构,结合来自深、粗层的语义信息和来自浅、细层的表征信息来产生准确和精细的分割,同时确保鲁棒性和精确性。

二、全卷积网络

2.1 CNN与FCN

通常CNN网络在卷积层之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都期望得到整个输入图像的一个数值描述(概率),比如AlexNet的ImageNet模型输出一个1000维的向量表示输入图像属于每一类的概率(softmax归一化)。图1中的猫,输入AlexNet,得到一个长为1000的输出向量,表示输入图像属于每一类的概率,其中在“tabby cat”这一类统计概率最高。

 

                                                                 

                                                                                        图1 CNN网络结构

 

                                                                                             图2 AlexNet网络结构

FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(Semantic Segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样,使它恢复到与输入图像相同的尺寸,从而可以对每个像素都产生了一个预测,同时保留了原始输入图像中的空间信息,最后在上采样的特征图上进行逐像素分类。

最后逐个像素计算softmax分类的损失,相当于每一个像素对应一个训练样本。图3是全卷积网络(FCN)的结构示意图:

 

                                                                                           图3 FCN网络结构

输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21。简单的来说,FCN与CNN的区别在于把CNN最后的全连接层换成卷积层,输出的是一张已经Label好的图片。如图4所示:

 

                                                                                           图4 CNN到FCN的转化

2.2 全连接层与卷积层的相互转化原理

全连接层和卷积层之间唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。然而在两类层中,神经元都是计算点积,所以它们的函数形式是一样的。因此,将此两者相互转化是可能的。假设第一个连接区域是[7x7x512]的全连接层,令其滤波器尺寸为F=7,这样输出数据体就为[1x1x4096]了。

那么这样的转化有什么作用呢?它可以让卷积网络在一张更大的输入图片上滑动,得到多个输出,这样的转化可以让我们在单个向前传播的过程中完成上述的操作。

2.3 将全连接层转化为卷积层à全卷积网络

FCN将传统CNN中的全连接层转化成卷积层,对应CNN网络把最后三层全连接层转换成为三层卷积层。

https://i-blog.csdnimg.cn/blog_migrate/1953692f82c12070df2268ccb5f492b1.png

                                                                                           图5 传统CNN网络结构

https://i-blog.csdnimg.cn/blog_migrate/3d13cbff570e74cc468e070a7c39ab50.png

                                                                                            图6 全卷积网络结构

传统CNN输入是统一固定resize成227x227大小的图像,而FCN输入的图像是H*W大小。经过多次卷积和pooling以后,得到的图像越来越小,分辨率越来越低。其中图像到最后的输出是1000张heatmap经过upsampling变为原图大小的图片,为了对每个像素进行分类预测label成最后已经进行语义分割的图像,这里有一个小trick,就是最后通过逐个像素地求其在1000张图像该像素位置的最大数值描述(概率)作为该像素的分类。因此产生了一张已经分类好的图片,如下图右侧有狗和猫的图。

https://i-blog.csdnimg.cn/blog_migrate/173c039ff88d7dea1e216e713b2bba53.png

                                                                                             图7 FCN网络结构

三、上采样

上采样,简单来说就是pooling的逆过程,pooling采样后数据数量减少,upsample采样后数据数量增多。FCN作者在论文中讨论了3种upsample方法,最后选用的是反卷积的方法使图像实现end to end,可以理解upsample就是使大小比原图像小得多的特征图变大,使其大小为原图像大小。具体来讲,作者通过upsampling得到dense prediction,研究过3种方案:

(1)shift-and-stitch:

设原图与FCN所得输出图之间的降采样因子是f,那么对于原图的每个f*f的区域(不重叠),“shift the input x pixels to the right and y pixels down for every (x,y) ,0 < x,y < f." 把这个f*f区域对应的output作为此时区域中心点像素对应的output,这样就对每个f*f的区域得到了f^2个output,也就是每个像素都能对应一个output,所以成为了dense prediction。

详见:https://blog.csdn.net/qinghuaci666/article/details/80833866

(2)filter rarefaction:

就是放大CNN网络中的subsampling层的filter的尺寸,得到新的filter:

 

其中s是subsampling的滑动步长,这个新filter的滑动步长要设为1,这样的话,subsampling就没有缩小图像尺寸,最后可以得到dense prediction。

以上两种方法作者都没有采用,主要是因为这两种方法都是经过折中的(trade-off)。对于移针法,下采样的功能被减弱,使得更细节的信息能被filter看到,但是感受野(receptive fileds)会相对变小,可能会损失全局信息,而且会对卷积层引入更多运算,学习比较困难。对于稀疏滤波,虽然receptive fileds没有变小,但是由于原图被划分成f*f的区域输入网络,使得filters无法感受更精细的信息。

(3)反卷积(deconvolutional)

upsampling的操作可以看成是反卷积(deconvolutional),卷积运算的参数和CNN的参数一样是在训练FCN模型的过程中通过BP算法学习得到。众所诸知,普通的池化会缩小图片的尺寸,比如VGG-16五次池化后图片被缩小了32倍。为了得到和原图等大的分割图,我们需要上采样/反卷积。反卷积和卷积类似,都是相乘相加的运算。只不过后者是多对一,前者是一对多。而反卷积的前向和后向传播,只用颠倒卷积的前后向传播即可。所以无论优化还是后向传播算法都是没有问题。

四、跳跃结构

经过前面操作,基本就能实现语义分割了,但是直接将全卷积后的结果进行反卷积,得到的结果往往比较粗糙。论文中采取了以下方法:

 

                                                                                                图8 上采样结构图

image是原图像,conv1,conv2,…,conv5为卷积操作,pool1,pool2,…,pool5为pool操作,最右边一列是upsample后的end to end结果。必须说明的是图中nx是指对应的特征图上采样n倍,并不是指有n个特征图,如32x upsampled 中的32x是图像只变大32倍,不是有32个上采样图像。

(1)FCN-32s过程

只需要留意第一行,网络里面有5个pool,所以conv7的特征图是原始图像1/32,可以发现最左边image的是32x32(假设以倍数计),同时我们知道在FCN中的卷积是不会改变图像大小(或者只有少量像素的减少,特征图大小基本不会小很多)。看到pool1是16x16,pool2是8x8,pool3是4x4,pool4是2x2,pool5是1x1,所以conv7对应特征图大小为1x1,然后再经过32x upsampled prediction 图片变回32x32。FCN作者在这里增加一个卷积层,卷积后的大小为输入图像的32(2^5)倍,我们简单假设这个卷积核大小也为32,这样就是需要通过反馈训练32x32个权重变量即可让图像实现end to end,完成了一个32s的upsample。FCN作者称做后卷积,他也提及可以称为反卷积。事实上在源码中卷积核的大小为64,同时没有偏置bias。还有一点就是FCN论文中最后结果都是21×*,这里的21是指FCN使用的数据集分类,总共有21类。

(2)FCN-16s过程

现在我们把1、2两行一起看,忽略32x upsampled prediction,说明FCN-16s的upsample过程。FCN作者在conv7先进行一个2x conv7操作,其实这里也只是增加1个卷积层,这次卷积后特征图的大小为conv7的2倍,可以从pool5与2x conv7中看出来。此时2x conv7与pool4的大小是一样的,FCN作者提出对pool4与2x conv7进行一个fuse操作(事实上就是将pool4与2x conv7相加,另一篇博客说是拼接,个人认为是拼接)。fuse结果进行16x upsampled prediction,与FCN-32s一样,也是增加一个卷积层,卷积后的大小为输入图像的16(2^4)倍。我们知道pool4的大小是2x2,放大16倍,就是32x32,这样最后图像大小也变为原来的大小,至此完成了一个16s的upsample。现在我们可以知道,FCN中的upsample实际是通过增加卷积层,通过BP反馈的训练方法训练卷积层达到end to end,这时卷积层的作用可以看作是pool的逆过程。

(3)FCN-8s过程

这时我们看第1行与第3行,忽略32x upsampled prediction。conv7经过一次4x upsample,即使用一个卷积层,特征图输出大小为conv7的4倍,所得4x conv7的大小为4x4。然后pool4需要一次2x upsample,变成2x pool4,大小也为4x4。再把4x conv7,2x pool4与pool3进行fuse,得到求和后的特征图。最后增加一个卷积层,使得输出图片大小为pool3的8倍,也就是8x upsampled prediction的过程,得到一个end to end的图像。实验表明FCN-8s优于FCN-16s,FCN-32s。

我们可以发现,如果继续仿照FCN作者的步骤,我们可以对pool2,pool1实现同样的方法,可以有FCN-4s,FCN-2s,最后得到end to end的输出。这里作者给出了明确的结论,超过FCN-8s之后,结果并不能继续优化。

结合上述的FCN的全卷积与upsample,在upsample最后加上softmax,就可以对不同类别的大小概率进行估计,实现end to end。最后输出的图是一个概率估计,对应像素点的值越大,其像素为该类的结果也越大。FCN的核心贡献在于提出使用卷积层通过学习让图片实现end to end分类。事实上,FCN有一些短处,例如使用了较浅层的特征,因为fuse操作会加上较上层的pool特征值,导致高维特征不能很好得以使用,同时也因为使用较上层的pool特征值,导致FCN对图像大小变化有所要求,如果测试集的图像远大于或小于训练集的图像,FCN的效果就会变差。

五、训练过程

训练过程分为四个阶段,也体现了作者的设计思路。

第1阶段:

https://i-blog.csdnimg.cn/blog_migrate/33ff7cd9a42b4ff3024f25243c43e1e9.png

以经典的分类网络为初始化。最后两级是全连接(红色),参数弃去不用。

第2阶段:

https://i-blog.csdnimg.cn/blog_migrate/262f33288e4c746d5803269d9b7ecd0e.png

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

第3阶段:

https://i-blog.csdnimg.cn/blog_migrate/5a84f0579990e029ca3800c5603678bd.png

升采样分为两次完成(橙色×2)。在第二次升采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来。使用跳级结构提升精确性。第二次反卷积步长为16,这个网络称为FCN-16s。这一阶段使用单GPU训练约需1天。

第4阶段:

https://i-blog.csdnimg.cn/blog_migrate/19520b51049a22cc6d5d4c61df9b8dde.png

升采样分为三次完成(橙色×3)。进一步融合了第3个pooling层的预测结果。第三次反卷积步长为8,记为FCN-8s。这一阶段使用单GPU训练约需1天。较浅层的预测结果包含了更多细节信息。比较2、3、4阶段可以看出,跳级结构利用浅层信息辅助逐步升采样,有更精细的结果。

 

六、实验验证

相关参数:

minibatch:20张图片
learning rate:0.001
初始化
分类网络之外的卷积层参数初始化为0。
反卷积参数初始化为bilinear插值。最后一层反卷积固定位bilinear插值不做学习。

实验设计:

(1)对比3种性能较好的几种CNN:AlexNet,VGG16,GoogLeNet进行实验,选择VGG16;

(2)对比FCN-32s-fixed,FCN-32s,FCN-16s,FCN-8s,证明最好的dense prediction组合是8s;

(3)FCN-8s和state-of-the-art对比是最优的,R-CNN,SDS,FCN-16s;

(4)FCN-16s和现有的一些工作对比,是最优的;

(5)FCN-32s和FCN-16s在RGB-D和HHA的图像数据集上,优于state-of-the-art。

七、总结

FCN解决了传统分割网络由于使用像素块而带来的重复存储和计算卷积问题,从而推动了图像语义分割的快速发展:

 (1)可以接受任意大小的输入图像(没有全连接层);

 (2)更加高效,避免了使用邻域带来的重复计算和空间浪费的问题。

但其仍存在一些明显缺陷:

 (1)得到的结果还不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感;

 (2)是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

 (3)未有效考虑图像上下文特征信息,无法充分利用空间位置信息,导致局部特征和全局特征的利用率失衡;

 (4)训练复杂,计算量大,不能达到实时;

 (5)固定网络的感受野不能自适应物体尺寸。

 

参考博文:

https://blog.csdn.net/xxiaozr/article/details/74159614

https://blog.csdn.net/qq_36269513/article/details/80420363?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.channel_param

https://blog.csdn.net/u010678153/article/details/48676195?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值