deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation

  • 摘要
  • 引言
  • 相关工作
  • 方法
    • 带孔卷积提取精细特征
    • 深入了解带孔卷积
      • 多网格方法
    • 带孔空间金字塔池化
  • 实验验证
    • 训练规定
    • 深入带孔卷积
    • 带孔空间金字塔池化
  • 总结

摘要

本文中,我们再次讨论带孔卷积,一个调整卷积核感受野的强大工具,并且可以控制深度卷积神经网络计算得到特征的分辨率,应用在图像语义分割上。为了处理在多尺度条件下的语义分割难题,我们设计了串行和并行的带孔卷积模块,采用多种不同的孔洞步长来获取多尺度的内容信息。除此之外,我们还提出了多层级空间金字塔式孔洞池化模块,挖掘多尺度卷积特征,以及编码了全局内容信息的图像层特征,提升分割效果。我们还详细阐述了实施细节,并分享了我们训练自己系统的经验。我们提出的“deeplabv3”系统比起我们以前的deeplab版本有了显著的提高,在没有使用全连接条件随机场做后置处理的情况下达到媲美与其他模型在PASCAL VOC 2012图像语义分割的性能。

引言

对于语义分割的任务[ 20, 63, 14,97, 7 ],我们考虑应用深度卷积神经网络 (DCNNs)的两个挑战[50]。第一个是连续池化操作或者步长大于一的卷积引起的特征分辨率减少,这些操作可以使得深度卷积神经网络可以学习到越来越多的抽象特征表示。然而,这对局部图像变换的不变性可能妨碍精细的预测任务,这种任务需要详细的空间信息。为了克服这个问题,我们提倡使用带孔卷积[ 36, 26, 74,66 ],这种方法已被证明在图像语义分割中很有效[ 10, 90, 11 ]。带孔卷积,也被称为扩张卷积,使我们能够通过去除最后几层的下采样操作和相应的上采样filter重新调整ImageNet [ 72 ] 之前训练好的网络来提取出更精细的特征映射,这就相当于在卷积核各个权重之间插入孔洞。使用带孔卷积,能够在深度卷积神经网络不需要学习额外的参数的情况下控制特征映射的分辨率。
另一个困难来自于如何获取尽可能多的目标的总体特征和细节特征,即不同尺度下的特征。已经提出了几种方法来处理这个问题,本文中我们主要提出四个方法,如图2所示。首先,DCNN是应用于图像金字塔从而在每个输入的尺度下提取特征[ 22, 19, 69,55, 12, 11 ],不同特征映射、不同尺度下目标都很突出。第二、编码器解码器结构[ 3, 71, 25,54, 70, 68,39 ]在编码器部分就利用起多尺度的特征,解码器部分恢复图像同时保证空间分辨率。第三,用额外添加的模块级联在原来的网络上,从而捕获长跨度的信息。特别是,DenseCRF [ 45 ]用来编码相连像素的相似性[ 10, 96, 55,73 ],而[ 59, 90 ]开发了几个额外的卷积层级联处理,从而逐步捕获长范围上下文信息。第四,空间金字塔池化[ 11, 95 ]探索了用有着多种步长、多种有效感受野的filters或者池化操作处理输入特征映射,从而多尺度条件下捕获目标。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第1张图片
在这项工作中,我们重新研究带孔卷积的应用,在级联模块和空间金字塔池化的框架下,使我们能够有效地扩大filter的视野,以组合多尺度的图片信息。特别是,我们提出的带孔卷积模块中多种孔的步长和批次归一化层,发现在训练中也非常重要。我们的实验按级联或并行排列模块(特别实验了带孔的空间金字塔池化(ASPP)方法[ 11 ])。我们讨论一个重要的现实问题,当应用3×3带孔卷积时孔的步长非常大的时候,因为图像边界的影响就不能捕捉到长跨度的信息,事实上会退化为1×1的卷积,并提出将图像级特征纳入ASPP模块。此外,我们分享了精心设计的一些技术细节和模型的训练经验,包括简单而有效的自助抽样法处理标签稀少和标签精细对象。在最后,我们提出的“DeepLabv3”模型,超越了我们以前的工作[ 10, 11 ],并且在没有使用DenseCRF做最后的处理的情况下在PASCAL VOC 2012的测试集上达到了85.7%的正确率。

相关工作

