深度学习学习日记_FCN_(2) 文献阅读

1 CNN and FCN

CNN:CNN这几年一直在驱动着图像识别领域的进步。图像语义分割是个空间密集型的预测任务,需要预测一幅图像中所有像素点的类别。以往的用于语义分割的CNN,每个像素点用包围其的对象或区域类别进行标注,但是这种方法不管是在速度上还是精度上都有很大的缺陷。

  • 通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都期望得到整个输入图像的一个数值描述(概率)。

FCN:对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。

  • 完全卷积网络(FCN)完成了从像素到像素的结果预测。FCN网络是经典CNN的延伸。其主要思想是使经典的CNN以任意大小的图像作为输入。由于CNN仅接受和生产特定尺寸输入的标签的限制来自完全连接的固定层。与之相反,FCN只有卷积层和池层,它们能够对任意大小的输入进行预测。

在FCN中,通过将全连接层和softmax层改为卷积的形式。接受任意尺度的输入图片,同时利用反卷积对最后一个卷积层的feature map进行上采样, 使预测结果恢复到输入图片相同的尺寸,以达到每一个像素的预测效果。

 

2 FCN

2.1 卷积化

可操作性:全连接层和卷积层之间唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域相连接。然而在这两类层中,神经元都是计算点积,所以它们的函数形式是一样的。因此,将此两者相互转化是可能的。

  • 对于任一个卷积层,都存在一个能实现和它一样的前向传播函数的全连接层。权重矩阵是一个巨大的矩阵,除了某些特定块,其余部分都是零。而在其中大部分块中,元素都是相等的。

  • 相反,任何全连接层都可以被转化为卷积层。比如,一个K=4096的全连接层,输入数据体的尺寸是7x7x512,这个全连接层可以被等效地看做一个F=7,P=0,S=1,K=4096的卷积层。换句话说,就是将滤波器的尺寸设置为和输入数据体的尺寸一致了。因为只有一个单独的深度列覆盖并滑过输入数据体,所以输出将变成1x1x4096,这个结果就和使用初始的那个全连接层一样了。

 

必要性:利用传统的基于CNN的分割方法:为了对一个像素分类,需要使用该像素周围的一个图像块作为CNN的输入用于训练和预测,存在如上缺点。

  • 存储开销很大。例如对每个像素使用的图像块的大小为15x15,然后不断滑动窗口,每次滑动的窗口给CNN进行判别分类,因此则所需的存储空间根据滑动窗口的次数和大小急剧上升。

  • 计算效率低下。相邻的像素块基本上是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。

  • 像素块大小的限制了感受野的大小。通常像素块的大小比整幅图像的大小小很多,只能提取一些局部的特征,从而导致分类的性能受到限制。

 

对于任何一个卷积层,都存在着一个能实现和它一样的前向传播函数的全连接层。同时,任何一个全连接层都可以被转化为卷积层。这提供了FCN对于进行卷积与全连接层转化的可操作性。 另外,如果利用CNN对每一个像素进行训练与预测,会造成存储开销过大、计算效率低下,以及像素块大小限制感受野大小等缺陷。 所以无论从可操作性还是必要性上,FCN的提出全连接层卷积化都具有一定的实现意义。

 

2.2 上采样

2.2.1 shift and stitch

设原图与FCN所得输出图之间的降采样因子是f,那么对于原图的每个f x f 的区域(不重叠),把这个f x f区域对应的output作为此时区域中心点像素对应的output,这样就对每个f x f的区域得到了f ^ 2个output,也就是每个像素都能对应一个output,所以成为了dense prediction

设网络只有一层 2乘2 的maxpooling 层且 stride = 2,以此来保证每一个shift都不重叠,所以在这个例子中的下采样因子 f =2。 

此时,我们需要做的是对input image 的像素平移 (x,y)个单位,即将 image 向左平移 x 个像素, 再向上平移y个单位,整幅图像表现向左上方向平移,空出来的右下角就以0 padding 。 我们当然可以采取 FCN论文中的做法,将图像向右下角平移,空出来的左上角用 0 padding ,这两种做法产生的结果是一致的。没有本质区别。 如上图,样例对原图进行了(0,0),(1,0),(0,1),(1,1)的四个平移操作,分别得到了右图的四个max pooling的结果图,这便是shift and stitich中的shift操作。 将四个shift得到的结果进行stitich便可以得到最终的上采样结果。

stitich的操作过程如下:output 中的每个pixel都对应 original image 的不同 receptive field,将receptive field 的中心C填上来自output的pixel值,就是网络对original image 中像素C类别的prediction(结果图中的每个像素都对应原图的不同感受野,将感受野的中心c填上来自结果图的像素值,就是网络对原图中像素c类别的处理结果,这也被称为该方法的stitich操作。)例如:红色结果图中的像素1对应原图(0,0) 的红色部分,其对应的感受野的中心点像素点在原图(0,0)的第一行第一列, 所以在第一行第一列填上红色结果图的像素值1。 以此类推.. 特别的,如果在原图中已经填充过像素的值,那么在后面的操作中将不进行值的覆盖,比如说在黄色结果图中的像素 5 与红色结果图中的像素5对应的感受野中心是重叠的, 那么在黄色结果图中的像素 5 标为灰色,表示不进行重复考虑。

2.2.1 反卷积

假设输入图像尺寸为4乘4,卷积核的尺寸为3乘3那么对应的经过对应卷积和padding操作,输出的图像尺寸大小为2乘2 将输入图像的尺寸,输出图像的寸尺展开为一个为1乘16与一个1乘4的的列向量 并且经过推导可以得到卷积层的尺寸为一个4乘16的的稀疏矩阵。

反卷积将矩阵计算的过程进行逆运算,如上述计算式所示,反卷积通过对卷积矩阵的转置结果 与  原图经过卷积的结果Y 进行矩阵运算,可以得到与原图相同尺寸大小的结果:

 

2.3 跳跃结构

首先从上面图像的第一行开始说明跳跃结构的过程,网络中存在5个pooling层,所以对应的最后的conv7的feature map的尺寸是原始图像的1/32如果只用该层的feature map进行预测,那么该结果被称为FCN-32的预测结果。 同样的,如果我们采用经过四层pooling层得到的feature map 与 FCN-32预测层两倍上采样得到的feature map相结合,进行预测,那么该结果被称为FCN-16,以此类推。 文章最后得到FCN-8的预测效果最好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值