语义分割的目的是为图像中的每个像素分配语义标签[17,25,13,83,5],这是计算机视觉中的基本主题之一。 基于完全卷积神经网络[64,49]的深度卷积神经网络[41,38,64,68,70]显示出依赖于手工制作特征的系统在基准任务上的显着改进[28,65,36,39,22,79]。在这项工作中,我们考虑使用空间金字塔池模块[23,40,26]或编码器-解码器结构[61,3]进行语义分割的两种类型的神经网络,其中前者通过在不同的分辨率上汇集特征来捕获丰富的上下文信息。而后者能够获得锐利的物体边界。
为了捕获多个尺度的上下文信息,DeepLabv3 [10]应用具有不同速率的几个并行的atrous卷积(称为Atrous Spatial Pyramid Pooling,或ASPP),而PSPNet [81]执行不同网格尺度的池化操作。即使在最后的特征映射中编码了丰富的语义信息,由于在网络主干内具有跨步操作的池化或卷积,因此缺少与对象边界相关的详细信息。通过应用atrous卷积来提取更密集的特征映射可以减轻这种情况。然而,考虑到现有神经网络[38,68,70,27,12]的设计和有限的GPU内存,提取比输入分辨率小8甚至4倍的输出特征映射在计算上是禁止的。以ResNet-101 [27]为例,当应用atrous卷积提取比输入分辨率小16倍的输出特征时,最后3个残余块(9层)内的特征必须扩大。更糟糕的是,如果需要比输入小8倍的输出特征,则会影响26个残余块(78层!)。因此,如果为这种类型的模型提取更密集的输出特征,则计算密集。另一方面,编码器 - 解码器模型[61,3]使其自身在编码器路径中更快地计算(因为没有特征被扩张)并且逐渐恢复解码器路径中的尖锐对象边界。试图结合两种方法的优点,我们建议通过结合多尺度上下文信息来丰富编码器 - 解码器网络中的编码器模块。
特别是,我们提出的模型,称为DeepLabv3 +,通过添加一个简单但有效的解码器模块来扩DeepLabv3[10],以恢复对象边界,如图1所示。丰富的语义信息在DeepLabv3的输出中进行编码,带有atrous卷积允许人们根据计算资源的预算来控制编码器特征的密度。 此外,解码器模块允许详细的对象边界恢复。
基于完全卷积网络(FCNs)[64,49]的模型已经证明了在几个分割基准[17,52,13,83,5]上的显着改进。提出了几种模型变体来利用上下文信息进行分割[28,65,36,39,22,79,51,14],包括那些采用多尺度输入的模型(即图像金字塔)[18,16,58,44,11,9]或那些采用概率图模型(如DenseCRF [37]和有效推理算法[2])[8,4,82,44,48,55,63,34,72,6] ,7,9]。 在这项工作中,我们主要讨论使用空间金字塔池化和编码器-解码器结构的模型。
空间金字塔池化:模型,如PSPNet [81]或DeepLab [9,10],在几个网格尺度(包括图像级池[47])执行空间金字塔池[23,40]或应用几个并行的atrous卷积与不同的费率(称为Atrous Spatial PyramidPooling,或ASPP)。 通过利用多尺度信息,这些模型已经在几个分割基准上显示出有希望的结果。
编码器-解码器:编码器-解码器网络已成功应用于许多计算机视觉任务,包括人体姿态估计[53],物体检测[45,66,19]和语义分割[49,54,61,3,43,59,57,33,76,20]。通常,编码器-解码器网络包含(1)逐渐减少特征图并捕获更高语义信息的编码器模块,以及(2)逐渐恢复空间信息的解码器模块。基于这个想法,我们建议使用DeepLabv3 [10]作为编码器模块,并添加一个简单而有效的解码器模块,以获得更清晰的分割。
深度可分卷积:深度可分卷积[67,71]或群卷积[38,78],是一种强大的操作,可以在保持相似(或略微更好)的性能的同时降低计算成本和参数数量。这个操作已经被许多最近的神经网络设计采用[35,74,12,31,80,60,84]。特别是,我们探索了Xception模型[12],类似于[60]用于COCO2017检测挑战的提交,并在语义分割任务的准确性和速度方面表现出改进。
Atrous卷积:Atrous卷积,一种强大的工具,允许我们明确控制深度卷积神经网络计算的特征的分辨率,并调整滤波器的视野以捕获多尺度信息,推广标准卷积运算。特别地,在二维信号的情况下,对于输出特征映射y和卷积滤波器w上的每个位置i,如下在输入特征映射x上应用atrous卷积:
其中,atrous rate r决定了我们对输入信号进行采样的步幅。 有兴趣的读者可以参考[9]了解更多细节。注意,标准卷积是速率r = 1的特殊情况。通过改变速率值自适应地修改滤波器的视野。
**深度可分卷积:**深度可分卷积,将标准卷积分解为深度卷积,然后是逐点卷积(即1×1卷积),大大降低了计算复杂度。具体地,深度卷积对于每个输入信道独立地执行空间卷积,而逐点卷积用于组合来自深度卷积的输出。在深度可分卷积的TensorFlow [1]实现中,在深度卷积(即空间卷积)中支持了atrous卷积。在这项工作中,我们将得到的卷积称为atrous可分卷积,并发现atrous可分离卷积显着降低了所提出模型的计算复杂度,同时保持了相似(或更好)的性能。
DeepLabv3作为编码器:DeepLabv3 [10]采用了atrous卷积[30,21,64,56]来提取由任意分辨率的深度卷积神经网络计算的特征。在这里,我们将输出步幅表示为输入图像空间分辨率与最终输出分辨率的比率(在全局池化或完全连接层之前)。对于图像分类的任务,最终特征图的空间分辨率通常比输入图像分辨率小32倍,因此输出stride=32.对于语义分割的任务,可以采用输出stride=16(或8)通过去除最后一个(或两个)块中的步幅并相应地应用atrous卷积来进行更密集的特征提取(例如,我们分别对输出步幅= 8的最后两个块应用rate = 2和rate = 4)。此外,DeepLabv3增强了Atrous空间金字塔池化模块,该模块通过应用具有不同速率的atrous卷积和图像级特征来探测多尺度的卷积特征[47]。在我们提出的编码器 - 解码器结构中,我们在原始DeepLabv3中作为编码器输出进行登录之前使用最后一个特征映射。请注意,编码器输出要素图包含256个通道和丰富的语义信息。此外,根据计算预算,可以通过应用atrous卷积以任意分辨率提取特征。
**提出的解码器:**DeepLabv3的编码器功能通常用输出stride=16计算。在[10]的工作中,这些特征被双线性上采样16倍,这可以被认为是一个最初的解码器模块。但是,这个最初的解码器模块可能无法成功恢复对象分割细节。因此,我们提出了一个简单而有效的解码器模块,如图2所示。编码器特征首先进行双线性上采样4倍,然后与具有相同功能的网络主干中具有相同空间分辨率(例如,在ResNet-101 [27]中跨步之前的Conv2)的低级特征[25]连接起来。我们在低级特征上应用另一个1×1卷积来减少通道数,因为相应的低级特征通常包含大量通道(例如,256或512),这可能超过富编码特征的重要性(我们的模型中只有256个通道),使训练更加困难。在连接之后,我们应用几个3×3的卷积来细化特征,然后进行另一个简单的双线性上采样4倍。我们在第4节使用输出stride= 16作为编码器模块在速度和精度之间取得最佳平衡。当使用输出stride = 8作为编码器模块时,以额外的计算复杂性为代价,性能略有提高。
表1. 用于减少来自编码器模块的低级特征映射的通道的解码器1×1卷积的效果。 我们将解码器结构中的其他组件固定为使用[3×3; 256]和Conv2(striding前)的VOC 2012 val set的性能。
为了评估1×1卷积在解码器模块中的效果,我们采用[3×3;256]及来自ResNet-101网络主干的Conv2特征,即res2x残差块中的最后一个特征图(具体来说,我们在跨步之前使用特征图)。 如表格1所示,将低级特征映射的通道从编码器模块减少到48或32导致更好的性能。 因此我们采用[1×1,减少通道。
然后,我们为解码器模块设计3×3卷积结构,并在表2中报告结果。我们发现在使用DeepLabv3特征图连接Conv2特征图(在跨步之前)之后,使用两个3×3卷积的256个滤波器比使用简单的一个或三个卷积更有效。将过滤器的数量从256更改为128或将内核大小从3×3更改为1×1会降低性能。我们还试验了在解码器模块中利用Conv2和Conv3特征映射的情况。在这种情况下,解码器特征图以步长2逐渐上采样,首先与Conv3连接,然后与Conv2连接,并且每个将由[3×3,256]操作。然后整个解码过程类似于UNet / SegNet设计[61,3]。但是,我们没有观察到显着的改善。因此,最后,我们采用了非常简单但有效的解码器模块:DeepLabv3特征映射和通道缩减的Conv2特征映射的串联由两个[3×3; 256]操作。请注意,我们提出的DeepLabv3 +模型的输出stride = 4.在GPU资源有限的情况下,我们不再追求更密集的输出特征映射(即输出步幅<4)。
表2.固定[1×1,48]以减少编码器特征通道时解码器结构的影响。 我们发现使用Conv2(striding前)特征图和两个额外的[3×3,256]操作是最有效的。 VOC 2012 val set的性能。
表3.使用ResNet 101作为特征提取器时,PASCAL VOC 2012 val设置的推理策略。 训练OS:训练期间使用的输出步幅。 eval OS:评估期间使用的输出步幅。 解码器:采用所提出的解码器结构。 MS:评估期间的多尺度输入。 翻转:添加左右翻转输入。
基线:Tab中的第一个行块。 图3包含[10]的结果,表明在评估期间提取更密集的特征图(即,eval输出步幅= 8)并采用多尺度输入提高了性能。 此外,添加左右翻转输入会使计算复杂性增加一倍,而性能只会略微提高。
添加解码器:Tab中的第二个行块。 图3包含采用所提出的解码器结构时的结果。 当使用eval输出stride = 16或8时,性能从77.21%提高到8.85%或78.51%到79.35%,代价是大约20B额外的计算开销。使用多刻度和左右翻转输入时,性能得到进一步提高
更粗略的特征图:我们还试验了使用列车输出stride=32(即,在训练期间根本没有任何atrous卷积)进行快速计算的情况。如表3中的第三行块所示。添加解码器带来2%的改进,而只需要74.20B的MultiplyAdds。然而,在我们采用列车输出stride = 16和不同的eval输出步幅值的情况下,性能总是约1%至1.5%。 因此,我们更倾向于在训练或评估期间使用输出stride = 16或8,具体取决于复杂性预算。
ImageNet预训练:拟议的Xception网络在ImageNet-1k数据集[62]上预先训练,在[12]中使用类似的训练协议。具体来说,我们采用Nesterov动量优化器,动量= 0.9,初始学习率= 0.05,速率衰减=0.94每2个时期,重量衰减4e-5.我们使用50个GPU的异步训练,每个GPU的批量大小为32,图像大小299×299.我们没有非常努力地调整超参数,因为目标是在ImageNet上预先训练模型以进行语义分割。我们在表4中报告验证集上的单模型错误率。与基线一起在同一训练协议下复制ResNet-101[27]。 我们观察到在修改的Xception中每次3×3深度卷积后没有添加额外批量标准化和ReLU时,Top1和Top5精度的性能降低0.75%和0.29%。
表4. ImageNet-1K验证集上的单模型错误率。
表5中报告了使用所提出的Xception作为语义分段的网络主干的结果。
表5.使用修改的Xception作为特征提取器时,PASCAL VOC 2012 val设置的推理策略。 训练OS:训练期间使用的输出步幅。 eval OS:评估期间使用的输出步幅。 解码器:采用所提出的解码器结构。 MS:评估期间的多尺度输入。 翻转:添加左右翻转输入。 SC:对ASPP和解码器模块采用深度可分离卷积。 COCO:在M
**基线:**我们首先在表5中的第一行块中不使用建议的解码器报告结果。示出了在使用ResNet-101的情况下,当训练输出stride = eval output stride = 16时,使用Xception作为网络主干将性能提高约2%。 通过使用平均输出stride = 8,在推理期间进行多尺度输入并添加左右翻转输入,也可以获得进一步的改进。
请注意,我们不使用多网格方法[75,15,10],我们发现这不会改善性能。
**添加解码器:**如表5中的第二行块所示。对于所有不同的推理策略,当使用平均输出stride = 16时,添加解码器会带来约0.8%的改进。 使用平均输出stride = 8时,改进变得更少。
**使用深度可分卷积:**通过深度可分卷积的有效计算,我们在ASPP和解码器模块中进一步采用它。 如Tab中的第三行块所示。 如图5所示,乘法加法的计算复杂度显着降低了33%至41%,同时获得了类似的mIOU性能。
图5.采用所提出的解码器模块与初始双线性上采样(表示为BU)相比的定性效果。 在示例中,我们采用Xception作为特征提取器和列车输出stride = eval output stride = 16。
在COCO上进行预训练:为了与其他现有技术模型进行比较,我们进一步预先提取了我们在MS-COCO数据集上提出的DeepLabv3 +模型[46],这使得所有不同推理策略的性能提高了2%。
JFT上的预训练:类似于[10],我们还采用了已经在ImageNet-1k [62]和JFT-300M数据集[29,12,69]上预训练的Xception模型,它带来了额外的0.8%到1%改进。
测试集结果:由于基准评估中未考虑计算复杂性,因此我们选择最佳性能模型并使用输出stride = 8和冻结批量标准化参数进行训练。最后,我们的’DeepLabv3 +'在没有和使用JFT数据集预训练的情况下实现了87.8%和89.0%的性能。
定性结果:我们提供了图6中最佳模型的可视化结果。如图所示,我们的模型能够很好地分割对象而无需任何后处理。
失败模式:如图6的最后一行所示,我们的模型难以分割(a)沙发与椅子,(b)严重遮挡的物体,以及(c)罕见的物体。