Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
摘要
空间金字塔池化模块和编码器-解码器结构被应用于深度神经网络来解决语义分割问题。前一种网络通过多系数、多有效感受野的卷积或池化操作来探测输入的特征,从而能够编码多尺度的上下文信息;后一种网络通过逐步恢复空间信息来捕捉更清晰的目标边界。在这项工作中,我们提出了一个结合两者优点的方法。特别地,我们提出的办法,DeepLabv3+,通过添加一个简单而有效的解码器模块来扩展DeepLabv3,从而优化分割结果,特别是优化目标边界。在此基础上,我们进一步研究了Xception模型,并将深度可分离卷积应用于空间金字塔池和解码器模块,获得了一个速度更快,性能更高的编码器-解码器网络。我们在PASCAL VOC 2012和Cityscapes数据集上验证我们提出模型的有效性,在没有后处理的情况下在测试集上分别取得了89.0%和82.1%的成绩。我们的论文伴随着一个基于Tensorflow框架开发的公开的参考实现模型,地址是https: //github.com/tensorflow/models/tree/master/research/deeplab.
关键词:图片语义分割,空间金字塔池化,编解码解码器,深度可分卷积。
1.简介
语义分割的目标是为图像中的每个像素分配语义标签,是计算机视觉的基本主题之一。基于全卷积网络的深度卷积网络,在分割任务上展示出对依赖手工特性的系统的显著提升。在这项工作中,我们考虑了两种类型的神经网络,他们使用空间金字塔池化模型或编码器-解码器结构进行语义分割。前一种通过对不同分辨率的特征进行池化来获取丰富的上下文信息,后者能够获得清晰的目标物体边界。
为了捕捉多尺度的上下文信息,DeepLabv3应用了多个并行的带有不同系数的空洞卷积(叫做空洞空间金字塔池化或ASPP),而PSPNet在不同网格尺度上执行池化操作。尽管在最后的feature map中编码了丰富的语义信息,但由于骨干网络中使用跨步的池化或卷积,丢失了与对象边界相关的详细信息。这可以通过应用空洞卷积提取更密集的特征图来缓解。然而,鉴于目前最先进的神经网络设计和有限的GPU内存,提取比输入分辨率小8倍甚至4倍的输出特征图在计算上是不允许的。以ResNet-101为例,当应用空洞卷积提取比输入分辨率小16倍的输出特征时,最后3个剩余块(9层)中的特征必须被放大。更糟糕的是,如果想要输出比输入小8倍的特性,26个剩余块(78层!)将受到影响。因此,如果为这类模型提取较密集的输出特征,则计算强度较大。另一方面,编码器-解码器模型使编码器路径的计算速度更快(因为没有特征被放大),并逐渐恢复解码器路径中的锐利对象边界。试图结合两种方法的优点,我们提出在编码器-解码器网络中加入多尺度上下文信息来丰富编码器模块。
特别地,我们提出的模型,称为DeepLabv3+,通过添加了一个简单有效的解码器模块来恢复目标物体边界,扩展了DeepLabv3,如图1所示。在DeepLabv3的输出中编码了丰富的语义信息,通过空洞卷积来控制编码器密度,这取决于预算的计算资源。此外,解码器模块允许详细的目标对象边界恢复。
受到最近深度可分离卷积成功的启发,我们同样研究了这项操作,采用Xception模型进行语义分割,并将空洞可分离卷积应用于ASPP和解码器模块,其在速度和准确率两个方面都有提升。最终,我们在PASCAL VOC 2012数据集和Cityscapes数据集上验证了提出模型的有效性,在没有后处理的情况下,在测试集上的性能达到了89.0%和82.1%,实现了新的记录。
总结一下,我们的贡献如下:
我们提出了一个先进的编码器-解码器结构,其中使用DeepLabv3作为编码器,使用一个简单有效的模型作为解码器。
在我们的结构中,人们可以任意地通过卷积来控制所提取的编码器特征的分辨率,以平衡精度和运行时间,这在现有的编码器-解码器模型中是不可能的。
我们在语义分割任务中采用了Xception模型,并且将深度可分离网络应用于ASPP模块作为解码器模型,得到了一个速度快,性能高的编码器-解码器结构。
我们提出的模型在PASCAL VOC 2012和Cityscapes数据集上取得了领先的表现。我们还提供详细的设计选择和模型分析。
我们将我们的方法基于Tensorflow进行了实现,并发布于https: //github.com/tensorflow/models/tree/master/research/deeplab.
2.相关工作
基于全卷积网络(FCNs)的模型在数个分割数据集上取得了显著的提升。有数个模型变体被提出来利用上下文信息进行分割,包括使用多尺度输入的(例如图片金字塔),或者采用概率图模型的(例如DenseCRF等具有高校推理的算法)。在本文中,我们主要讨论了使用空间金字塔池和编码器-解码器结构的模型。
空间金字塔池化:例如PSPNet或DeepLab的模型在几个网格尺度上执行空间金字塔池化(包括图片级别池化)或者应用几个并行的带有不同系数的空洞卷积(叫做空洞空间金字塔池化,或ASPP)。利用多尺度信息,这些模型在多个分割数据集上都显示了良好的效果。
编码器-解码器模型:编码器-解码器网络被成功应用于许多计算机视觉任务,包括人体姿态评估,目标检测和语义分割。通常,编码器-解码器结构包含(1)一个编码器模型,用于减少特征图数量并且捕捉高维度语义信息。(2)一个解码器模型用来恢复空间信息。基于这个想法,我们提出了DeepLabv3作为编码器模型,同时增加一个简单有效的解码器模型来获得更尖锐的分割。
深度可分离卷积:深度可分离卷积或者分组卷积是一种有效的减少计算量和参数量的卷积方式,同时可以保持相同(或略微提升)的性能。这种操作已经被应用于很多神经网络的设计工作中去。特别的是,我们对Xception模型进行了探索,类似于其他工作在COCO 2017检测挑战时的做法,其在语义分割任务的准确率和速度上都有了提高。
3.方法
在这一章,我们简短地介绍空洞卷积核深度可分离卷积。然后在讨论我们提出地解码器模型之前,回顾一下作为编码器地DeepLabv3。我们同样也介绍了修改后的Xception模型,其能够有效提升性能和计算速度。
3.1带有空洞卷积的编码器-解码器模型
空洞卷积:空洞卷积,一个强大的工具允许我们显示地控制由深度卷积网络计算的特征分辨率,并调整卷积核的感受野以获取多尺度信息,推广了标准卷积操作。在二维信号中,对于输出特征图y上的每一个位置i和卷积核w,空洞卷积应用于输入特征映射x,所示如下:
其中空洞系数r决定了我们对输入信号进行采样的步长。感兴趣的读者可以阅读文献39了解更多的细节。值得注意的是,标准卷积是系数r=1时的一种特殊情况。卷积核的感受野可以通过改变系数值进行自适应的修正。
深度可分离卷积:深度可分离卷积,将一个标准卷积分解成一个深度卷积伴随着一个点卷积(例如1*1卷积),大大地降低了计算复杂度。具体地说,深度卷积对每个输入通道独立地执行空间卷积,然后用点卷积对深度卷积的输出进行合并。在TensorFlow中可以实现深度可分离卷积,在深度卷积(空间卷积)中已经支持了空洞卷积,如图3所示。在这项工作中,我们把这个卷积成为空洞可分离卷积,发现空洞可分离卷积在保持相似(或更好)性能的同时,可以有效地减少计算复杂度
用DeepLabv3作为编码器:DeepLabv3使用空洞卷积来提取由深度卷积神经网络计算的任意分辨率的特征。这里,我们将输出步幅表示为输入图像空间分辨率与最终输出分辨率的比值(在全局池化或全连接层之前)。对于图片分类任务,最终特征图的空间分辨率通常比输入图像分辨率小32倍,因此输出步幅为32。对于语义分割任务,通过去除最后一个(或两个)块中的大步,并相应的应用空洞卷积(我们采用rate=2和rate=4分别在最后两个块上,最后的输出步长为8),可以采用输出步长为16(或8)来进行更密集的特征提取。此外,DeepLabv3增强了空洞空间金字塔池化模块,该模块通过应用不同系数的空洞卷积来探测多个尺度的卷积特征,具有图像级特征。在我们提出的编码器-解码器结构中,我们使用在logits之前最后一个特征图作为编码器输出。注意编码器输出特征图包含256个通道和丰富的语义信息。此外,通过应用空洞卷积,我们可以以任意的分辨率提取特征,当然这也取决于计算资源预算。
提出的解码器:来自于DeepLabv3的编码器特征图通常输出步长16进行计算。在文献23的工作中,特征是由因子为16的双线性插值采样得到,这可以被我们认为是一个简单的解码器模型。然而,这个简单的解码器模型可能并不能成功地包含目标物体分割细节。因此我们提出了一个简单有效的解码器模型,如图2所示。首先对编码器特征进行参数因子为4的双线性插值上采样,然后与来自具有相同空间分辨率的骨干网络的相应低阶特征连接(例如ResNet-101中的Conv2。我们使用另一个1*1的卷积在低分辨率特征上来减少通道的数量,因为相应的低阶特征通常包含大量的通道(例如256或512),这可能会超过丰富编码器特征(在我们的模型中只有256个通道)并使得训练更困难。在进行特征连接之后,我们使用了一些3*3的卷积来细化特征,其后跟随着另一个简单的参数因子为4的双线性插值上采样。在第4章中,我们展示了编码器模块使用输出步幅为16可以在速度和精度之间取得最佳平衡。当编码器模块使用输出步幅为8时,以增加计算复杂度为代价,性能略有提高。
3.2修改Aligned Xception
Xception模型在ImageNet上显示了很好的图像分类效果,计算速度快。最近,MSRA团队改进了Xception模块(叫做Aligned Xception) 进一步提高了在目标检测任务中的性能。基于这些发现,我们朝着同样的方向努力,将Xception模型应用于语义图像分割的任务。特别地,我们在MSRA的修改基础上又做了一些修改,即(1) 更深的Xception与文献31中工作相同,只是我们没有修改入口流网络结构以提高计算速度和内存效率,(2)所有的最大池化都替换成带有步长的深度可分离卷积,这能使我们应用空洞可分离卷积来提取任意分辨率的特征图(另一个选择是将空洞算法扩展到最大池化操作)。(3)每个3*3的深度卷积后面增加BN层和ReLU激活函数,类似于MobileNet的设计,详细信息看图4。
4.实验验证
我们使用ImageNet-1k预训练过的ResNet-101或改进的aligned Xecption通过空洞卷积来提取密集的特征图。我们的实现基于TensorFlow框架并进行开源。
我们提出的方法在PASCAL VOC 2012语义分割数据集上进行验证,该数据集包含20个前景对象类和一个背景类。最初的数据集包含1464(训练),1449(验证),和1456(测试)像素级别注释的图片。我们通过文献76提供的额外注释来增加数据集,得到10582(训练)张训练图片。通过21个类的平均mIoU来衡量性能。
我们遵循与文献[23]相同的训练策略,感兴趣的读者可以阅读文献[23]了解更多的详细信息。简而言之,我们采用相同的学习率策略(例如”poly”策略和相同的初始学习率0.007),裁剪大小是513*513,当输出步长为16时,微调BN层参数,并且在训练时使用随机尺度进行数据增强。注意,我们还在提出的解码器模块中包含了批归一化参数。我们提出的模型是端到端的训练,不需要对每个构件进行分段的预训练。
4.1解码器设计选择
我们定义”DeepLabv3特征图“是由DeepLabv3计算的最后一个特征图(例如包含ASPP特征和图像级特征的特征),[k*k,f]表示为卷积核大小为k*k的k个卷积核。
当使用输出步长为16时,基于DeepLabv3的ResNet-101在训练和验证时双线性插值的上采样参数都为16。这个简单的双线性插值上采样可以被认为是一个原始的解码器设计,其训练时在PASCAL VOC 2012验证集上得到了77.21%的性能,比没有使用该原始解码器提升了1.2%(例如在训练中下采样ground-truth)。为了提升原始网络的性能,我们提出的DeepLabv3+在编码器输入后面加入了解码器模块,如图2所示。在解码器模块,我们考虑了三处不同的设计选择,即(1) 1×1卷积用于减少来自编码器模块的底层特征映射通道数量,(2) 使用3×3卷积获得更清晰的分割结果,(3) 应该使用哪些编码器的低级特性。
为了验证在解码器模块中1*1卷积的有效性,我们使用[3*3,256]在ResNet-101骨干网络中获得Conv2特征,例如在res2x残差模块的最后一个特征图(具体来说,我们在跨步之前使用特征映射)。如表1所示,将编码器模块的低级特征映射通道减少到48或32可以获得更好的性能。我们因此采用[1*1,48]来减少通道数量。
然后我们设计解码器模块的3×3卷积结构,并将结果报告在表2中。我们发现,在将Conv2特征映射(在跨步之前)与DeepLabv3特征映射连接之后,使用256个卷积核的2个3×3卷积比使用简单的1个或3个卷积更有效。将卷积核数量从256改为128或者将卷积核大小从3×3改为1×1会降低性能。我们还对在解码器模块中同时利用Conv2和Conv3特征映射的情况进行了实验。在这种情况下,解码器特征映射逐步进行参数为2的上采样,先与Conv3连接,再与Conv2连接,每一个都通过[3×3,256]操作进行细化。整个的解码过程与U-Net/SegNet设计相似。然而,我们没有观察到显著的改善。因此,在最后,我们采用了非常简单有效的解码器模块:将DeepLabv3特征映射和通道简化后的Conv2特征映射串联起来,并通过两次[3×3,256]操作进行细化。注意,我们提出的DeepLabv3+模型的输出步幅为4。考虑到GPU资源有限,我们不会追求更密集的输出特征图(例如,输出步幅< 4)。
4.2ResNet-101作为骨干网络
为了比较模型的准确性和速度,对于提出的DeepLabv3+模型,我们在表3中给出当使用ResNet-101作为骨干网络的mIoU和MA。由于空洞卷积,我们能够在训练和评估过程中,使用单一模型获得不同分辨率的特征。
基准网络:表3中的第一行包含了来自文献[23]的结果,表明在验证阶段(eval输出步长为8)其能提取更密集的特征映射,并且采用多尺度输入可以提高性能。此外,添加左偏翻转输入会使计算复杂度加倍,但性能只有很小的提高。
增加编码器:表3中的第二行为采用所提出的解码器结构时的结果。当eval输出步长为16或8时,性能分别从77.21%提升到78.85%或78.51%提升到79.35%,以大约20B的额外计算开销为代价。当使用多尺度和左右翻转输入时,性能得到进一步提升。
粗糙特征图:我们还对当训练输出步长为32(训练过程中没有空洞卷积)来进行快速计算的情况进行了实验。如表3中的第三行所示,增加解码器带来大约2%的提升,而只需要74.2b的MA。但是,当我们使用训练输出步幅为16和不同的eval输出步幅值时,性能总是要比这种情况低1%到1.5%。因此,根据复杂性预算,我们更倾向于在训练或验证期间使用输出步长为16或8。
4.3Xception作为骨干网络
我们进一步使用更强大的Xception作为骨干网络。接着,我们做了一些改变,如3.2节所说。
ImageNet预训练:提出的Xception网络在ImageNet-1k数据集上进行与文献[26]相同训练策略的预训练。特别地,我们采用Nesterov动量优化器,初始动量为0.9,初始学习率为0.05,衰退系数为0.94,衰退权重为4e-5。我们使用50个GPU的异步训练,每个GPU批量大小为32,图像大小为299×299。我们并没有很难调整超参数,因为我们的目标是在ImageNet上预训练模型进行语义分割。在表4中,我们给出了单一模型在验证集上的错误率,其为在相同训练策略下复现的ResNet-101。在改进的Xception中,当每3×3深度卷积后不添加额外的BN层和ReLU时,Top1和Top5的精度分别下降了0.75%和0.29%。
使用提出的Xception作为骨干网络进行语义分割的结果如表5所示。
基准网络:在表5中,我们首先给出了不使用提出的解码器的结果,表明了当训练输出步长等于验证输出步长为16时,使用Xception作为骨干网络可以带来2%的性能提升。在推理过程中使用验证输出步长等于8、多尺度输入以及添加左右翻转输入,也可以得到进一步的改进。注意我们没有使用多尺度网络的方法,我们发现这并不能提升性能。
增加解码器:如表5第二行所示,对于所有不同的推理策略,当使用eval 输出步长为16时,添加解码器可以带来大约0.8%的提升。当使用eval输出步长为8时,这种提升变小。
使用深度可分离卷积:基于深度可分离卷积的高效计算,我们将其进一步应用到ASPP和解码器模块中。如表5中第三行所示,乘加计算复杂度显著降低33%~41%,同时,获得了相似的mIOU性能。
在COCO数据集上预训练:为了与其他先进的模型进行比较,我们将提出的DeepLabv3+模型进一步在MS-COCO数据集上进行了预训练,这使得所有不同的推理策略都有大约2%的额外提升。
在JFT数据集上预训练:与文献[23]中的工作相似,我们同样采用了在ImageNet-1k和JFT-300M数据集上预训练好的Xception模型,这分别带来了0.8%和1%的提升。
测试集结果:由于在数据集评价中没有考虑计算复杂性,因此,我们选择了最佳性能模型,并使输出步幅为8,同时冻结批归一化参数对其进行训练。最后,我们提出的”DeepLabv3+”在没有进行JFT数据集预训练和进行预训练中分别实现了87.8%和89%的性能
定性结果:在图6中,我们提供了最好的模型的可视化结果。如图所示,我们的模型可以很好地分割物体而不需要任何后期处理。
失效模式:如图6最后一行显示,我们的模型对(a)沙发和椅子,(b)严重闭塞的物体,和(c)罕见视角的物体分割困难。
4.4对于目标边界的提升
在本小节中,我们通过trimap实验来评估分割的准确性,以量化所提出的解码器模块在物体边界附近的准确性。具体来说,我们将形态学扩展应用于val集合上的“void”标签注释,这通常发生在对象边界附近。然后我们计算那些在‘void’标签的膨胀带(称为trimap)内的像素的mIoU。如图5(a)所示,对于ResNet-101和Xception作为骨干网络,使用本文提出的解码器比单纯的双线性上采样提高了性能。当扩张带较窄时,改善更为显著。如图所示,我们观察到ResNet-101和Xception在最小的trimap宽度下分别有4.8%和5.4%的mIOU改善。我们还在图5(b)中可视化了使用提出的解码器的效果
4.5在Cityscapes数据集上的实验结果
在这一章节,我们在Cityscapes数据集上进行了实验,该数据集是一个大型数据集包含5000张高质量的像素级标注的图片(2975,500,1525张图片分别作为训练集,验证集,测试集)和大约20000张粗糙标注的图片。
如表7所示,在DeepLabv3的基础上,采用所提出的Xception模块作为骨干网络(记为X-65),其中包括ASPP模块和图像级别的特性,最终在验证集上性能达到77.33%。增加提出的解码器模块明显地提升了性能,达到78.79%(1.46%的提升)。我们注意到,移除增强的图像级别特性可以将性能提高到79.14%,结果表明,在DeepLab模型中,图像级特征在PASCAL VOC 2012数据集上更为有效。我们还发现,在Cityscapes数据集上,在Xception入口信息流处增加更多的层是有效的,与其他作者为目标检测所作的工作相同。最终的模型建立在更深层次的骨干网络(在表中表示为X-71)上,在验证集上达到了最佳性能79.55%。
在验证集上找到了最佳的模型变体之后,我们进一步对粗糙注释上的模型进行微调,以便与其他最新的模型竞争。在表7中,我们提出的DeepLabv3+在测试集上达到了82.1%,在Cityscapes上创造了一个新的记录。
5.结论
我们提出的模型”DeepLabv3+“使用了编码器-解码器结构,其中使用DeepLabv3编码丰富的上下文信息,并采用简单有效的解码器恢复目标对象边界。我们也可以应用空洞卷积来提取任意分辨率的编码特征,这取决于可利用的计算资源。我们也研究了使用Xecption模块和空洞可分离卷积可以让我们提出的模型更快更强。最终,我们的实验结果显示提出的模型在Cityscapes和PASCAL VOC 2012数据集上达到了最先进的性能。
致谢 感谢我们与齐浩之、戴继峰就对Aligned Xception进行的有价值的讨论,感谢陈孙的反馈,感谢谷歌移动视觉团队的支持。