语义分割:DeepLabv3+

阅读的第一篇语义分割论文,缺乏相关背景,Xception模型也没看过,有空得补补。

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
Liang-Chieh Chen
Google Inc.


1. Introduction

语义分割,为图片中的每个像素赋予语义标签,是计算机视觉基础议题之一。本文考虑了两种神经网络,一种基于spatial pyramid pooling SPP模块,一种基于encoder-decoder编解码模块。前者能通过在不同分辨率下的池化特征获得丰富的上下文信息,后者能获得锐利的物体边界。

为了在多尺度获得上下文信息,DeepLabv3在不同的rate下使用了多个并行的空洞(atrous,有的论文称为dialation卷积)卷积(称为Atrous spatial pyramid pooling,ASSP),而PSPNet在多个grid尺度进行了池化操作。尽管最后一层特征图编码了丰富的语义信息,但与物体边界相关的细节信息却因为backbone中的池化或带步长的卷积操作丢失掉了。通过空洞卷积来提取更密集的特征图可以缓和这一问题。但是在现有的SOTA神经网络架构和受限的显存下,提取输入尺寸的1/8甚至1/4的特征图的计算消耗都过高。以ResNet-101为例,要使用空洞卷积来提取1/16的特征图,最后3个残差块(9层)的特征需要扩大。如果需要1/8的尺寸,26个残差块(78层)会受影响。即是说这类模型想获得更密的特征图,需要密集的计算。另一方面,编解码模块计算更快(不需扩大特征)。我们尝试合并两个方法的优势,提出了通过合并多尺度上下文信息充实编解码网络中的编码模块的方法。

图1

我们提出的模型DeepLabv3+继承自DeepLabv3,仅增加了一个简单但有效的解码模块来恢复物体边界,见图1。富语义信息编码到了DeepLabv3的输出中,取决于计算资源预算,可以通过空洞卷积可以控制编码器特征密度。而且解码模块能恢复出详细的物体边界。

受近期成功的depthwise separable convolution[27, 28, 26, 29, 30]的启发,我们也探索了这个操作,证明了通过应用Xception模型能获得速度和准确度提升。

Spatial pyramid pooling: PSPNet或DeepLab在不同的grid尺度(包括图片级的池化)或在不同的rate应用ASPP。这些模型通过利用多尺度的信息获得了有希望的结果。

Encoder-decoder: 编解码网络已成功应用到很多计算机视觉任务上,如人体姿态估计、物体检测和语义分割。通常它包含:

  1. encoder 逐步减少特征图并获得更高的语义特征。
  2. decoder 逐步恢复空间信息。

基于这个想法,我们提出使用DeepLabv3作为编码器,并增加一个简单但有效的解码器来获得锐利的分割。

Depthwise separable convolution: Depthwise separable convolution[27, 28],或group convolution[7, 65],是一种降低计算消耗和参数量并保持类似(甚至更好的)性能的强力方法。我们应用了Xception模型[26]。

3. Methods

3.1 Encoder-Decoder with atrous Convolution

Atrous convolution: 这是一个让我们可以显式地控制深度网络算出的特征分辨率,调整filter的field-of-view来获得多尺度信息,能泛化到标准卷积操作的强力工具。在二维信号的例子中,在输出特征图y和一个卷积核w上的每个位置i,空洞卷积应用于输入特征图x如下:

其中atrous率r决定了对输入信号的采样步长。关于更多细节推荐看[39]。当r=1时就成了标准卷积。卷积核的感受野可以通过修改r值进行适应。

Depthwise separable convolution: Depthwise separable convolution将一个标准卷积因式分解factorizing为depthwise卷积后接一个pointwise卷积(如$1\times1$卷积),彻底地降低了计算复杂度。特别地,DW卷积为输入的每个通道进行了独立的空间卷积,而PW卷积用于合并DW卷积的输出。在TensorFlow的Depthwise separable convolution实现中,空洞卷积通过DW卷积(如spatial 卷积)实现,如图3。在本论文中,我们将这个卷积称为Atrous Separable Convolution ASC,发现它能保持类似甚至更好性能前提下,显著降低计算复杂度。

图3

DeepLabv3 as encoder: DeepLabv3 使用空洞卷积来为任意分辨率提取特征。我们将输出步长output stride记为输入输出(在全局池化或fc之前)分辨率的比。对于分类任务,输出步长为32。对于语义分割任务,可以通过移除最后1(或2)个block的stride并相应地应用空洞卷积(例如,我们为了output stride=8,为最后两个block设置rate分别为2和4)来获得更密集的特征提取,得到output stride为16(或8)。此外,DeepLabv3增加了Atrous Spatial Pyramid Pooling模块,通过应用不同的rate的空洞卷积,在多个尺度探测probe卷积特征。我们将最后一个特征图在送入原始DeepLabv3前,当做我们提出的encoder-decoder结构的encoder输出。encoder输出的特征图有256个通道和丰富的语义信息。可以根据计算资源预算任意调整提取特征的分辨率。

图2

Proposed decoder: 来自DeepLabv3的encoder特征通常output stride为16。[23]的研究中,这个特征通过双线性bilinearly上采样了16倍,可以看做比较朴素的decoder模块。但它并不能很好地恢复物体分割细节。因此我们提出了一个简单但有效的decoder模块,见图2。encoder特征首先通过双线性上采样4倍,接着与骨干网有着同样尺寸的低级特征连接。我们对低级特征应用了一个$1\times1$卷积来降低通道数,因为低级特征通常通道数更多(如256、512),容易胜过encoder特征的重要性(我们模型中仅有256个通道),让训练变难。在连接后,我们应用了数个$3\times3$卷积来精炼特征,然后再用双线性上采样4倍。我们在第4章证明了使用output stride 16获得了速度和性能上的最佳平衡。设为8性能有部分提升,但计算消耗过大。

3.2 Modified Aligned Xception

Xception模型在ImageNet分类上结果又快又好。近期MSRA团队修改了Xception模型(称为Aligned Xception),进一步提升了物体检测任务上的性能。因此我们也采用了Xception模型。我们基于MRSA的修改,做了一些改动:

  1. 如[31]一样的更深的Xception,除了我们为了计算速度和内存效率没有修改entry flow网络架构
  2. 把所有max pooling替换为带stride的depthwise separable卷积,来允许我们通过atrous separable卷积提取任意尺寸的特征图
  3. 类似MobileNet的设计,在每个$3\times3$depthwise卷积后添加了额外的bn和ReLU。

细节见图4。

图4

4. Experiment Evaluation

我们使用在ImageNet-1k上预训练了ResNet-101和修改版aligned Xception,来通过空洞卷积提取密集特征图。我们的TensorFlow实现已开源。

提出的模型在VOC 2012语义分割benchmark上进行了测试,包含了20种前景和1种背景。原始数据集包括1464张训练、1449张验证和1456张测试的像素级标注的图片。我们通过[76]提供的额外标注增广了数据集,得到10582张的训练集。性能通过像素的21类mIOU评估。

我们的训练流程细节见[23]。简单地说,“poly”学习率策略,初始为0.007。裁切尺寸为$513\times513$,当output stride为16时调优bn参数,并在训练时进行随机缩放增广。我们在提出的decoder模块中也有bn参数。

4.1 Decoder Design Choices

实验过程、结果就不翻译了,请移步原文观看~