深度学习论文翻译 -- Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

摘要:空间金字塔池化(spatial pyramid pooling)或者编码-解码结构(encode-decode)被广泛应用于语义分割任务。通过不同采样值(rates)和多个有效的感受野,前者可以编码不同尺度的信息,而后者通过逐渐恢复空间信息的方式,可以获取目标更为尖锐的边界。本文中,我们综合两种方法的优点,设计新的网络结构。特别地,我们提出的模型,DeepLabv3+,与deeplabv3相比,添加了简单有效的解码模块,提升分割结果的同时,可以关注到边界信息。我们进一步研究了Xception模型,并且将深度可分离卷积应用在ASPP和解码模块(decoder modules),可以使得整个网络更快。我们的模型在PASCAL VOC 2012 和 Cityscapes数据集上获得89.0%和82.1%的分割结果,没有添加任何后处理。我们在Tensorflow上实现了DeepLabv3+模型,相关的代码和模型资源已经开源:https://github.com/tensorflow/models/tree/master/research/deeplab

1、Introduction

语义分割的目标是为图像中的每一个像素指定一个语义标签,是计算机视觉领域的基本问题。与手动设计的特征相比,基于DCNN的全卷积网络将语义分割的精度提升到新的层次。本文,我们考虑两种用于语义分割的神经网络类型:空间金字塔池化模块(spatial pyramid pooling)和编码-解码模块(encoder-decoder),前者通过不同分辨率的池化特征获取到丰富的内容信息,后者能够获取尖锐的边界特征。

为了获取不同尺度下目标信息,DeepLab-v3使用多个不同rate值、并行的空洞卷积(Called Atrous Spatial Pyramid Pooling),然而PSPNet在不同的grid scale 下进行池化操作。尽管丰富的语义信息可以被最后一层特征图编码,但是,池化或者卷积的滑动操作,以及目标边界相关的细节信息会随之丢失。那么,可以借助空洞卷积提取更为密集的特征图来解决这种问题。但是,在当前的网络结构以及有限的GPU资源的背景下,很难获得相对于输入图片8倍或者4倍降采样的输出特征图。以ResNet-101为例,如果提取相对输入图片16倍的降采样的特征图,那么最后三个残差模块(9 layers)需要使用空洞卷积。更糟糕的是,如果获得8倍下采样的输出,26个残差模块(78 layers)将会被影响。这样的话,计算将会非常密集。另一方面,encoder-decoder模型可以快速计算,并且可以逐渐恢复尖锐特征边界。为了利用上述方法的优点,我们使用更为丰富的encoder模块(incorporating the multi-scale contextural information)。

我们提出的模型,DeepLabv3+,相比于DeepLabv3,增加了简单有效的decoder模块,可以很好恢复目标边界信息,见Fig.1。根据计算资源的情况,可以通过空洞卷积控制DeepLabv3 encoder丰富的语义特征。更进一步,解码模块可以恢复详细的目标边界信息。

受启发于最近深度可分离卷积(depthwise separable convolution),我们对此结构进行研究,考虑到速度和精度的权衡,针对语义分割任务,我们对其作了一定修改,也即是Xception模块,并且将空洞可分离卷积应用在ASPP模块和decoder模块。最后,实验表明,我们提出的模型在PASCAL VOC 2012和Cityscapes上获得89%和82.1%的精度,总得来说,我们的贡献如下:

  • 我们提出新的encoder-decoder结构,采用DeepLabv3的encoder模块,以及一个简单有效的decoder模块;
  • 在我们的网络结构中,我们可以通过空洞卷积任意控制encoder模块特征图的分辨率,并且充分考虑了精度和速度,这是现有encoder-decoder模块没有的;
  • 我们采用Xception模块用于分割任务,以及将深度可分离卷积(depthwise separable convolution)应用到ASPP和Decoder模块;
  • 我们的模型获得很高的分割精度,并且详细分析了模型设计原则和模型的变体;
  • 我们开源了代码和模型;

2、Related Work

此部分暂时不翻译,获取信息量少。

3、Methods

这一部分,我们简单的介绍空洞卷积和深度分离卷积。然后再次讨论下DeepLabv3,最后我们讨论修改的Xception模型,可以进一步提高分割精度,并且速度很快。

3.1、Encoder-Decoder with Atrous Convolution

Atrous convolution:空洞卷积可以任意明确的控制DCNN输出特征图的分辨率,以及调整卷积核的FOV(in order to capture multi-scale information),是通用的卷积操作。在二维信号下,每一个位置i,对应的输出y,卷积核为w,作用在输入特征图x上的空洞卷积如下:

这里,空洞值 决定采样输入信号的滑动距离。标准卷积,采样值 r=1。可以通过修改r值,进而改变FOV。

