图像语义分割FCN论文学习心得

版权说明:此文章为本人原创内容,转载请注明出处,谢谢合作!

在阅读FCN论文过程中遇到了若干问题,在查阅了相关资料后,终于解决了我的疑惑。

FCN原理简述

2014年提出的FCN在语义分割领域具有重要的意义,几乎所有后来的研究都是在FCN的基础上改进。一句话概括就是:FCN将传统网络后面的全连接层换成了卷积层,这样网络输出不再是类别而是 heatmap;同时为了解决因为卷积和池化对图像尺寸的影响,提出使用上采样(deconvolution)的方式恢复。

1.什么是全连接层?(Fully Connected Layer),它有什么作用?

在一些图像分类网络模型,如:LeNet-5、AlexNet、VGG-16中,经常会看到网络的最后几层是全连接层。我们以LeNet-5为例子,结构如下:
LeNet-5
从上图可以看出最后一层卷积层输出的特征图大小为5x5x16(尺寸5x5,通道数16),经过一层全连接层后的输出是1x120(长度为120的一维向量)的形式。第一次看到这个全连接层时,它是怎么样把5x5x16转换成1x120的形式?
在这里插入图片描述
为了方便理解,我们可以把全连接层的计算过程拆解开来看,如下图:
在这里插入图片描述
我们可以把全连接的过程理解为在中间做了一个卷积。上图的过程完成一次会生成一个值,假如我们要把5x5x16转换成1x120的形式,只要把上图的过程循环120次,就会生成长度为120的一维向量,即120个神经元。再举个例子,在VGG-16中,对于224x224x3的输入,最后一层卷积可得输出为7x7x512,再后面是一层是含4096个神经元的全连接层,则可用卷积核为7x7x512x4096的全局卷积来实现这一全连接运算过程。在图像分类中,全连接层非常重要,它把特征代表整合到一起,输出为一个值,大大减少特征位置对分类带来的影响。通俗解释就是无论物体在图像中哪个位置,我们的网络都能正确完成分类。因为空间结构特性被忽略了,所以全连接层不适合图像分割等任务。总结一下就是,全连接层之前的卷积层的作用是提取特征,全连接层的作用的整合特征完成分类。

2.为什么全连接层和卷积层之间可以相互转化?

既然全连接的过程可以理解为在中间做了一个卷积,全连接层和卷积层之间唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。然而在两类层中,神经元都是计算点积,所以它们的函数形式是一样的。因此,将此两者相互转化是可能的。举例说来,假设网络的输入是224x224x3的图像,经过一系列卷积层和池化层后,变成7x7x512的特征图。AlexNet使用了两个长度为4096的全连接层和一个长度为1000的全连接层。我们可以将这3个全连接层全都转化为卷积层:
(1)针对第一个全连接层,它的输入是7x7x512,只需用4096个7x7x512(卷积核尺寸:7x7, 通道数:512)的卷积核对其进行卷积,便可生成1x1x4096的输出。
(2)针对第二个全连接层,它的输入是1x1x4096,只需用4096个1x1x4096的卷积核对其进行卷积,便可生成1x1x4096的输出。
(3)针对第三个全连接层,它的输出要求是1x1x1000,只需用1000个1x1x4096的卷积核对其进行卷积便可。

3.全连接层转化成卷积层有什么用?为什么要这么干?

这里我就会产生一个问题:既然函数形式是一样的,那么这样的转化有什么意义?实际上,将全连接层转化成卷积层后的FCN,可以接受任意尺寸的输入,而传统CNN(最后是全连接层)确不可以。对于传统CNN,一旦输入尺寸有变化,则到达全连接层的前一个卷积层的输出尺寸,必然会随着改变,这个尺寸一改变,全连接的边的数量就改变,总的训练权值数量就改变,然而这个权值数量在整个训练过程是不能变的,因此才说传统CNN需要固定输入尺寸。对于FCN,所有的权值参数,都是基于卷积核的参数,下一层是由卷积核作用于上一层产生,而非单纯通过全连接相连。因此,只要每层的卷积核大小定了,总的训练参数的数量也就确定了,也就是说整个训练过程,总的权值数量是不变的。其结果的唯一区别也是最后的feature map大小不同。然而我们并不关心feature map的大小,因为feature map是需要再进行deconv的,而deconv又是基于卷积核的参数,最终经过crop一定会生成和输入图像大小一致的结果,因此FCN可以接受任意尺寸的输入。总之,可以接受任意大小的输入图像的原因就是换掉了全连接层。

4.如何使用上采样获得与输入一样的尺寸?

FCN将所有全连接层替换成了卷积层,经过替换过后的卷积层后,输出了一种图,叫做heatmap热图,热图就是我们最重要的高维特征图,得到高维特征的heatmap之后就是最重要的一步也是最后的一步对原图像进行upsampling,把图像不断放大到原图像的大小,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。如下图所示,最后的输出是21张heatmap (箭头标记处) 经过upsampling变为原图大小的图片,为了对每个像素进行分类预测label成最后已经进行语义分割的图像,这里有一个小trick,就是最后通过逐个像素地求其在21张图像该像素位置的最大数值描述(概率)作为该像素的分类,也就是逐个像素地求该像素属于21类中的哪个类别,因此这样就可以产生一张已经分割好的图片,真正实现了end-to-end。
在这里插入图片描述

5.FCN上采样操作中用到的deconvolution是什么?

反卷积(deconvolution)又名转置卷积,它并不是信号处理中正真意义的反卷积。其实反卷积只是恢复了特征图的尺寸大小,数值上还是存在差异的。反卷积与卷积操作的作用相反。卷积会把图像越卷约小,而反卷积能把图像越卷越大。假设输入的尺寸为NxN,卷积核尺寸为KxK,卷积步长为stride,像素扩充为padding,输出图像的尺寸为TxT,则经过卷积后,T可以由下面的公司计算的来:
在这里插入图片描述

反卷积是卷积的逆过程,此时假设输入为TxT,输出NxN,很容易得到:
在这里插入图片描述
下面两个动图更加形象地展示卷积(左)与反卷积(右)。
在这里插入图片描述在这里插入图片描述

6.FCN中的跳接结构 (skip connection)有什么用?

其实经过卷积-反卷积基本就能实现语义分割了,但是直接将全卷积后的结果进行反卷积,得到的结果往往比较粗糙。跳接就是在上采样(deconv)过程中,结合对应位置卷积池化输出结果一起进行反卷积,结果过也更精细一些了。这种做法的好处是兼顾了local和global信息。

7.FCN有什么缺点?

总体来说,本文的逻辑如下:想要精确预测每个像素的分割结果,必须经历从大到小,再从小到大的两个过程,在升采样过程中,分阶段增大比一步到位效果更好,在升采样的每个阶段,使用降采样对应层的特征进行辅助。FCN缺点: 得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。


参考资料:
1.Fully Convolutional Networks forSemantic Segmentation
2.全卷积网络 FCN 详解
3.FCN全文翻译
4.https://www.cnblogs.com/lvlvlvlvlv/p/6353637.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔法战胜魔法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值