从最近的像素级的分类上可以看出全局特征或上下文的相互作用[ 33, 76, 43,48, 27, 89 ]对语义分割有好处。本文中,我们讨论了全卷积网络(FCNs)的四种方法[ 74, 60 ](见图2说明)来获取语义分割中的上下文信息[ 30, 15, 62、9, 96, 55、65, 73, 87 ]。
图像金字塔:相同的模型,共享的权重,适用于多尺度输入。特征响应
在小尺寸输入时编码成长跨度的上下文,而大尺寸的输入还保存着小物体的细节。典型的例子有Farabet,它将输入图像通过一个金字塔结构的拉普拉斯算子,将每个尺寸的输入送到深度卷积神经网络中然后将多尺度的特征映射融合起来,利用多尺度输入把结果做到由粗到精,直接改变输入图像大小为特定的几个尺寸然后融合所有尺寸得到的特征。这种模型的主要缺点就是它在更大更深层的深度卷积神经网络中适应的不够好(例如,像[ 32, 91, 86 ]中的网络),受限于有限的GPU内存,这种方法主要应用在推理阶段。
编码解码方式:这种模型包括两部分:(1)编码部分将特征映射的空间维度逐渐减小因此更长跨度的信息会更容易被捕捉到在更深的编码输出中,(2)解码部分物体的细节和空间维度逐渐被恢复。例如,[ 60 , 64 ]使用反卷积[ 92 ]来学习低分辨率的特征响应的上采样。SegNet在编码阶段为池化做索引然后重复使用,并且学习额外的卷积层来使特征响应更加精细。U-Net则在编码特征到响应的解码操作之间添加了跳跃连接,并且使用了金字塔结构的拉普拉斯算子重新架构网络。更近的例子有,RefineNet [ 54 ]和 [ 70 , 68 , 39 ]已经证明了基于编码解码结构的模型在几种语义分割基准上的有效性。这种模型在目标检测上也有研究。
上下文模块:为了编码长跨度的上下文信息,这种模型包括级联的额外模块。其中一个有效的方法是加入一个全连接条件随机场(有效的高维滤波算法)到深度卷积神经网络之后。除此之外,[ 96 , 55 , 73 ]提出联合训练条件随机场和深度卷积神经网络部分,[ 59 , 90 ]使用几个额外的卷积层在深度卷积神经网络的结果映射之上(结果映射是深度卷积神经网络最后的特征映射包含的输出通道和预测的种类数量相等)来捕获上下文信息。最近,[ 41 ]提出学习一个普遍又稀疏的高维卷积(双边卷积),[ 82 , 8 ]将高斯条件随机场与深度卷积神经网络相结合来处理语义分割。
空间金字塔池化:这种模型使用空间金字塔池化方法捕获上下文信息在几个层面。ParseNet研究了图像级别的特征包含全局上下文信息。DeepLabv2提出带孔卷积空间金字塔池化方法(ASPP),并行的带孔卷积层用不同的步长捕获多尺度的信息。最近,金字塔型场景分解模型(PSP)在几个栅格尺度下执行空间池化而且在几种语义分割基准上证明有突出的表现。还有其他基于LSTM方法收集全局上下文信息。空间金字塔池化也被应用在目标检测上。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第2张图片
本文中,我们主要探索带孔卷积作为一个上下文模块和一个空间金字塔池化的工具。我们提出的框架是在各种场景中通用的,可以被应用在任何网络当中。具体来说,我们复制了几个最初的ResNet的最后部分然后把它们级联在一起,而且也再次使用了包含几个并行的带孔卷积ASPP模块。注意我们级联的模块被直接应用在特征映射上而不是结果映射。对于提出的模块,我们经验化地发现批次正规化训练非常重要。为了更进一步捕获全局上下文,我们提出增加ASPP带有图像级别的特征,与[58, 95]相似。
带孔卷积:基于带孔卷积的模型已经在语义分割领域被研究很多了。例如,[85]修改孔洞步长对捕获长跨度信息影响的实验。[84]在ResNet的最后2块采用混合孔洞步长,而[18]进一步提议学习可变形的卷积,对输入特征进行采样加上学习到的偏移,产生带孔卷积。为了进一步提高分割模型的准确率,利用图像标注,利用视频动作,结合深度信息。除此之外,带孔卷积被应用到目标检测上。

方法

在这一章,我们回顾带孔卷积是如何应用到语义分割提取精细特征。之后我们讨论提出的有带孔卷积的模块级联使用还是并行使用。

