之前的系列
DeepLabv1:使用了空洞卷积以及全连接的条件随机场CRF
DeepLabv2:延续了v1版本,又提出了ASPP(空洞卷积金字塔池化模块)
之后的版本
DeepLabv3+:
Abstract
首先回顾了空洞卷积。为了解决多尺度分割对象的问题,设计了采用级联或者并行的方式,且带有不同膨胀系数的空洞卷积模块,来更好的获取上下文信息。此外,文章还增强了v2中提出的ASPP模块,放弃了DenseCRF的后处理步骤。
1 Introduction
提出问题及解决方案
(1)连续的池化或者增加卷积层步长的操作会使得特征图分辨率越来越小,网络学习的特征更加抽象化,这就不利于像语义分割这种需要详细空间信息的密集型预测任务。作者使用空洞卷积解决。
(2)物体的多尺度。解决该问题的方法主要分为4类:第一类,将DCNN应用与图像金字塔,以提取物体在不同尺度下的特征;第二类,应用encoder-decoder架构,利用encoder的多尺度特征信息并在decoder中恢复空间分辨率;第三类,在DCNN后应用额外的模块,例如DenseCRF;第四类,应用空间金字塔池化层获取输入特征的多尺度信息。如下图所示。图(a),(b),(d)分别对应第一、二、四类解决方案。
对ASPP模块的改进:结合不同膨胀系数的空洞卷积,还加入了BN层;作者发现使用较大膨胀系数的3×3空洞卷积会由于图像边界效应,丢失长距离信息,所以就退化为使用1×1卷积,还将图像级特征融合如ASPP模块中。
2 Related Work
论文介绍了四种利用上下文信息进行语义分割的FCN,如上图所示。
(1)图像金字塔(Image pyramid):缺点就是会受到GPU内存的限制,较大较深的CNN不方便使用;
(2)Encoder-decoder:由编码器(特征图的尺寸逐渐减少,更容易捕获长范围内的信息)和解码器(目标细节和尺寸逐渐恢复)组成,如SegNet,UNet等;
(3)上下文模块(Context module):包含了额外的模块,采用级联的方式,用来编码远距离上下文信息,如DenseCRF。
(4)空间金字塔池化(SPP):可以在多个范围内捕捉上下文信息。
3 Methods
3.1 Going Deeper with Atrous Convolution
在以ResNet为backbone中,(a)和(b)中的block都是从ResNet的后几层复制来的block。从上图(a)可以看出是没有用到空洞卷积的,随着网络的加深,输出特征图的分辨率也在下降,最后得到的输出虽然能够获得显著的全局特征,但连续的分辨率下降对于语义分割来说是不好的,它会破坏细节信息。(b)中显示的是在output_stride为16是进行空洞卷积,然后一直保持后面的output_stride一直为16,也就是说通过空洞卷积提取特征使得特征变得dense而分辨率不降低。
经过实验对比,作者发现,当output_stride为8是效果最好。
同时论文还使用了Multi-grid Met hod(多重网格法),定义了(b)中的膨胀系数的大小,在卷积块Block4-Block7之间定义了Multi_grid=(r_1,r_2,r_3 )为单位系数,最后的膨胀系数等于单位系数和相应系数之间的乘积。如当output_stride=16和Multi-grid=(1,2,4)时,三个卷积层在block4中的膨胀系数为2×(1,2,4)=(2,4,8)。
3.2 Atrous Spatial Pyramid Pooling
作者对v2中提出的ASPP进行了改进,增加了BN层。
输入的Image经过多个Block后得到output_stride为16的特征图,然后再经过一个rate为2的空洞卷积,再次经过Block4,然后到达改进的ASPP,改进的ASPP由两大部分组成:
(a)为了包含全局上下文信息,首先对通过backbone的feat_map采用全局平均池化到1×1,再经过256个1×1卷积和BN,然后再上采样到文中所要的空间尺寸。
(b)使用并行的1个1×1卷积和三个3×3且rate为(6,12,18)的空洞卷积,卷积核的个数为256,后面都接上BN层;
把以上两部分的输出都放在list中,然后再将ASPP模块中产生的特征图进行concat,然后经过256个1×1的卷积核和一个BN层,产生最后的输出。
作者也发现原来的ASPP模块,随着膨胀系数的增大,卷积核的有效权值会变少,如考虑膨胀系数于特征图的高宽相近时,那么实际上就只有中央的权值时有效的,如下图: