Semantic Segmentation---DeepLabv3+ Encoder-Decoder with Atrous Separable Convolution for ...(论文解读十二)

Title:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

From:CVPR2018

Note data:2019/06/09
Abstract:以DeepLabv3做encoder架构,decoder采用一个简单却有效的模块。并探索了改进的Xception和深度分离卷积在模型中的应用,进一步提升模型在语义分割任务上的性能。
Code :pytorch


目录

DeepLabv3+论文解读

1 Abstract

2 Introduction

3 Related work

4 Architecture

4.1 编码解码与空洞卷积

4.2 Modified Aligned Xception

5 Experiment

6 Conclusion


DeepLabv3+论文解读

1 Abstract

论文提出一种Semantic Segmentation模型:DeepLabv3+

网络结构:融合空间金字塔池化模块(spatial pyramid pooling,SPP) 和 编码-解码结构(encode-decoder) 用于语义分割的深度网络结构. 

创新:通过将SPP以及en-de进行融合以达到更好的效果。

动机:提升分割准确率
论文融合了空间金字塔模块(spatial pyramid pooling,SPP)以及编码-解码结构(encode-decoder)两种结构。空间金字塔模块在输入feature上应用多采样率扩张卷积、多接收野卷积或池化,探索多尺度上下文信息。 Encoder-Decoder结构通过逐渐恢复空间信息来捕捉清晰的目标边界。deeplabv3+结合两者的优点,将deeplabv3作为基本的编码网络骨架,在此基础上将解码网络添加到网络中形成更加优异的deeplabv3+模型。此外论文进一步探究了以Xception结构为模型主干,并探讨了Depthwise separable convolution在ASPP和decoder模块上的应用,最终得到了更快更强大的encoder-decoder网络。在VOC 2012,Cityscapes上分别取得了89.0%,82.1%的mIou。


2 Introduction

在DeepLabv3+中,使用了两种类型的神经网络,使用空间金字塔模块和encoder-decoder结构做语义分割。

  • 空间金字塔:通过在不同分辨率上以池化操作捕获丰富的上下文信息
  • encoder-decoder架构:逐渐的获得清晰的物体边界
  • 将Xception模型用于分割任务,并将深度可分离卷积应用于ASPP模块和解码器模块,从而产生更快更强的编码器 - 解码器网络。

DeepLabv3+结构如下图所示:


3 Related work

本文主要从空间金字塔池化和encoder-decoder结构、基于Xception为主体的强大特征提取层,和基于深度分离卷积快速计算四个方面进行说明相关的一些工作。

空间金字塔池化:如PSPNet使用多个不同gird的池化,DeepLab的ASPP模块平行的使用不同扩张率的扩张卷积,执行空间金字塔合并获取多尺度信息。在多个benchmark获得不错的结果。

Encoder-Decoder: encoder-decoder结构在多个计算机视觉任务上获得成功,例如人类姿态估计、目标检测和语义分割。encoder-decoder网络包含:

  • encoder模块逐步减少feature map分辨率,捕获高级语义信息
  • decoder模块逐渐恢复空间信息

论文中使用DeepLabv3作为encoder模块,并增加一个简单又有效的的decoder模块获取空间信息。

深度分离卷积: 深度分离卷积和组卷积能够减少计算消耗和参数量的同时维持相似的表现。深度分离卷积已应用在多个神经网络中,特别的,我们探索了Xception架构,在语义分割任务上展现了精度和速度上的双重提升。


4 Architecture

在本节中,我们简要介绍了atrous卷积和深度可分卷积。 然后我们回顾一下DeepLabv3,它在 我们还提出了一个改进的Xception模型,它通过更快的计算进一步提高了性能。

4.1 编码解码与空洞卷积

空洞卷积

Atrous Convolution 扩展了标准的网络卷积操作,其通过调整卷积 filter 的接受野来捕捉多尺度的上下文内容信息,输出不同分辨率的特征.

以 2D 信号为例,对于输出 feature map y 的每个位置 i,卷积 filter w,输入 feature map x ,atrous 卷积计算为:

                                                    

atrous rate r 是对输入信号的采样步长.

标准的卷积操作等价于 r=1.

深度可分卷积

深度可分卷积操作,将标准卷积分解为一个 深度卷积(depthwise conv),depthwise conv 后接 逐点卷积(pointwise conv如,1×1 conv),有效的降低计算复杂度.

  • depthwise conv 对每一个输入通道(channel) 分别进行 spatial conv;
  • pointwise conv 用于合并 depthwise conv 的输出.

DeepLabv3编码 

DeepLabv3中也使用扩张卷积提取特征,我们将输入和输出的分辨率比值称为output_stride ,对于语义分割任务,使用扩张卷积替换下采样,使得输出的feature的output_stride=16 。

DeepLabv3的ASPP模块使用了多个平行的扩张卷积,配合了图像级特征(即全局平均池化)。我们将DeepLabv3的logit前的输出特征作为encoder-decoder模型的encoder输出。此时输出的feature通道为256,可依据计算资源限制合理使用扩张卷积。

解码

在DeepLabv3中,取预测的feature 直接双线性上采样16倍到期望尺寸,可以看做是 naive 的解码模块,但不足以重构物体分割细节.。所以提出了一种简易有效的解码模块。如下图所示:

DeepLabV3++ 解码模块中,首先将编码特征采用因子 4 的双线性上采样;然后连接(Concatenation)从主干网络所输出的对应的具有相同空间分辨率的 low-level 特征(如,ResNet-101 中 Conv2).

由于对应的 low-level 特征往往包含较多的 channels(如256, 512),可能会超过输出编码特征(这里输出 256 channels) 导致训练困难,故在连接(Concatenation)操作前,采用 1×1 卷积对 low-level 特征进行操作,以减少 channels 数.

连接(Concatenation) 处理后,采用 3×3 卷积和因子 4 的双线性上采样来改善特征.

output_stride = 16 的编码模块输出,取得了速率和精度的平衡.

output_stride = 8 的编码模块输出,精度更高,但计算复杂度增加.

4.2 Modified Aligned Xception

Xception 模型 已经在图像分类上取得了快速计算.

MSRA 提出的改进版本 Aligned Xception 在目标检测中实现了快速计算.

这里,基于 Aligned Xception 进行一些改进:

  • 相同深度 Xception,除了没有修改 entry flow network 结构,以快速计算和内存效率.
  • 采用 depthwise separable conv 来替换所有的 max-pooling 操作,以利用 atrous separable conv 来提取任意分辨率的 feature maps.
  • 在每个 3×3 depthwise conv 后,添加 BN 和 ReLU,类似于 MobileNet.

改进的 Xception 结构如图:


5 Experiment

实验细节:

         项目                                                        属性
   预训练模型                                ResNet-101(ImageNet-1k,modified aligned Xception)
      数据集                                                PASCAL VOC 2012
     数据增强                                                       是
       学习率                                                    0.007
     图片大小                                                 513 × 513
         工具                                                            TensorFlow

注意在decoder模块同样包含BN层。

Decoder Design Choise

用DeepLabv3作为encoder,对于f 个k×k 的卷积操作记为[k×k,f] ,先前DeepLabv3是在输出结果上继续双线性上采样16倍得到预测结果,这在PASCAL VOC2012 验证集上达到了77.21%。论文在此基础上,提出了改进的decoder模块。关于decoder的设计有多个方案:
使用1×1 卷积减少来自低级feature的通道数。

为了评估1×1 1×11×1卷积的重要性,在encoder中取了Conv2 Conv2Conv2尺寸为[3×3,256] [3×3,256][3×3,256]为输出,减少通道数在48到32之间性能最佳。结果如下表:   

3×3 卷积恢复信息:

  

Xception as Network Backbone

ImageNet pretraining: 改进后的Xception网络在ImageNet-1K上做了预训练。训练设置如下:

                  

可以看到Modified Xception性能要好。

整体的使用Modified Xception做为网络骨架,使用如下几种变体:

  • Baseline: 不使用decoder.
  • Adding decoder: 添加了decoder.
  • Using depthwise separable convolution: 在ASPP和decoder中使用深度分离卷积。计算量下降了30-40%.
  • Pretraining on COCO: 在MS-COCO数据集上预训练
  • Pretraining on JFT: 在IamgeNet-1K和JFT-300M上预训练

                  

与其他模型的比较:

在目标边界上的提升:


6 Conclusion

在deeplabV3的基础上利用其他工作中的有用模块提升自身工作的效率,这是值得我们学习的。同时论文探索了Xception和深度分离卷积在模型上的使用,进一步提高模型的速度和性能。模型在VOC2012上获得了新的state-of-the-art表现。

发布了106 篇原创文章 · 获赞 158 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41997920/article/details/91348258