带孔卷积提取精细特征

深度卷积神经网络(DCNNs)应用在全卷积结构上已经在语义分割中表现的效果卓越。然而,这些网络中连续几层中重复的max-pooling和striding结合的操作大大减小了结果特征映射的空间分辨率,最近的深度卷积神经网络中在每个方向上有32倍的缩小。反卷积层(或转置卷积)已经被使用来恢复空间分辨率。我们建议使用带孔卷积代替上文的操作,带孔卷积最初是为了在“algorithme atrous”高效计算非抽样小波变换而且这种方法在之前的深度卷积神经网络中已经被使用过。
假设2-d信号,针对每个位置i,对应的输出 y,以及filter w,对于输入特征映射x进行带孔卷积计算:

y[i]= k x[i+rk]w[k] 

其中,孔洞步长r 表示对输入信号进行采样的步长,等价于将输入x和通过在两个连续的filters值间沿着各空间维度插入 r−1 个零 值得到的上采样filters进行卷积(因此带孔卷积中法语的trous在英语中意思是holes)。标准卷积即是一种r = 1的特殊形式,而且带孔卷积允许我们通过改变步长的值,来修改卷积核的接受野,如图片1所示。
带孔卷积也允许我们明确控制全卷积神经网络计算的特征紧凑程度。这里,我们把输入图像空间分辨率与输出图像分辨率的比值记为输出步长。深度卷积神经网络在执行图像分割的任务时,最终的特征响应(在全连接或者全局池化之前)和输入图像维度相比缩小了32倍,因此输出步长为32。如果想要在深度卷积神经网络计算的特征响应上使空间分辨率加倍(输出步长为16),最后一个池化或者卷积层这种减小分辨率的操作的步长设置为1来避免信号的丢失。然后,所有随后的卷积层被步长r = 2的带孔卷积层替换掉。这就允许我们在不需要学习任何额外的参数的情况下得到更精细的特征响应。请参考[11] 获得更多的细节。

深入了解带孔卷积

首先我们探索带孔卷积模块串行级联的设计。具体来说,我们复制几份ResNet最后模块的拷贝,在图3中记为模块4,并且将他们级联起来。在这些模块中有三个3×3的卷积,而且除去最后一个模块之外,所有的卷积最后一步步长为2,与初始的ResNet相似。这个模型的目的是介绍striding这种操作使得在更深模块中捕获长跨度的信息很容易。例如,整个图像的特征可以被集中在最后一个小分辨率的特征映射当中,正如图3(a)中展示的那样。然而,我们发现连续的striding操作对于语义分割是有害的(详见第四章的表1)因为细节信息被损伤了,因此我们应用步长确定的带孔卷积,按照输出步长的要求而设计,如图3(b)中展示的,这里输出步长为16。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第3张图片
在这个模型当中,我们实验了级联ResNet到第7个模块(额外的模块5,模块6,模块7是由模块4复制而来),在没有使用带孔卷积的情况下它的输出步长是256。

多网格方法

受多网格方法的驱动,使用不同尺寸网格的集合[4, 81, 5, 67],参考了[84, 18]两篇论文,我们在模型中对模块4到模块7采用不同的孔洞步长。特别是,我们定义了Multi_Grid = ( r1, r2, r3),对于从模块4到模块7每个模块有着独立的单元步长。最终的带孔步长对于卷积层来说与单元步长和对应的步长相乘的值相等。例如,当输出步长为16,Multi_Grid = (1,2,4),模块4中三个卷积的步长将会分别等于2×( 1,2,4 ) =(2,4,8)。

带孔空间金字塔池化