Depthwise Separable Convolution:深度分离卷积通常是将标准卷积分解为:depthwise convolution + pointwise convolution(i.e. 1x1 convolution),极大降低了计算复杂度。特别的,深度分离卷积是在每一个通道单独进行卷积操作,空间上是独立的,而pointwise 卷积是为了将depthwise convolution的输出融合。具体见图3,本文中,我们提出空洞分离卷积,而且发现atrous separable convolution 降低了计算复杂度,而且精度不会降低,甚至更好。

DeepLabv3 as encoder:DeepLabv3使用空洞卷积提取任意分辨率的特征。这里我们使用output_stride为输入图与输出图的比值。对于图像分类任务,通常output_stride=32,。对于语义分割,可以采用output_stride=16或者8提取密集特征图,以及要修改最后的一个或者两个模块的滑动值(比如stride从2修改为1)(当output_stride=8时,最后两个模块的空洞值分别为rate=2,rate=4)另外,DeepLabv3采用ASPP模块,可以通过设置不同的rate来提取不同尺度的卷积特征,以及采用image-level features。我们采用DeepLabv3最后一层的特征图作为本文encoder的输出。我们的encoder模块包含256通道的特征图,并且包含丰富的语义特征。此外,可以通过空洞卷积提取任意分辨率的特征。

Proposed decoder:DeepLabv3的output_stride=16,在【23】中,特征被上采样16倍,是一个简单的decoder模块。但是,这种模块可能无法恢复目标的边界细节信息。为此,我们提出简单有效的decoder模块,见Fig.2. encoder模块的特征首先被上采样为4倍,然后和来自主干网络的低层特征连接(concatenated),他们具有相同的分辨率(eg. conv2 before striding in ResNet-101)。我们使用额外的1x1卷积处理低层特征,减少特征维度(低层特征通常的通道数较大,比如256或者512),这可能过于重视丰富的encoder特征,也使得学习困难。连接之后,我们添加3x3卷积,以及另外的4倍上采样。正如Sec.4介绍,output_stride=16,是精度和速度的最好平衡,当output_stride=8时,需要付出额外的计算代价。

3.2、Modify Aligned Xception

Xception在ImageNet图像分类中表现突出,并且计算快。最近,MSRA组修改了Xception模型(Called Aligned Xception),并且在目标检测领域获得进一步提升。基于这些研究,我们沿着该方向,将其应用在语义分割。特别地,我们在MSRA的基础上作了如下修改:(1)对于深度Xception网络,考虑计算速度和内存效率,我们没有修改entry flow;(2)将所有的最大值池化替换深度可分离卷积(depthwise separable convolution),可以使得我们利用空洞分离卷积提取任意分辨率的特征图(另外一个操作是将空洞算法扩展到最大值池化);(3)额外的BN,类似与MobileNet设计,见图4。

4、Experimental Evaluation

我们采用ImageNet-1k上预训练的ResNet-101网络,或者修改的 aligned Xception提取密集特征(add atrous convolution)。我们在tensorflow上应用,并且公开代码。

训练集为PASCAL VOC 2012,1464(训练集),1449(验证集),1456(测试集);额外的数据集【76】,10582张训练集。训练设置与DeepLabv3一样,可以参考。

4.1、Decoder Design Choices

定义“DeepLabv3 featrure map”为DeepLabv3计算的最后特征图(eg. the featrures containing ASPP features and image-level features),以及[k x k, f],表示卷积核为kxk,f为卷积核个数。

在训练和测试过程中,当output_stride=16,基于ResNet-101的DeepLabv3对输出进行16倍双线性插值上采样。这种简单的双线性插值上采样是基本的decder模块,精度达到77.21%,比将标签降采样的方法提高1.2%。为了提高基准精度,我们提出DeepLabv3+,增加新的decoder模块,见图2。在decoder模块,我们设计原则如下:(1)1x1用于降低低层特征的通道维度;(2)3x3卷积用于获取尖锐的分割细节;(3)低层特征可以被使用。

为了评测1x1卷积在decoder模块的影响,我们采用【3x3,256】和ResNet-101中的Conv2特征,例如,res2x残差模块的特征图。如表1所示,降低低层特征的通道维度为48或者32,可以得到更好的表现。我们最终采用【1x1,48】卷积设置。

