语义分割|学习记录(3)FCN

提示:来自up主霹雳吧啦Wz,我只是做一下学习笔记

文章目录

  • 前言
  • 一、Fully Convolutional Network
  • 二、Convolutionalization
  • 三、Convolutionalization过程原理
  • 四、FCN模型详细介绍
    • 1. FCN-32s
    • 2. FCN-16s
    • 3. FCN-8s
  • 总结
  • 参考资料


前言

Fully Convolutional Networks for Semantic Segmentation(FNC)网络是发表在2015CVPR上的一篇文章.有兴趣的读者可以点击链接自行下载。

一、Fully Convolutional Network

FCN(Fully Convolutional Network)是首个端对端的针对像素级预测全卷积网络。这篇文章中的全卷积的意思是将整个网络中的分类网络中的全连接层替换成了卷积层。在语义分割领域这是一篇很有引领方向作用的文章。
语义分割|学习记录(3)FCN_第1张图片
接下来我们看一下FCN网络进行语义分割的效果:
语义分割|学习记录(3)FCN_第2张图片
我们可以看到FCN-8s的语义分割效果已经和Ground truth非常接近了,这里可以说明FCN网络的效果还是很不错的(至少是在当年效果还是不错的)。
作者在文中也将FCN与当年的主流算法进行了对比,在mean IoU和推理时间方面的效果都能吊打对手。
语义分割|学习记录(3)FCN_第3张图片
我们在来看一下文章中给出的FCN-32s的网络结构,也可以发现它的网络结构非常的简单,但事实做出来的语义分割结构却非常的好,这也是FCN的优秀之所在。
这里先顺便提一嘴,我们可以观察到通过一系列的卷积、下采样,观察到最后一个特征层的channel=21,这是因为使用的数据集是PASCAL VOC(20类别+背景),再进行上采样就得到了和原图同样大小的特征图(channel=21),对每一个像素的21个值进行softmax处理,就得到了该像素针对每一个类别的预测概率,取概率最大的作为预测类别。
语义分割|学习记录(3)FCN_第4张图片

二、Convolutionalization

我们知道全连接层要求我们输入图片的像素是固定的。我们在训练分类网络时要固定图像输入。
那么如果将全连接层改为卷积层,那么对于输入图片的大小就没有限制了。
这里我们将全连接层进行Convolutionalization处理,如下图所示,这是可以输入任意大小的图片了。但是如果输入的图像是大于224*224的话,那么最后一个特征层对应的高和宽就大于1了,这时对应每一个channel的数据就是一个2维数据。那么我们就可以将它展成平面可视化。

三、Convolutionalization过程原理

我们以VGG16网络为例:

  • 将7 * 7 * 512的特征层flatten和全连接操作后得到一组长度4096的层,FC1参数量为102760448
  • 将7 * 7 * 512的特征层通过conv(7*7,s1,4096)操作后,conv参数量也为102760448
    通过上面的说明我们可以知道两个过程时完全等效的,这也就是Convolutionalization的过程。
    语义分割|学习记录(3)FCN_第5张图片

四、FCN模型详细介绍

原论文给出的FCN-32s-fixed,FCN-32s,FCN-16s,FCN-8s各个性能指标的比较列表,我们也可以发现效果时越来越好的。
语义分割|学习记录(3)FCN_第6张图片
那具体这些模型都是什么样的呢?

  • FCN-32s:是将预测结果上采样了32倍,还原回原图大小。
  • FCN-16s:是将预测结果上采样了16倍,还原回原图大小。
  • FCN-8s:是将预测结果上采样了8倍,还原回原图大小。

语义分割|学习记录(3)FCN_第7张图片

1. FCN-32s

语义分割|学习记录(3)FCN_第8张图片
网络结构如上图所示,这里提几个要点:

原论文中作者在backbone的第一个卷积层处padding=100,为什么呢?

为了让FCN网络可以适应不同大小的网络

如果不进行padding=100处理会怎样呢?

如果图片的大小小于192 * 192,到最后一个特征层的大小就小于7*7了,如果padding=0的话,那么到后面就无法对小于7 * 7的层进行等效于正常全连接的卷积操作了。
另外如果我们输入的图片大小小于32 * 32,backbone没等走完就已经报错了。

但是站在现在的角度来思考这个问题,作者是没必要padding=100的

首先,一般情况下没有人会对小于32 * 32的图片进行语义分割,另外,在图片大于32 * 32时,我们是可以通过让FC6中7*7的卷积层的padding=3,我们就可以训练任意高宽大小大于32 * 32的图片。

在原论文中作者使用双线性差值的方法来初始化转置卷积的参数的

双线性差值

2. FCN-16s

语义分割|学习记录(3)FCN_第9张图片
和上面FCN-32s区别在于:

  • 这里面的转置卷积上采样了2倍
  • 额外使用到了来自maxpooling4的输入特征图(下采样16倍)

3. FCN-8s

语义分割|学习记录(3)FCN_第10张图片
FCN-8s除了上述的融合操作外,还利用了来自maxpooling3的一个输出

总结

FCN网络最大的特点就是将普通的全连接层转换为了卷积层,不但实现了输入图片的自由度,而且分割效果非常理想。
常见的FCN网络有三种:,FCN-32s,FCN-16s,FCN-8s。它们的效果依次越来越理想。实际上就是通过融合maxpoling层信息的操作,来实现更好的效果。

参考资料

原作者视频

你可能感兴趣的:(语义分割学习记录,深度学习,计算机视觉,神经网络,卷积)