我们回顾之前提出的带孔空间金字塔池化,四个并行的带孔步长不同带孔卷积被应用在特征映射之上。ASPP是被空间金字塔池化[28, 49,31] 的成功而想到的,空间金字塔池化在用不同尺度重复采样特征提高精确率方面是有效的而且任意的尺度都对分割很有效果。与之前的ASPP不同,本文我们的ASPP加入了批次归一化。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第4张图片
具有不同的孔洞步长的ASPP对捕获多尺度信息很有效果。然而,我们发现随着采样率的提高,有效的filter权重(即有效特征区域,而不是补零区域的权重)却在变小。这种影响如图4所示,当把一个3 × 3 的filter用不同的带孔步长应用到65 × 65的特征映射当中。在极端情况下,步长增大到接近特征映射的尺寸,该 3×3 的filter 不能捕获整个图像内容,而退化成了一个简单的 1×1 filter, 因为只有中心 filter 权重才是有效的。
针对上面的问题,并将全局内容信息整合进模型中,我们采用图像级特征。特别是,我们应用了全局平均池化处理模型的特征映射,将得到的图像级特征输入到一个有256个filter的 1×1 卷积(加入批次归一化)中,然后将特征进行双线性上采样(bilinearly upsample)到特定的空间维度。最后,我们的改进的ASPP由一个 1×1 卷积,和三个 3×3卷积组成,步长为(6,12,18),输出步长为16(所有的filter个数为256,并加入批次归一化),如图5所示,(b)是图像级的特征。 需要注意的是,当输出步长为8时,步长将加倍。所有分支处理好的特征将会连接在一起通过另一个 1×1 卷积(也有着256个filter,加入批次归一化),最后还有一个 1×1 卷积产生最终的分类。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第5张图片

实验验证

我们采用了在ImageNet上预训练的语义分割模型ResNet为框架,应用带孔卷积获取精细特征。回顾一下,输出步长定义为输入图像空间分辨率与输出分辨率的比值。例如,当输出步长为8的时候,最后两个模块(模块3和模块4先固定)在原来的ResNet中分别加入步长为2和步长为4的带孔卷积。我们在Tensorflow中实验。
我们在包含20个前景目标类别和1个背景类别的PASCAL VOC 2012语义分割基准上测试了本文的模型,初始的数据集包括1464个训练集,1499个验证集,和1456个测试集,这些图片都有像素级的标注,数据集经过[29]的额外标注,现在有10582个训练图片。评价方法是计算平均21类的预测像素的准确率(IOU),即模型产生的目标窗口和原来标记窗口的交叠率。具体计算方法为:检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集。

训练规定

这部分我们讨论训练遵守的一些细节。
学习率公式:与[58,11]相似,我们使用一个叫做“poly”的学习率公式,初始的学习率与 (1itermax i ter ) power   相乘, power  = 0.9。
裁剪尺寸:根据最开始的训练规定[10,11],每一批图片在训练之前都要裁剪。为了步长较大的带孔卷积能够发挥效果,需要裁剪出比较大的图片;否则的话,filter的权重将会主要乘在补零的区域中。因此我们使用513作为采集爱你尺寸在训练和测试PASCAL VOC 2012数据集的时候。
批次归一化:我们在ResNet上加入的模块都有批次归一化参数,我们发现这在训练中很有用。因为训练批次归一化参数需要每批的图片比较多,我们令输出步长为16。批次归一化参数训练得到衰减为0.9997。初始学习率为0.007,在训练集上训练3万次之后,我们固定了批次归一化参数,使用输出步长为8的时候,我们用小一点的初始学习率0.001,在离线的PASCAL VOC 2012 trainval上又训练了3万次。注意带孔卷积允许我们在不同的训练阶段控制输出步长的值,不需要学习额外的模型参数。还有注意当输出步长为16时训练速度要比输出步长为8时快好几倍因为中间的特征映射小了4倍,但是输出步长为16时特征映像会更粗糙,牺牲了精确率。
上采样预测结果:在我们之前的工作中,输出步长设置为8时,目标的真实结果被下采样了8倍。我们发现使真实结果保持原来的尺寸非常重要,因此需要上采样我们预测的结果,因为下采样真实结果会除去掉没有反向传播的很好的标注细节。
数据扩张:我们通过随机缩小或者放大输入图片(从0.5倍到2倍)和训练时随机左右反转图片来使数据扩张。

深入带孔卷积

