语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+

语义分割梳理

写这篇博客也是想主要梳理一下最流行的几个语义分割网络,并且做一个小总结。接下来将从2014年的FCN到2018年的DeepLabv3+,来描述几个基于FCNs的深度语义分割网络的结构是如何变化。

  • 值得注意的是语义分割的任务是基于像素点的密集预测任务,其目的是将输入图像的每个像素分配一个语义类别。
  • FCNs(全卷积神经网络)

在之前基于CNN的分割网络中存在两个问题:

  1. 在利用全连接层的情况下进行密集预测
  2. 池化操作和带步长的卷积在提取更多抽象、突出的特征的同时,也造成了空间信息的丢失

FCNs网络,以VGG16为backbone,去掉了最后的全连接层(fc6和fc7)转换为卷积层,以生成一个低分辨率的特征图,然后用双线性初始化的饭卷积,并在上采样的每一个阶段采用skip-connection的方式融合(求和)VGG16中的低层信息(conv4、conv3)的更加粗糙但是分辨率更高的特征图进一步融合多尺度信息。如下图所示,FCN-8s 融合了不同粗糙度(conv3、conv4和fc7)的特征,利用编码器不同阶段不同分辨率的空间信息来细化分割结果。
语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第1张图片

  • SegNet

语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第2张图片
SegNet的新颖之处在于解码器(Decoder)对其低分辨率的输入特征图进行 上采样 的方式。具体地说,解码器使用了在相应编码器(Encoder)的最大池化步骤中计算的池化索引来执行非线性上采样。这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用的可训练的卷积核进行卷积操作,生成密集的特征图。
语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第3张图片
SegNet的关键优势:

  1. 在解码器中使用去池化对特征图进行上采样操作,并在分割中保持高频细节的完整性
  2. 编码器不使用全连接层,因此是拥有较少参数的轻量级网络
  • U-Net

语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第4张图片
U-Net的关键优势

  1. 编码过程中每经过一个池化层就是一个尺度,通过skip-connection就结合了多尺度的信息。
  2. 简单有效地将编码器的特征图拼接至每个阶段解码器的上采样特征图,从而形成一个U型结构,并通过skip-connection(不是求和,这里使用级联)的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特性
  3. 适合超大图像分割,适合医学图像分割(把一个大图像切成小patch进行训练)。
  • PSPNet

语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第5张图片
PSPNet利用不同区域的上下文信息集合,通过设计的金字塔池化模块,来充分的利用全局上下问信息。
PSPNet的关键优势:

  1. PSP基于ResNet架构并且在此基础上引入空洞卷积,特征通过CNN提取以获得Feature Map(原图像尺寸的1/4),然后进入金字塔池化模块。
  2. 在ResNet的中间层引入辅助损失,以优化整体的学习。
  3. 在修改后的ResNet顶部引入空间金字塔池化来聚合上下文信息
  • RefineNet

RefineNet是一个通用的多路径优化网络,它明确利用了整个下采用过程中可用的所有信息,使用远程残差连接实现高分辨率的预测。通过这种方式,可以使用早起卷积中的细粒度特征(low-level)来直接细化捕捉高级语义特征(high-level)的更深的网络层。RefineNet的各个组件使用遵循恒等映射思想的残差连接,这也是的网络能够更有效的端到端训练。
语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第6张图片
语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第7张图片
RefineNet解决了传统卷积网络中的空间分辨率减少的问题,与PSPNet(使用计算成本高的空洞卷积)使用方法不通。提出的架构迭代地池化特征,利用特殊的RefineNet模块增加不同的分辨率,并最终生成高分辨率的分割图。其关键特点如下:

  1. 使用多分辨率作为输入,将提取的特征融合在一起,并将其传递到下一阶段。
  2. 引入链式残差池化,可以从一个大的图像区域获取背景信息。它通过多窗口尺寸有效地池化特性,利用残差连接和学习权重方式融合这些特征,所有的特征都是使用sum方式来进行end-to-end训练。
  3. 使用ResNet的残差层,而没使用计算成本更高的空洞卷积。
  • DeepLab v1~v3+

语义分割是一种对每个像素进行分类的密集预测,而普通的分类神经网络具有平移不变性,对位置不敏感,而且降采样过程会损失空间信息,不利于分割结果输出。然而分类网络不停的降采样,也是为了增加感受野,提高更高层的语义。那么有没有办法保存特征图的分辨率而同时增加感受野呢?DeepLab就采用了空洞卷积(或带孔卷积)。
谷歌的DeepLab系列是语义分割中非常重要的存在。目前一共出了四个版本。为了让大家更好地、有逻辑性地熟悉语义分割中重要的DeePLab系列网络,在这里将DeepLab系列网络放在一起讲解

  • 带孔卷积和普通卷积的区别示意图:

