【论文阅读】Fully Convolutional Networks for Semantic Segmentation

博客参考及推荐:
http://www.cnblogs.com/gujianhan/p/6030639.html
https://blog.csdn.net/qq_36269513/article/details/80420363
https://blog.csdn.net/gavin__zhou/article/details/52130677#commentBox

作者提出了一种全卷积神经网络,它可以输入任意尺寸的图像(因为没有全连接层),基于那些成功的分类网络(AlexNet ,VGG net, GoogLeNet)进行微调,将这些网络最后的全连接层全部变为卷积层,再使用反卷积层对feature map 上采样回图片原始大小,使其能够进行dense prediction。概括来说,FCN就是训练一个end-to-end的网络,使用ground-truth作为监督信息,来实现pixel-wise的prediction。具体的网络结构如下:
在这里插入图片描述
(图来源于https://blog.csdn.net/qq_36269513/article/details/80420363)
在PASCAL数据集上进行,20类目标以及背景,一共21类,网络最后输出深度为21。输入图像经过多次卷积和池化后,输出21张heatmap,再经过upsampling变为原来图像的大小。
具体细节:
(1)将分类网络转为全卷积网络Adapting classifiers for dense prediction:
分类网络通常最后都会接全连接层,全连接层具有固定的尺寸,会将空间信息丢弃。作者说可以将全连接层视为覆盖整个输入区域的卷积核。如下图所示,FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1),最后输出111000。
在这里插入图片描述
这样输出的feature map由于池化将使输出的尺寸大大减少。本文作者采用上采样(反卷积)来获得和原图一样大小的输出。
(2)Dense predictions
作者举例了三种方案进行upsampling
1、 shift-and-stitch
2、 filter rarefaction
3、 deconvolution
前两种方法作者都没有采用,因为是trad-off,反卷积的运算参数是可以在训练FCN模型的过程中通过BP算法学习得到的。本文中作者采用的是双线性插值法.
针对反卷积还不是很懂,这里先MARK一下:
在这里插入图片描述
(3)Skip architecture
通过上面的上采样操作后,会发现得到的输出结果是很粗糙的,尤其是边界等细节部分。
语义分割在语义和位置之间的问题:全局信息解决了什么,而局部信息解决了哪里。本文通过设计了一个跳过模块来充分结合深层、粗糙的语义信息与浅层的、精细的表层信息。
如下图所示:对原图进行卷积conv1、pool1后图像缩小为1/2;第二次pool2后缩小为1/4;第三次pool3后缩小为1/8,保留pool3的featuremap;第四次卷积pool4后缩小为1/16,保留pool4的featuremap;第五次卷积pool5后缩小为1/32,经过conv6、conv7后的featuremap大小依然为原图的1/32,此时输出也称为heatmap。
在这里插入图片描述
(4)为什么可以逐像素预测
如第一幅图所示,最后卷积输出为16164096,此时输入卷及模板为1121的卷积核,输出结果就为161621,相当于对每个像素连接一个全连接层,利用像素的4096维特征来进行21类分类结果的预测。利用那个trick说明,就是最后通过逐个像素地求其在4096张图像该像素位置的最大数值描述(概率)作为该像素的分类
(5)skip model 融合
将1/32尺寸的heatMap进行upsampling操作,然后将其与1/16尺寸的featuremap进行融合,也就是加和运算。融合后再进行upsampling,并继续与1/8尺寸的featuremap进行融合,最后经过upsampling(还包括裁剪等操作)输出与输入图像相同大小的预测图像。
相关结果:
在这里插入图片描述
从结果上来看,边界细节等地方还是有改进空间。
记录一个在参考博客中说明的问题:在对各个像素进行分类时,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

自己刚开始接触语义分割几天,记录下论文中相关名词释义:
(1)dense prediction:标注出图像中每个像素点的对象类别,要求不但给出具体目标的位置,还要描绘物体的边界,如图像分割、语义分割、边缘检测等等。
(2)translation invariance:平移不变性。
记录下某篇博客中的解释的,个人感觉非常容易理解:
意味着即使图像经历了一个小的平移之后,依然会产生相同的特征。在很多任务中 (例如物体检测、声音识别),我们都更希望得到具有平移不变性的特征,因为即使图像经过了平移,样例(图像)的标记仍然保持不变。
例如,如果你处理一个MNIST数据集的数字,把它向左侧或右侧平移,那么不论最终的位置在哪里,你都会期望你的分类器仍然能够精确地将其分类为相同的数字。
cnn中conv层对应的是“等变性”(Equivariance),由于conv层的卷积核对于特定的特征才会有较大激活值,所以不论上一层特征图谱(feature map)中的某一特征平移到何处,卷积核都会找到该特征并在此处呈现较大的激活值。这应该就是“等变性”,这种“等变性”是由conv层的 1局部连接 2权值共享 两个特性得到的。所谓的“形变不变性”,应该指的是,若是特征有较小的形变,那么激活值不会有太多的变化。
真正的“不变性”(invariation)应该对应于pooling层,以max-pooling为例,若是2x2的池化,那么特征在2x2的区域中平移,得到的结果是一样的。越往后的pooling层,2x2的核的感受野就越大、所允许的平移也就越大。个人感觉这种“不变性”往往是针对分类任务而言的。(其实说白了,检测任务就是对局部区域的分类,分割任务就是对单个像素的分类)
-网络的层次越深这个特性会越明显
平移可变性则是针对目标检测的,一只猫从图片左侧移到了右侧,检测出的猫的坐标会发生变化就称为平移可变性。当卷积网络变深后最后一层卷积输出的feature map变小,物体在输入上的小偏移,经过N多层pooling后在最后的小feature map上会感知不到,这就是为什么原文会说网络变深平移可变性变差。
(3)Batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练。
batch的选择,首先决定的是下降方向,如果数据集比较小,则完全可以采用全数据集的形式。这样做的好处有两点,
1)全数据集的方向能够更好的代表样本总体,确定其极值所在。
2)由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。
当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够。但盲目减少会导致无法收敛,batch_size=1时为在线学习,也是标准的SGD,这样学习,如果数据量不大,noise数据存在时,模型容易被noise带偏,如果数据量足够大,noise的影响会被“冲淡”,对模型几乎不影响。
总结一下(参考https://www.zhihu.com/question/32673260):
1)batch数太小,而类别又比较多的时候,可能会导致loss函数震荡而不收敛,尤其是网络比较复杂的时候。
2)随着batchsize增大,处理相同的数据量的速度越快,达到相同精度所需要的epoch数量越来越多。
3)Batch_Size 增大到某个时候,就会达到时间上的最优。
5)由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
6)过大的batchsize使网络很容易收敛到一些不好的局部最优点。同样太小的batch也存在一些问题,比如训练速度很慢,训练不容易收敛等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值