语义分割-全卷积神经网络FCN

介绍

全卷积神经网络,Fully Convolutional Networks for Semantic Segmentation,简称:FCN

所有的层都是卷积层,故称为全卷积网络

2014年发表,是用于语义分割的 最简单 且 流行 的神经网络之一

输入可为任意尺寸的彩色图,输出为语义分割后的图像,输出与输入尺寸相同

论文:

https://arxiv.org/abs/1411.4038

下载地址:
https://gitee.com/65242847/images/blob/master/paper/Fully%20Convolutional%20Networks%20for%20Semantic%20Segmentation.pdf

FCN分类

FCN又细分为3类:

  • FCN-32S
  • FCN-16S
  • FCN-8S

不同类别的准确率

Pascal VOC 2011数据集(左),NYUDv2数据集(中),SIFT流数据集(右)

  • FCN-8s 是Pascal VOC 2011中最好的。
  • FCN-16s 是NYUDv2中最好的。
  • FCN-16s 是SIFT Flow中最好的。

CNN vs FCN

CNN卷积神经网络

对于CNN卷积神经网络,比如VGG16,最后是全连接层,将图片(二维矩阵)压缩成一维,最后输出的是类别的概率 或者 是数值,这样适合 回归 和 分类 任务。

但是丢失细节信息,不能很好地给出物体的 具体轮廓,将每个像素进行分类,做到精确的分割很有难度。

多层结构能自动学习特征(在跳跃结构会用到):

  • 较浅的卷积层感知域较小,学习到一些局部区域的特征
    前几个卷积层,图像还没有变小,假设卷积核大小是(3,3),相对而言感知区域较小
  • 较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征。
    经过几个卷积层、池化层后,图像都会变小,假设卷积核大小是(3,3),相对而言感知区域较大

FCN神经网络

语义分割是对图像进行像素级的分类,最后输出的是 将像素分类好的 图像。

FCN可以接受 任意尺寸 的输入图像,经过卷积层得到feature map,每经过一个卷积层 、池化层,图像都会变小,然后用 反卷积层 对 feature map 进行 上采样, 使它 恢复 输入图像的尺寸, 同时保留了原始输入图像中的 空间信息,从而可以对每个像素都产生了一个预测,

关键技术

主要使用了三种技术:

  • 卷积化(Convolutional)
    不含全连接层(fc),可适应任意尺寸输入
  • 上采样(Upsample)
    使用反卷积(另称转置卷积)层,能够输出精细的结果
  • 跳跃结构(Skip Layer)
    结合不同深度层结果的跳级(skip)结构,同时确保鲁棒性和精确性。

卷积化(Convolutional)

将原来CNN卷积神经网络(如vgg16)的3个全连接层去掉,此时,最后输出的图像不叫 feature map,称之为:heatmap ,即:热图

然后再后面 加上 3 个卷积层,即:所有的层都是卷积层,所以称为 全卷积网络

新添加的3个卷积层:

层 卷积核数量 卷积核大小 padding 卷积后图像尺寸
第一个卷积层 4096 (7,7) same 不改变
第二个卷积层 4096 (1,1) same 不改变
第三个卷积层 3 (1,1) same 不改变

看上去数字上并没有什么差别,但是 卷积 跟 全连接 是不一样的概念,计算过程也不同

注意:
在FCN32S中,为了防止过拟合,第1个、第2个卷积层后面会加上dropout层

上采样(Upsample)

普通的 卷积、池化会 会 缩小图片的尺寸,比如VGG16 ,每次最大池化后都会缩小 1/2,一共 5 次池化,图片缩小 1/32。

为了得到和原图等大的分割图,需要用 上采样,放大32倍后,就会得到原图大小的 分割图

这样就实现了 end-to-end,pixels-to-pixels

注意:

  • FCN用上采样中的反卷积
  • 不同的神经网络使用上采样的方式不同

详细参见:
https://www.malaoshi.top/show_1EF52HM7gu6g.html

为什么在VGG16的基础之上实现FCN

FCN作者分别在AlexNet、VGG16、GoogLeNet 的基础之上,实现FCN,经过比较,结果如下:

可见FCN-VGG16的 平均交并比(下面有解释) 最高

FCN32S

实现了 卷积化 和 上采样,也就实现了 FCN32S 神经网络

参见:https://www.malaoshi.top/show_1EF53OZZLiWQ.html

跳跃结构(Skip Layer)

实现了 卷积化 和 上采样,也就实现了 FCN32S 神经网络,可以实现语义分割,但是得到的结果往往比较粗糙

所以作者将不同池化层的结果进行上采样之后来优化输出。

具体结构如下:

image是原图像,pool1,pool2,…,pool5为池化操作(没经过一次pool,图片缩小1/2)

注意:
图中32x、2x、16x,8x 是指对应的特征图上采样n倍(即变大n倍)

FCN-16S过程

  1. 将 pool5 先进行2x upsampled prediction,输出的结果尺寸与 pool4 的大小是一样的
  2. 将上一步的结果与 pool4 进行 add 操作。
  3. 将上一步的结果进行16x upsampled prediction,输出结果大小是之前的16倍。

第1步放大2倍,第2步放大16倍,也就是总共放大32,这样最后图像大小也变为原来的大小

FCN-8S过程

  1. 将 pool5 先进行2x upsampled prediction,输出的结果尺寸与 pool4 的大小是一样的
  2. 将 pool4 与 2x pool5 进行 add 操作。
  3. 将 add 结果 进行 2x upsampled prediction,输出结果大小是之前的2倍,尺寸与 poo3 是一样的,将结果 与 poo3 相加
  4. 将上一步的结果 进行8x upsampled prediction,输出结果大小是之前的8倍

此时一共放大2*2*8=32倍,与输入图像image的尺寸相同

FCN-32S、FCN-16S、FCN-8S 比较

评价结果:

语义分割结果:

ground truth:真实数据

FCN-4S、FCN-2S是否可行

如果继续仿照FCN作者的步骤,可以对pool2,pool1实现同样的方法,可以有FCN-4s,FCN-2s,最后得到end to end的输出。

这里作者给出了明确的结论,超过FCN-8s之后,结果并不能继续优化。

评价准则

  1. 像素精度(pixel accuracy ):每一类像素正确分类的个数/ 每一类像素的实际个数。

  2. 均像素精度(mean pixel accuracy ):每一类像素的精度的平均值。

  3. 平均交并比(Mean Intersection over Union):求出每一类的IOU取平均值。IOU指的是两块区域相交的部分/两个部分的并集,如下图 绿色部分/总面积。

  4. 权频交并比(Frequency Weight Intersection over Union):每一类出现的频率作为权重

缺点

  1. 由于转置-卷积(或解卷积)操作的输出的不均匀重叠而导致棋盘伪像的存在。

  2. 由于编码过程中信息的丢失,边界分辨率差

  3. 使用了较浅层的特征,因为fuse操作会加上较上层的pool特征值,导致高维特征不能很好得以使用,同时也因为使用较上层的pool特征值,导致FCN对图像大小变化有所要求,如果测试集的图像远大于或小于训练集的图像,FCN的效果就会变差。

感谢:
http://blog.qure.ai/notes/semantic-segmentation-deep-learning-review#fcn
https://towardsdatascience.com/review-fcn-semantic-segmentation-eb8c9b50d2d1
https://zhuanlan.zhihu.com/p/37618829
https://www.cnblogs.com/xiaoboge/p/10502697.html


原文出处:/show_1EF52IaoxF3T.html