写这篇博客也是想主要梳理一下最流行的几个语义分割网络,并且做一个小总结。接下来将从2014年的FCN到2018年的DeepLabv3+,来描述几个基于FCNs的深度语义分割网络的结构是如何变化。
- 值得注意的是语义分割的任务是基于像素点的密集预测任务,其目的是将输入图像的每个像素分配一个语义类别。
在之前基于CNN的分割网络中存在两个问题:
FCNs网络,以VGG16为backbone,去掉了最后的全连接层(fc6和fc7)转换为卷积层,以生成一个低分辨率的特征图,然后用双线性初始化的饭卷积,并在上采样的每一个阶段采用skip-connection的方式融合(求和)VGG16中的低层信息(conv4、conv3)的更加粗糙但是分辨率更高的特征图进一步融合多尺度信息。如下图所示,FCN-8s 融合了不同粗糙度(conv3、conv4和fc7)的特征,利用编码器不同阶段不同分辨率的空间信息来细化分割结果。
SegNet的新颖之处在于解码器(Decoder)对其低分辨率的输入特征图进行 上采样 的方式。具体地说,解码器使用了在相应编码器(Encoder)的最大池化步骤中计算的池化索引来执行非线性上采样。这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用的可训练的卷积核进行卷积操作,生成密集的特征图。
SegNet的关键优势:
PSPNet利用不同区域的上下文信息集合,通过设计的金字塔池化模块,来充分的利用全局上下问信息。
PSPNet的关键优势:
RefineNet是一个通用的多路径优化网络,它明确利用了整个下采用过程中可用的所有信息,使用远程残差连接实现高分辨率的预测。通过这种方式,可以使用早起卷积中的细粒度特征(low-level)来直接细化捕捉高级语义特征(high-level)的更深的网络层。RefineNet的各个组件使用遵循恒等映射思想的残差连接,这也是的网络能够更有效的端到端训练。
RefineNet解决了传统卷积网络中的空间分辨率减少的问题,与PSPNet(使用计算成本高的空洞卷积)使用方法不通。提出的架构迭代地池化特征,利用特殊的RefineNet模块增加不同的分辨率,并最终生成高分辨率的分割图。其关键特点如下:
语义分割是一种对每个像素进行分类的密集预测,而普通的分类神经网络具有平移不变性,对位置不敏感,而且降采样过程会损失空间信息,不利于分割结果输出。然而分类网络不停的降采样,也是为了增加感受野,提高更高层的语义。那么有没有办法保存特征图的分辨率而同时增加感受野呢?DeepLab就采用了空洞卷积(或带孔卷积)。
谷歌的DeepLab系列是语义分割中非常重要的存在。目前一共出了四个版本。为了让大家更好地、有逻辑性地熟悉语义分割中重要的DeePLab系列网络,在这里将DeepLab系列网络放在一起讲解。
使用空洞卷积的使用,可以服从之前与训练的分类网络,把后面几层的下采样去掉,复用后面几层的卷积参数,卷积方法改为空洞卷积。这样网络最后输出的特征图分辨率提高了,感受野也增加了。下图从左到右,主要在DCNN中应用了空洞卷积密集的提取特征,左边输出步幅是16,需要上采样16倍得到预测结果,可以看到结果是比较模糊的;而右边是在DCNN中使用空洞卷积,保持步幅为8,只需要上采样8倍,结果清晰了很多。
DeepLab v1是在VGG16的基础上做了一下的修改:
DeepLab v1的空洞卷积是串行的。v2采用了一个ASPP模块改为并行使用,每个分支才用不同rate(获得不同的感受野),已解决多尺度问题。同时v2也保留了CRF作为后处理手段。
v2相对于v1的改进:
DeepLab v3 第一感觉就是空洞卷积串行和并行方法的一个结合,在细节之处(BN和rate)有所改进。v3在论文中讨论了并行(ASPP)和串行的两种风格的网络,通过实验对比发现并行的效果更好,所以后来再提到DeepLab v3世纪说的ASPP风格的那个版本。
为了解决多尺度的问题,作者做了两种尝试:在串行网络结构中依次使用double空洞卷积率;以及在ASPP网络结构中加入了全剧池化和多种空洞卷积分支平行计算再融合
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中不需要相乘。
以上是串行的DeepLab v3,都是基于ResNet的基础上进行的。接下来,介绍一下并行的DeepLab v3版本,这里的并行版本是在保留block4的基础上,加入了ASPP模块。网络结构如下:
DeepLab v3+ 就是v3的改进版,主要体现在以下三点:
下图左侧是v3的结构,中间是U-Net风格的编解码结构,最右侧就是DeepLab v3+的结构。和v3相比,v3+融合了一次底层特征图。
[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