场景解析对于无限制的开放词汇和多样化的场景是具有挑战性的。在本文中,我们通过金字塔池化模块和提出的金字塔场景解析网络(PSPNet),利用全局上下文信息的能力,通过基于不同区域的上下文聚合,来处理场景解析任务。我们的全局先验表示在场景解析任务上能够产生高质量的结果,而PSPNet为像素级预测提供了优越的框架。该方法在各种数据集上实现了最先进的性能。它在2016年ImageNet场景解析挑战赛、PASCAL VOC 2012基准和Cityscapes基准中名列前茅。单个PSPNet在PASCAL VOC 2012上实现了新的mIoU准确度记录,达到了85.4%,在Cityscapes上的准确度为80.2%。
基于语义分割的场景解析是计算机视觉中的一个基本主题。其目标是为图像中的每个像素分配一个类别标签。场景解析提供了对场景的完全理解,它预测了每个元素的标签、位置和形状。这个主题在自动驾驶、机器人感知等潜在应用中具有广泛的兴趣。场景解析的难度与场景和标签的多样性密切相关。先驱的场景解析任务[23]是对LMO数据集[22]上的2,688张图像进行33个场景的分类。更近期的PASCAL VOC语义分割和PASCAL上下文数据集[8,29]包括更多具有类似上下文的标签,例如椅子和沙发,马和牛等。而新的ADE20K数据集[43]是最具挑战性的,具有大规模和不受限制的开放词汇表和更多的场景类别。图1展示了一些代表性的图像。为这些数据集开发出有效的算法需要克服一些困难。
最先进的场景解析框架大多基于全卷积网络(FCN)[26]。基于深度卷积神经网络(CNN)的方法提升了动态物体的理解能力,然而在考虑不同场景和无限制词汇时仍面临挑战。图2的第一行展示了一个例子,其中一艘船被误认为是一辆汽车。这些错误是由于物体的外观相似导致的。但是,当考虑到场景的上下文先验,即场景被描述为靠近一条河流的船屋时,应该能够得出正确的预测。
为了实现准确的场景感知,知识图谱依赖于场景上下文的先验信息。我们发现,当前基于FCN的模型主要问题是缺乏合适的策略来利用全局场景类别线索。在典型的复杂场景理解中,以前为了获取全局的图像级特征,广泛采用了空间金字塔池化[18],其中空间统计提供了对整体场景解释的良好描述。空间金字塔池化网络[12]进一步增强了其能力。与这些方法不同,为了融合适当的全局特征,我们提出了金字塔场景解析网络(PSPNet)。除了传统的扩张FCN [3,40]用于像素预测外,我们将像素级特征扩展到特别设计的全局金字塔池化特征上。局部和全局线索共同使最终预测更可靠。我们还提出了一种带有深层监督损失的优化策略。我们提供了所有的实现细节,这些细节对于我们在本文中表现出色是关键,并且我们公开提供了代码和训练模型。
我们的方法在所有可用的数据集上取得了最先进的性能。它是ImageNet场景解析挑战赛2016 [43]的冠军,并在PASCAL VOC 2012语义分割基准测试[8]和城市场景Cityscapes数据[6]中获得了第一名。这些表明PSPNet为像素级预测任务提供了一个有希望的方向,甚至可能在后续工作中对基于CNN的立体匹配、光流、深度估计等任务产生影响。我们的主要贡献有三个方面:
•我们提出了一个金字塔场景解析网络,将复杂的场景上下文特征嵌入到基于FCN的像素预测框架中。
•我们基于深度监督损失为深度残差网络(ResNet)[13]开发了一种有效的优化策略。
•我们构建了一个实用的系统,用于最先进的场景解析和语义分割,其中包括所有关键的实现细节。
图1. ADE20K数据集中复杂场景的插图。
在接下来,我们将回顾场景解析和语义分割任务的最新进展。受到强大的深度神经网络[17,33,34,13]的推动,像场景解析和语义分割这样的像素级预测任务通过将分类中的全连接层替换为卷积层[26]取得了巨大的进展。为了扩大神经网络的感受野,[3,40]的方法使用了膨胀卷积。Noh等人[30]提出了一种粗到细的结构,使用解卷积网络来学习分割掩码。我们的基线网络是FCN和膨胀网络[26,3]。其他工作主要在两个方向上进行。一条线[26,3,5,39,11]是通过多尺度特征融合。因为在深度网络中,更高层的特征包含更多的语义信息和较少的位置信息。将多尺度特征组合起来可以提高性能。
另一个方向是基于结构预测。先驱性工作[3]使用条件随机场(CRF)作为后处理方法来优化分割结果。随后的方法[25,41,1]通过端到端建模来优化网络。这两个方向都改善了场景解析的定位能力,使得预测的语义边界与物体相匹配。然而,在复杂场景中仍然有很大的空间来利用必要的信息。为了充分利用全局图像级的先验知识进行多样化的场景理解,[18,27]的方法使用传统特征而不是深度神经网络来提取全局上下文信息。类似的改进也在目标检测框架[35]下进行了。刘等人[24]证明了FCN中的全局平均池化可以改善语义分割结果。然而,我们的实验证明这些全局描述符对于具有挑战性的ADE20K数据来说并不足够代表性。因此,与[24]中的全局池化不同,我们通过金字塔场景解析网络利用不同区域的上下文聚合来利用全局上下文信息的能力。
我们从将FCN方法应用于场景解析时观察和分析典型的失败案例开始。这些案例激发了我们提出金字塔池化模块作为有效的全局上下文先验的动机。接下来,我们将介绍我们的金字塔场景解析网络(PSPNet),以改善复杂场景解析中对开放词汇的对象和物体识别的性能。请参考图3。
新的ADE20K数据集[43]包含150个物体/物体类别标签(例如墙壁、天空和树木)和1,038个图像级别的场景描述符(例如机场候机楼、卧室和街道)。因此,大量的标签和各种场景的分布出现了。通过检查[43]中提供的FCN基线的预测结果,我们总结了复杂场景解析中的几个常见问题。
不匹配的关系上下文关系是普遍且重要的,特别是对于复杂场景的理解。存在共现的视觉模式。例如,飞机很可能在跑道上或者在天空中飞行,而不会在道路上飞行。在图2的第一行示例中,基于外观,FCN将黄色框中的船预测为“车辆”。但是常识告诉我们,车辆很少会出现在河流上方。缺乏收集上下文信息的能力会增加错误分类的可能性。
混淆的类别 ADE20K数据集[43]中有许多类别标签对在分类中容易混淆。例如,田野和土地;山和小山;墙、房子、建筑物和摩天大楼。它们在外观上非常相似。即使是为整个数据集进行标注的专家注释者,在[43]中描述的情况下,仍然会出现17.60%的像素错误。在图2的第二行,FCN将框中的对象预测为摩天大楼的一部分和建筑物的一部分。应该排除这些结果,使整个对象只能是摩天大楼或建筑物中的一种,而不能同时是两者。通过利用类别之间的关系,可以解决这个问题。
不显眼的类别 场景中包含任意大小的物体/物质。一些小型物体,如路灯和招牌,很难找到,但它们可能非常重要。相反,大型物体或物质可能超出FCN的感受野,从而导致不连续的预测。如图2的第三行所示,枕头与床单具有相似的外观。忽视全局场景类别可能无法解析枕头。为了提高对非常小或大的物体的性能,应该特别关注包含不显眼类别物质的不同子区域。
总结这些观察,许多错误部分或完全与上下文关系和不同感受野的全局信息有关。因此,具有合适的全局场景级先验的深度网络可以大大提高场景解析的性能。
图2. 我们在ADE20K数据集上观察到的场景解析问题。第一行展示了不匹配关系的问题 - 车辆很少会在水上而不是船上。第二行展示了混淆的类别,其中“building”类别很容易被误认为是“skyscraper”。第三行展示了不显眼的类别。在这个例子中,枕头在颜色和质地上与床单非常相似。这些不显眼的物体容易被FCN错误分类。
根据上述分析,接下来我们介绍金字塔池化模块,它经验证明是一种有效的全局上下文先验。在深度神经网络中,感受野的大小大致能够表示我们使用上下文信息的程度。虽然理论上ResNet的感受野已经大于输入图像,但周等人的研究表明,CNN的实际感受野要比理论值小得多,尤其是在高层次的网络层。这使得许多网络没有充分融合重要的全局场景先验。为了解决这个问题,我们提出了一种有效的全局先验表示方法。
全局平均池化是一种良好的基准模型,作为全局上下文先验,在图像分类任务中被广泛使用[34,13]。在[24]中,它被成功应用于语义分割。但是对于ADE20K [43]中的复杂场景图像来说,这种策略不足以覆盖必要的信息。这些场景图像中的像素根据许多物体和物品进行了注释。直接将它们融合成一个单一的向量可能会丢失空间关系并引起歧义。全局上下文信息以及子区域上下文在这方面对于区分各种类别是有帮助的。一种更强大的表示方式可以是从不同子区域的感受野中融合信息。类似的结论在经典的场景/图像分类工作[18,12]中也得出过。
在[12]中,通过金字塔池化生成的不同层级的特征图最终被展平并连接在一起,然后输入到全连接层进行分类。这种全局先验的设计是为了消除CNN对图像分类的固定大小限制。为了进一步减少不同子区域之间的上下文信息损失,我们提出了一种分层全局先验,包含了不同尺度和在不同子区域之间变化的信息。我们将其称为金字塔池化模块,用于在深度神经网络的最后一层特征图上构建全局场景先验,如图3(c)所示。
金字塔池化模块将特征融合在四个不同的金字塔尺度下。最粗糙的一级用红色突出显示,进行全局池化以生成单个bin输出。接下来的金字塔级别将特征图分成不同的子区域,并为不同位置形成池化表示。金字塔池化模块中不同级别的输出包含了尺寸不同的特征图。为了保持全局特征的权重,我们在每个金字塔级别之后使用1×1卷积层将上下文表示的维度减小到原来的1/N,其中金字塔的级别尺寸为N。然后,我们通过双线性插值直接上采样低维特征图,以获得与原始特征图相同尺寸的特征。最后,不同级别的特征被连接起来作为最终的金字塔池化全局特征。需要注意的是,金字塔级别的数量和每个级别的尺寸可以进行修改。它们与输入到金字塔池化层的特征图的大小有关。该结构通过在几个步长中采用不同尺寸的池化核来抽象出不同的子区域。因此,多级核应该在表示中保持合理的差距。我们的金字塔池化模块是四级的,分别具有1×1、2×2、3×3和6×6的bin尺寸。对于最大池化和平均池化之间的池化操作类型,我们进行了大量实验证明其差异,详见第5.2节。
图3.我们提出的PSPNet的概述。给定输入图像(a),我们首先使用CNN获得最后一个卷积层的特征图(b),然后应用金字塔解析模块来获取不同子区域的表示,接着通过上采样和连接层形成最终的特征表示,其中包含了局部和全局上下文信息(c)。最后,将表示输入到卷积层以获得最终的逐像素预测(d)。