Fully Convolutional Networks for Semantic Segmentation

--------------------------------------------------------------------------------------------------------------------

论文:https://arxiv.org/pdf/1411.4038.pdf

代码:http://link.zhihu.com/?target=https%3A//github.com/shelhamer/fcn.berkeleyvision.org

论文翻译:https://www.cnblogs.com/xuanxufeng/p/6249834.html

--------------------------------------------------------------------------------------------------------------------

一、 Abstract

提出了一种end-to-end的做语义分割的方法。

             

卷积化:

以往分类的网络通常会在最后使用全连接层,将原来二维特征图转换成一维的固定长度的特征向量,这就丢失了空间信息,最后输出一个特定长度的向量,表示输入图像属于每一类的概率,以此作为分类的标签。

比如将下图输入AlexNet,得到一个长度为1000的输出向量,表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高,所以分类标签为“tabby cat”。

                       这里写图片描述

与传统CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全连接层+softmax)不同,FCN可以接受任意尺寸的输入图像,然后通过反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在与输入图等大小的特征图上对每个像素进行分类,逐像素地用softmax分类计算损失,相当于每个像素对应一个训练样本。

因为语义分割需要输出整张图片的分割图,所以要求网络中的特征图至少是二维的,这样才能通过上采样还原到输入图片的同等大小。 这就需要替换掉全连接层,改换为卷积层,而这就是卷积化,具体来说,就是将最后三个全连接层替换为卷积层。

这里写图片描述

二、亮点

1、提出了全卷积网络的概念,将Alexnet这种的最后的全连接层转换为卷积层,可以输入任意的scale

    输出的scale不同的时候,feature map的大小也不同,因为这里的目的是最piexl的语义分割,所以其实不重要。

    在Alexnet基础上, 最后的channel=4096的feature map经过一个1x1的卷积层, 变为channel=21的feature map, 然后经过上采样和crop, 变为与输入图像同样大小的channel=21的feature map, 也就是图中的pixel-wise 预测。 实验中一共有20个语义类别, 加上背景类别每个像素应该有21个softmax预测类, 因此pixel-wise 预测中channel=21。

2、如何做上采样的?

     对CNN的输出结果进行upsampling,上采样的参数是可学习的,这里采用的方法是反卷积,其实跟BP的求卷积层的梯度是一样的算法,最后得到一个和原图一样大小的输出,输出结果为对每个像素的分类。

3、如何把全连接层转换为卷积层?

全连接层和卷积层唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。 但是这两类层的神经元都是计算点积,它们的函数形式是一样的。因此,将此两者相互转化是可能的。把全连接层转换为卷积层,实际上是用一个和输入的图像一样大小的卷积核去做这个操作

Eg:

假设一个输出为4096 的全连接层,输入数据体的尺寸是 7∗7∗512,这个全连接层可以被等效地看做一个 Kernel=7,P=0,S=1,numout=4096 的卷积层。 也就是将滤波器的尺寸设置为和输入数据体的尺寸一致了,这个结果就和使用初始的那个全连接层一样了。 

全连接层和卷积层的转化:在两种变换中,将全连接层转化为卷积层在实际运用中更加有用。

假设卷积神经网络的输入是224x224x3的图像,一系列的卷积层和下采样层将图像数据变为尺寸为 7x7x512 的数据体。AlexNet使用了两个尺寸为4096的全连接层,最后一个有1000个神经元的全连接层用于计算分类评分。 我们可以将这3个全连接层中的任意一个转化为卷积层:

  1. 第一个连接区域是[7x7x512]的全连接层,令其滤波器尺寸为Kernel=7,这样输出数据体就为[1x1x4096]了; 
  2. 第二个全连接层,令其滤波器尺寸为Kernel=1,这样输出数据体为[1x1x4096]; 
  3. 最后一个全连接层也做类似的,令其Kernel=1,最终输出为[1x1x1000]。

4.refinement

作者发现,直接这样做效果并不是很好。在最后upsampling的时候,不只用最后一层,还要结合前面几层一起来做一个fusion,前面几层的感受野是比较小的,所以在局部的输出结果上是不错的,而后面的输出感受野是越来越大的,可以说准确率会高一点,进行融合以后,效果更好。

三、 Skip Architecture

如下图所示:

  1. 对原图像进行卷积conv1、pool1后原图像缩小为1/2;
  2. 之后对图像进行第二次conv2、pool2后图像缩小为1/4;
  3. 接着继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;
  4. 接着继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;
  5. 最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32;
  6. 然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时图像不再叫featureMap而是叫heatMap

这里写图片描述

现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap,1/32尺寸的heatMap进行upsampling操作之后,因为这样的操作还原的图片仅仅是conv5中的卷积核中的特征,限于精度问题不能够很好地还原图像当中的特征,因此在这里向前迭代。把conv4中的卷积核对上一次upsampling之后的图进行反卷积补充细节(相当于一个插值过程),最后把conv3中的卷积核对刚才upsampling之后的图像进行再次反卷积补充细节,最后就完成了整个图像的还原。

具体来说,就是将不同池化层的结果进行上采样,然后结合这些结果来优化输出,具体结构如下:

这里写图片描述
而不同的结构产生的结果对比如下: 
                                   这里写图片描述

参考资料:

  1. CS231n Convolutional Neural Networks for Visual Recognition
  2. ReLu (Rectified Linear Units) 激活函数
  3. Jake Bouvrie, Notes on Convolutional Neural Networks, 2006
  4. Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, MIT Press, 2016
  5. 零基础入门深度学习(4) - 卷积神经网络


全连接vs卷积

全连接网络:

 1、 参数数量太多 

 考虑一个输入1000*1000像素的图片,输入层有1000*1000=100万节点。假设第一个隐藏层有100个节点,那么仅这一层就有(1000*1000+1)*100=1亿参数,这实在是太多了!我们看到图像只扩大一点,参数数量就会多很多,因此它的扩展性很差。

2、没有利用像素之间的位置信息 

对于图像识别任务来说,每个像素和其周围像素的联系是比较紧密的,和离得很远的像素的联系可能就很小了。如果一个神经元和上一层所有神经元相连,那么就相当于对于一个像素来说,把图像的所有像素都等同看待,这不符合前面的假设。当我们完成每个连接权重的学习之后,最终可能会发现,有大量的权重,它们的值都是很小的。努力学习大量并不重要的权重,这样的学习必将是非常低效的。

3、网络层数限制

 我们知道网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过3层。因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。

卷积神经网络:

1、局部连接 

每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数。

2、权值共享 

一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。

3、下采样 

可以使用Pooling来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。

对于图像识别任务来说,卷积神经网络通过尽可能保留重要的参数,去掉大量不重要的参数,来达到更好的学习效果。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

女王の专属领地

您的鼓励是我最大的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值