Abstract

DeepLabV3中,回顾了空洞卷积操作。为了能够分割不同尺度对象,设计了一种级联的方式使用空洞卷积的模块,采用多个空洞率来捕获多尺度的特征。此外,作者建议增强DeepLabV2提出的ASPP模块,能够进一步提高性能。提出的DeepLabV3系统,和之前不做CRF操作的版本相比,效果改善明显。

相较于DeepLabv2的区别:1 . 使用了Mutli grid的级联结构的空洞卷积;2. ASPP增加了1×1的图像级特征;3. 不再使用CRF
总之,新方法永远是效果更好的

1. Introduction

用DCNN完成语义分割任务,有两个挑战。

第一是连续池化和卷积步长,导致特征分辨率降低,使得DCNN能够学习更抽象的特征。但是对局部图像变换的不变性这种优势,不能得到详细的空间信息,会阻碍密集预测任务。空洞卷积,已经证明了可以解决这个挑战,在语义分割上是非常有效的。

第二是对象的尺度不同。作者列了很多参考文献的办法,如下图,列举了很多可以提取多尺度信息的不同流派。一共四种。1 .图像金字塔结构;2.编码解码器; 3.空洞卷积;4.空间金字塔池化。之前的DeepLabv2就使用了ASPP的方法来解决。

在DeepLabv3中,提出了一个同时使用级联模块和空间金字塔的空洞卷积框架,有效地扩大感受野来获取多尺度特征。提出的方法包含:不同空洞率的空洞卷积层,及批量归一化层。文章中讨论了一个实际问题:在使用较大空洞率的3×3大小的空洞卷积时,由于图像边界的影响,卷积无法获得远距离的信息。这时可以这样做:简单用1×1的卷积,并将特征融进ASPP模块中。

2. Related Work

3.Methods

3.1 Atrous Convolution for Dense Feature Extraction

空洞卷积的基础知识,不再讲了。有兴趣去看我之前的三篇文章

3.1 Going Deeper with Atrous Convolution

使用空洞卷积时,网络向更深处时的讨论,这一节只是为了表明,我们为什么要使用空洞卷积

作者像ResNet一样,把DCNN网络用block(每个block包含了卷积和池化)来表示出来。这个网络只是为了说明问题,就是一个示意。

这些block是级联排列的(一个block的输出会成为下个block的输入,和串联的意思差不多)。每个块中都有3个3×3的卷积层。除了最后一个block中的卷积层,其他block中的最后一个卷积层步长设置为2。这样的做的原因是,加入步长可以在更深的block中获取远距离特征。(这里只是说明一下传统的DCNN的网络结构,及设计的理念)。

图(a)表现的是,随着网络层数加深,如果不适用空洞卷积,output_stride是在逐渐变大的(模型输出特征图比原图像逐渐缩小),最终虽缩小至256倍,这对语义分割任务是不利的。如果我们期望output_stride控制在固定值,可以采用空洞卷积。如果我们在block4、block5、block6、block7用空洞卷积(空洞率分别为[2,4,8,16]),就可以将output_stride控制在16倍。

3.2.1 Multi-grid Method多网格方法

一个block中有三层卷积,根据整体的感受野需求,让他们的空洞率都变为(r_1,r_2,r_3)×ratio,ratio就是比例系数

作者受到一些多网格方法(采用不同大小的网格层次结构)的影响,在block4至block7层采用了不同的空洞率。作者定义了一个整体的空洞率设置方式 MultiGrid=(r_1,r_2,r_3),每个block的三个卷积层都这样做。卷积层最终使用的空洞率,将在此基础上乘以一个空洞率比例。

例如,如果最终输出的out_stride是16, MultiGrid=(r_1,r_2,r_3)。那么按照上一节的设置,block4的空洞率为2,所以该block中的三层卷积的空洞率就是2\cdot(1,2,4)=(2,4,8)。block7呢,就是16\cdot(1,2,4)=(16,32,64)

3.2.2 Atrous Spatial Pyramid Pooling

空洞率很大时,空洞卷积核非零的有效权重占比会变小。DeepLab网络层数越深,空洞率会越大,需要做出新的设计——全局平均池化

DeepLabv2中,特征图上使用了4个不同空洞率的平行空洞卷积(空洞率为6、12、18、24)。