我们在decoder中设计3x3卷积模块,结果见表2。当与Conv2的特征图(before striding)连接后,相比与使用一个或者3个卷积层,使用2个3x3卷积效果更好。卷积核个数从256将为128,以及3x3降为1x1会降低精度。我们也研究了Conv2和Conv3都连接到decoder模块,这种情况下,decoder模块逐渐上采样到2,与Conv3连接,然后与Conv2连接,每一个分之都会与【3x3,256】模块连接。整个decoding流程与U-Net、SegNet类似。但是,我们没有得到更明显的分割精度提升。因此,我们采用了这种简单更加有效的decoder模块:将DeepLabv3的特征图与降低通道的Conv2特征图连接,最后添加两个3x3卷积,通道为256。值得注意点是,DeepLabv3+的output_stride=4。

4.2、ResNet=101 as Network Backbone

为了对比不同模型在精度和速度上的差别,我们给出mIOU和Multiply-Adds,见表3,ResNet-101为主干网络。借助空洞卷积,我们可以在训练和评测过程中获得不同分辨率的特征图。

Baseline:表3的第一行表明,评测过程中,提取更为密集的特征图(比如output_stride=8)和采用多尺度的输入可以提高精度。而且,增加左右翻转,加倍了计算量,但是效果没有提上太多。

Adding decoder:表3的第二行,表明采用了decoder模块,精度得到普遍提升。并且仅仅增加额外的20B的计算量。当使用多吃度和翻转,精度进一步提高。

Coarse Feature Maps:我们实验了output_stride=32,如表3的第三行,增加decoder提高2%的精度,额外增加73.2B的加法和乘法操作。但是,当output_stride为16或者8,精度提高1%到1.5%。

4.3、Xception as Network Backbone

我们采用更为强大的Xception作为主干结构,根据【31】,我们作了更多的变化,如3.2的描述。

ImageNet Pretraining:提出Xception网络在ImageNet-1k上训练。特别的,使用Nesterov momentum 优化器,momentum=0.9,初始学习率为0.05,每两轮 rate decay=0.94,weight decay=4*0.0001。我们使用异步的50块GPUs,每一个GPU为batch size为32,输入图片为299x299。我们没有是专注超参数的调试,而是将其应用在语义分割。Tab4给出了单模型的误差。当没有添加BN或者ReLU,额外0.75%和0.29%的提升的Top-1和Top-5的精度。

以Xception为主干网络的的实验结果,见Tab.5。

Baseline:Tab.5第一行中,给出了没有使用本文提出的decoder模块,结果表明,与ResNet-101作为主干网络相比,Xception作为主干网络,精度提高2%(output_stride=16)。当测试使用output_stride=8,多尺度输入,以及翻转,精度进一步提高。值得注意的是,我们没有使用multi-grid方法,实验发现对于效果没有太大帮助。

Adding Decoder:Tab.5的第二行,当output_stride=16时,增加decoder提高0.8%左右。但是当output_stride=8时,增加不是很明显。

Using depthwise separable convolution:受启发于depthwise separable convolution的计算效率,我们在ASPP和decoder中采用。如Tab.5的第三行,计算效率得到巨大的降低,而且mIOU值差不多。

Pretraining on COCO:与其它经典模型相比,我们在MS-COCO上训练DeepLabv3+,整体上提高2%。

Pretraining on JFT:类似【23】,我们实验了同时在ImageNet-1k和JFT-300M数据集上训练的Xception模型,额外获得0.8%到1%的提升。

Test set result:由于在标准测试集上测试时,没有考虑计算复杂度,为此,我们采用最好的模型,并且output_stride=8,冻结BN的参数。最终我们的DeepLabv3+获得87.8%和89%的精度(without and with JFT dataset pretraining)。

Qualitative Results:图像的预测结果,见Fig.6,没有后处理的情况下,我们的模型获得较好的 分割细节。

Failure Mode:Fig.6的最后一行,我们的模型在(a)sofa vs chair;(b)遮挡严重的目标;(c)目标太小,等方面分割不好。

4.4、Improvement along Object Boundaries

这一部分,我们使用Trimap experiment评测了decoder在目标的边界分割精度。特别地,在空的标注区域使用形态学膨胀的方法,这种情况经常出现在目标边界。我们对这些像素计算了mIOU(within the dilated band(called trimap)of void labels)。见Fig5(a),采用提出的decoder模块,ResNet-101和Xception都比普通的双线性插值要好。当膨胀边界很小时,提升越大。在smallest trimap width的情况下,分别提高4.8%和5.4%。Fig.5(b)中给出了相应的结果。

4.5、Experimental Results on Cityscapes

该部分不做翻译,具体可以查看论文。

5、Conclusion

我们提出的DeepLabv3+,采用encoder-decoder 结构,其中,DeepLabv3被用于编码丰富的语义信息,解码模块用于恢复目标的边界。可以使用空洞卷积获得任意分辨率特征图。我们也实验了Xception和空洞分离卷积,使得模型更快,更强大。最后,我们的模型获得很好的结果。

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值