首先我们实验了将更多的带孔卷积模块级联起来的效果。
ResNet-50:在表1,我们实验了输出步长改变对结果的影响。我们使用有7个模块的ResNet-50实验。正如表中所示的。当输出步长为256时(这时没有任何带孔卷积),因为信息的丢失,预测结果的表现比对照组差很多。当输出步长从256变到8的过程中,应用带孔卷积时,准确率就从20.29%提升到了75.18%,说明带孔卷积在语义分割中级联更多模块时非常重要。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第6张图片
ResNet-50与ResNet-101对比:我们将ResNet-50换成更深的网络ResNet-101,改变了级联模块的数量。正如表2所示,随着级联更多的模块,准确率越来越好,但是效果提升速度是在下降的。注意,使用7模块稍微降低了ResNet-50的表现,但对于ResNet-101的结果还是有提高的。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第7张图片
多网格:我们在ResNet-101上对几个级联的添加模块应用多网格方法,如表3所示。单元步长,Multi_Grid = ( r1, r2, r3)被应用在所有添加的模块当中。正如表中所示,我们观察到使用多网格方法普遍比原来要好,单纯地加倍单元步长没有效果,同样使用多网格方法随着网络变深,效果也更好。我们最好的模型是7层( r1, r2, r3)=(1,2,1)。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第8张图片
在验证集上测试推广的策略:开始模型是在输出步长为16的基础上训练的,之后我们推断,用输出步长为8可以得到更多的特征映射的细节。如表4所示,当输出步长为8时,我们用之前表现最好的级联结构,7层( r1, r2, r3)=(1,2,1),准确率比步长为16时提高了1.39%。加入缩小放大输入图片和左右翻转图片的操作之后,准确率进一步提高(放大比例有{0.5, 0.75, 1.0, 1.25, 1.5, 1.75})。特别地,我们将多个尺度和翻转图像计算出的平均值作为最终的计算结果。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第9张图片

带孔空间金字塔池化

之后我们实验了实验了带孔空间金字塔池化(ASPP)模型,和之前模型的主要区别是这次我们使用了调好的批次归一化参数和图像尺度的特征。
ASPP:在表5中,我们实验了在第4模块包含多网格操作和图像级别特征的ASPP模型。首先我们固定ASPP =(6,12,18)(即在三个并行的3×3 带孔卷积分支规定步长分别为(6,12,18)),改变多网格的值。Multi_Grid = ( 1,2,1)的结果比Multi_Grid = ( 1,1,1)要好,不过这种步长下最好的Multi_Grid = ( 1,2,4)。如果再加一个并行的步长为24的带孔卷积层来获取更大范围的上下文信息,准确率会稍微降低到0.12%。另一方面,在ASPP模型上加入图像级别的特征是有效的,最终准确率达到了77.21%。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第10张图片
在验证集上测试推广的策略:相似的,我们将模型的输出步长改为8。如表6所示,准确率增加了1.3%,加入缩小放大输入图片和左右翻转图片的操作之后,准确率进一步提高了0.94%和0.32%,ASPP最好的模型准确率为79.77%,比级联带孔卷积模型的最优值更高,因此选择ASPP作为我们最终的模型。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第11张图片
和DeepLabv2对比:v3的级联模型和ASPP模型在PASCAL VOC 2012的验证集上表现都要比v2好,提升主要来自增加了调好的批次归一化参数和更好地编码多尺度上下文信息。
测试集上的结果和有效的自助抽样法:我们注意到PASCAL VOC 2012数据集提供的标注信息比增加的数据集要更有质量,特别是自行车这一类。因此我们在测试集上测试之前先在PASCAL VOC 2012的训练集和验证集上进一步微调我们的模型。我们的模型是在输出步长为8的情况下训练的(因此标注细节得以保留),批次归一化参数固定。除此之外,与[85,70]的pixel
hard example mining方法不同,我们用自助抽样法处理不好训练的图片。特别是,我们在训练集中复制了一些图片,包含的类别不好训练(自行车,椅子,桌子,盆栽和沙发)。如图7所示,自助抽样法对分割自行车很有效。最后,DeepLabv3在没有用全连接条件随机场预处理的情况下达到了85.7%的准确率,见图7。
deeplab v3论文翻译 Rethinking Atrous Convolution for Semantic Image Segmentation_第12张图片
在JFT-300M上预训练模型:收到[79]最近工作的启发,我们进一步使用了已经在ImageNet和JFT-300M数据集上预训练的ResNet-101模型,结果在PASCAL VOC 2012的测试集上达到了86.9%的准确率。

总结

我们的DeepLabv3模型使用了有着上采样filter的带孔卷积,来使特征映像更精确、捕获长跨度的上下文信息。特别是为了编码多尺度的信息,我们提出了级联模块使孔洞步长加倍,我们的带孔空间金字塔池化模型增大了图像级别的特征,探索filters的多个采样率和感受野。我们的实验结果表明DeepLabv3相较于之前的DeepLab模型有了极大的提高,达到媲美与其他模型在PASCAL VOC 2012图像语义分割的性能。

你可能感兴趣的:(deeplab,aspp,带孔卷积,语义分割,atrousconv)