具有不同空洞率的 ASPP 能够有效地捕获多尺度信息。然而,作者发现随着空洞率变大,有效滤波器权重的数量(即应用于有效特征区域的权重,而不是填充的零)变小。当将具有不同空洞率的 3 × 3 滤波器应用于 65 × 65 特征图时,现象如下图所示。

图中展示了,在 65 × 65 特征图上使用 3 × 3、2×2、1×1 滤波器,伴随空洞率的变化,有效权重数量归一化后的结果。当空洞率较小时,所有 9 个滤波器权重都应用于特征图上的大部分有效区域,而空洞率变大,3 × 3 滤波器退化为 1×1 滤波器,因为只有中心权重有效。

总结下来,在空洞率值接近特征图大小的极端情况下,3 × 3滤波器并不能捕获整个图像的特征,而是退化为一个简单的1 × 1滤波器,因为只有中心滤波器权重是有效的。

为了克服这个问题,作者提出了全局平均池化(global average pooling)。如下图。

全局平均池化应用在模型的最后一个特征图上,改进的ASPP包含两部分。有个作者的图很清晰,贴在这里,最后附了参考文献。

(a)由一个1×1卷积和三个3 × 3卷积(所有的卷积核都是256个滤波器,卷积后再执行批处理归一化)组成,当输出stride = 16时,空洞率= (6,12,18)

(b)平均池化后,用 256 个1×1的卷积核进行卷积(再batch normalization批量归一化),然后将特征双线性上采样到所需的空间维度

注意,当输出stride = 8时,空洞率要翻倍。来自所有分支的结果特征concat(拍成一个特征),再执行一个1 × 1卷积之前通过另一个1 × 1卷积(也要过256个滤波器和批处理归一化),生成最终的结果。

4. Experimental Evaluation

作者说了,output_stride定义为:输入图像与输出特征的比例

举例子,如果output_stride是8,按照我们符号的定义(看上面那个全局平均池化的图),最后两个块(block3和block4)的整体空洞率比例系数就是2和4。

文章结果是在PASCAL VOC2012语义分割基准上评估的

4.1 Training Protocol

-学习率采用“poly”学习率(DeepLabv2提过)

-训练和测试时将图片裁剪为了513大小

-批量归一化

-上采样结果:保持ground truth的大小,将模型结果上采样至输入大小(而不是ground truth下采样到模型大小,会损失细节信息)

-数据增强:随机将图像缩放0.5倍至2倍,并进行左右翻转

4.2 Going Deeper with Atrous Convolution

作者使用ResNet-50,证明了空洞卷积在语义分割任务上的必要性

用ResNet-50和ResNet-101做了对比实验,证明增加更多的block,会提高性能。*

作者测试出来的最佳模型,使用到block7 和空洞率(r1, r2, r3) = (1, 2, 1) 的情况。

验证集的推理策略:所提出的模型使用output_stride = 16 进行训练,然后在推理过程中,我们应用output_stride = 8 来获得更详细的特征图。如下表所示。有趣的是,在评估output_stride = 8 的最佳级联模型时,性能比output_stride =16提高了1.39%。通过对输入图像进行多尺度缩放(尺度 ={0.5, 0.75, 1.0, 1.25, 1.5, 1.75})和左右翻转后再进行推理,进一步提高了性能。作者计算每个尺度和翻转图像的平均概率作为最终结果

4.3 Atrous Spatial Pyramid Pooling

-ASPP:作者证明了使用 Multi Grid = (1, 2, 1) 优于 Multi Grid = (1, 1, 1),而Multi Grid = (1, 2, 4) 是最好的。ASPP = (6, 12, 18)优于使用(6, 12, 18, 24)(使用DeepLabv2的办法竟然略有下降,这样感觉DeepLabv2实验没做充分呀哈哈)。增加图像级特征(Image Pooling)是有效的。

-验证集的推理策略:使用output_stride = 8,多尺度输入,增加左右翻转,从结果上看被确定为最佳的测试集模型。

-不再使用DenseCRF:DeepLabv3在不使用CRF的情况下,优于DeepLabv2

-模型的不足:沙发与椅子、餐桌与椅子难以区分,视野不足的物体难以区分

-和其他方法比:DeepLabv3结果最优

参考文献

https://zhuanlan.zhihu.com/p/599086298

https://blog.csdn.net/nanzhou520/article/details/134938745