语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第8张图片
使用空洞卷积的使用,可以服从之前与训练的分类网络,把后面几层的下采样去掉,复用后面几层的卷积参数,卷积方法改为空洞卷积。这样网络最后输出的特征图分辨率提高了,感受野也增加了。下图从左到右,主要在DCNN中应用了空洞卷积密集的提取特征,左边输出步幅是16,需要上采样16倍得到预测结果,可以看到结果是比较模糊的;而右边是在DCNN中使用空洞卷积,保持步幅为8,只需要上采样8倍,结果清晰了很多。
语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第9张图片

  • DapLab v1

DeepLab v1是在VGG16的基础上做了一下的修改:

  1. VGG16的全连接层改为卷积
  2. 最后的两个池化层去掉了
  3. 后句卷积层的卷积核改为了空洞卷积(rate=2)【串行计算
  4. 在ImageNet上预训练的VGG16权重上做fine-tune
  5. 最后也采用了条件随机场(CRF)进行了细化边缘分割效果。【在最新的v3已经被弃用
  • DapLab v2

DeepLab v1的空洞卷积是串行的。v2采用了一个ASPP模块改为并行使用,每个分支才用不同rate(获得不同的感受野),已解决多尺度问题。同时v2也保留了CRF作为后处理手段。
v2相对于v1的改进:

  1. 利用多尺度获得更好的分割效果(ASPP)
  2. Backbone由VGG16改为了ResNet
  3. 使用不同的学习策略(Poly)
    重点说一下ASPP(Atrous Spatial Pyramid Pooling),ASPP中在给定的Input Feature Map上以r=(6,12,18,24)的3×3空洞卷积并行采样。ASPP各个空洞卷积分支采样后结果最后融合到一起(通道相同,做像素加),得到最终预测结果.
    语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第10张图片
  • DapLab v3

DeepLab v3 第一感觉就是空洞卷积串行和并行方法的一个结合,在细节之处(BN和rate)有所改进。v3在论文中讨论了并行(ASPP)和串行的两种风格的网络,通过实验对比发现并行的效果更好,所以后来再提到DeepLab v3世纪说的ASPP风格的那个版本。
为了解决多尺度的问题,作者做了两种尝试:在串行网络结构中依次使用double空洞卷积率;以及在ASPP网络结构中加入了全剧池化和多种空洞卷积分支平行计算再融合

  • Multi-grid

Multi-grid是指在一个block内部,才用不同的空洞卷积率。
比如,在resnet的block4内有3层卷积,那么当Multi-grid = (r1,r2,r3) = (1,2,4),rate=2时,最终这3层的空洞卷积率为rates = 2*(1,2,4) = (2,4,8)。所以空洞卷积率数是Multi-grid和rate参数的乘积。注意这个规则仅仅在串行的Mutli-grid有用,在ASPP中不需要相乘。

语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第11张图片

以上是串行的DeepLab v3,都是基于ResNet的基础上进行的。接下来,介绍一下并行的DeepLab v3版本,这里的并行版本是在保留block4的基础上,加入了ASPP模块。网络结构如下:

语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第12张图片

  • 相比于DeepLab v2,v3在ASPP中应用了BN层。这里的ASPP中的空洞卷积率不需要做变换(不用乘Multi-grid)。值得注意的是,作者在ASPP中加入了全局池化,这是因为作者发现空洞卷积率太大,效果就接近1x1卷积了,起不到增大感受野的作用,所以作者增加了一个分支做全局池化,然后在上采样回原来的尺度。
  • DapLab v3+

DeepLab v3+ 就是v3的改进版,主要体现在以下三点:

  1. 主干网络是微软的可变形卷积思想改造的Xception
  2. 增加了decoder部分,融合更加底层的特征以补充细节信息
  3. 使用深度可分离卷积改造ASPP和decoder部分,减少计算量

下图左侧是v3的结构,中间是U-Net风格的编解码结构,最右侧就是DeepLab v3+的结构。和v3相比,v3+融合了一次底层特征图。

语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第13张图片
更详细的结构如下:
语义分割网络总结:FCN、SegNet、U-Net、PSPNet、RefineNet到DeepLab v1~v3+_第14张图片

学习参考

[1] https://blog.csdn.net/qq_18293213/article/details/79882890
[2] https://blog.csdn.net/caicai2526/article/details/79984950
[3] https://blog.csdn.net/yuanlulu/article/details/88930810
[4] https://www.tinymind.cn/articles/410?from=articles_commend
[5] https://blog.csdn.net/zhuzemin45/article/details/79709874
[6] https://blog.csdn.net/Formlsl/article/details/80373200
[7] https://blog.csdn.net/yuanlulu/article/details/88930810
[8] https://www.jianshu.com/p/f7457d9380ad

你可能感兴趣的:(深度学习,计算机视觉)