Pyramid Scene Parsing Network(PSPNet) 论文学习

论文地址:https://arxiv.org/pdf/1612.01105.pdf
Caffe代码地址:https://github.com/hszhao/PSPNet
Tensorflow代码地址:https://github.com/hellochick/PSPNet-tensorflow

Abstract

场景解析对开放数据和多样化场景很具挑战性。本文提出的金字塔池化模块( pyramid pooling module) 能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。实验表明这样的global prior representation (即指代PSP这个结构)是有效的,在多个数据集上展现了优良的效果。在PASCAL VOC2012上,它的mean IOU是 85.4 % 85.4\% ,在Cityscapes准确率是 80.2 % 80.2\%

1. Introduction

基于语义分割的场景解析是计算机视觉中的基础课题。它的目的就是给每个像素点分类。场景解析能提供场景的完备理解。它能预测标签,位置,以及各元素的形状。这个课题前景非常广阔,可用于自动驾驶,机器人感知等。

场景解析的难度与场景和标签的多样性密切相关。最新的ADE20K数据集是目前最具挑战性的,包含不受约束的数据和更多的场景类别。对这些数据集开发有效的算法需要攻克不少难题。

目前主流的场景解析框架都基于全卷积网络。深度神经网络提升了动态的物体理解,但是面对复杂场景和不受约束的数据时,仍有难度。例如图2中,一艘船被认为是一辆车。这是由于它们外观的相似性造成的。但是如果从上下文得知,该场景被描述为“河边的船屋”,就应该能得到正确的预测。上下文关系匹配对理解复杂场景很重要,FCN缺乏依据上下文推断的能力。

为了实现精准的场景感知,knowledge graph 依赖于场景上下文的信息。FCN主要的问题是它缺乏整体的场景类别信息。对于复杂的场景,人们广泛采用了空间金字塔池化(spatial pyramid pooling),空间统计数据可以很好地描述整体场景。空间金字塔池化网络(spatial pyramid pooling networks)进一步加强了这种能力。

与以上方法不同,作者提出了pyramid scene parsing network(PSPNet)来融入合理的全局特征。除了传统的dilated FCN,作者将pixel-level特征扩展为global pyramid pooling特征。局部和全局信息一起让最终的预测更加可靠。作者也提出了一个优化策略 — deeply supervised loss。

这个方法在所有的数据集上都是state of art。它在2016年ImageNet场景解析挑战赛上获得冠军,在PASCAL VOC2012语义分割benchmark上获得第一名,在Cityscapes数据集上也是第一名。作者的贡献主要包括如下三点:

  • 提出了pyramid scene parsing network 来embed复杂场景特征;
  • 提出有效优化策略给ResNet,基于deeply supervised loss;
  • 构建了一个实用系统给场景解析和语义分割。

2. Related work

受神经网络推动,pixel-level预测任务(如语义分割和场景解析)通过将分类网络中的全连接层替换为全卷积层,取得了长足进步。本论文的baseline network是全卷积网络和dilated networks。

其它的论文主要有2个思路,一个是利用multi-scale feature ensembling. 在深度网络中,较高的层特征包含较多的语义信息和较少的位置信息,把多尺度特征结合起来能提升性能。另一个方向是基于structure prediction。一些工作是利用conditional random field(CRF)作为后期处理来优化分割结构。这两个方向改善了场景解析中的定位,但是在复杂场景中仍有很大的提升空间。

Liu et al. 证明了 global average pooling with FCN 可以提升语义分割结果。但是本论文显示,这些global descriptors并不能足够描述ADE20K数据。因此作者通过PSPNet来聚合不同区域的上下文关系,来发掘全局信息。

3. Pyramid Scene Parsing Network

作者一开始实验和分析了在场景解析中应用FCN失败的案例,于是作者想出了pyramid pooling module。图3中的PSPNet 可以提升open-vocabulary object and 复杂场景解析中的物体识别。

3.1 Important observation

ADE20K数据集包含150个物体类别(墙,天空,树等),以及1038个image-level scene descriptors(机场,车站,浴室,街道等)。通过检测FCN的预测结果,作者总结它在复杂场景下的多个问题。

  • Mismatched Relationship 上下文关系对于复杂场景理解极其重要,存在着co-occurrent 视觉模式。比如,一架飞机要么在跑道上,要么在天上飞。如图2中第一行,FCN基于外观就将黄色边框里的船预测为汽车。但是常识告诉我们,车是几乎不会出现在河上的。缺乏上下文信息的话,很容易就会误分类。
  • Confusion Categories ADE20K中有很多容易混淆的类别标签。例如 field and earth,mountain and hill, wall, house, building and skyscraper. 它们的外观类似。标注整个数据集的专家的错误率都有 17.6 % 17.6\% 。图2中第二行,FCN将边框中物体部分预测为skyscraper,部分预测为building,这是不对的,它只能属于某一个。我们可以通过不同类别之间的关系来解决这个问题。
  • Inconspicuous Classes 场景内可能包含任意大小的物体。有一些很小的物体,如streetlight, signboard, 就很难被发现,但是它们却很重要。相反,大的物体可能会超过FCN的感受野大小,造成不连贯的预测。如图2第三行,枕头和床单很像,忽略全局信息导致无法解析枕头。为了提升对很小或很大的物体预测性能,我们应该把更多的注意力放到那些sub-regions上。

以上的错误都或多或少都与上下文的关系有关。因此,一个深度网络如果有合适的global-scene-level prior,可以很大幅度地提升场景解析的表现。

3.2 Pyramid Pooling Module

有了上面的分析,作者介绍了pyramid pooling module(金字塔池化模块)。

在深度网络中,感受野的大小表示我们可以使用多少的context information。尽管理论上ResNet的感受野大小比输入图像还大,但是Zhou et al. 证明,CNN中的感受野在high-level layers中要远远小于理论值。这就使得很多网络无法充分利用重要的global scene prior。作者提出了一个有效的global prior representation来解决此问题。

Global average pooling可以作为global context prior的基线模型,它在分类任务中常用。但在复杂的ADE20K数据集上,这个方法没法覆盖必要的信息。这些场景图片中的像素被标注为许多的物体类别。直接把它们从单一的向量中fuse起来,会丢失空间关系,引起歧义。Global context 信息和 sub-region context 信息结合起来,就可以有效地区分不同类别。一个更有效的方法就是将不同的sub-regions 信息和感受野 fuse 起来。

在SppNet中,由 pyramid pooling 产生不同层级的特征图,这些特征图被flattened,而且连接起来,最后输入一个用于分类的全连接层。这样设计就可以让CNN对任意大小的输入图像进行分类。为了进一步降低不同sub-regions中的context information loss,作者提出了一个 hierarchical global prior — 金字塔池化模块,包含不同尺度的信息,这些信息在不同的sub-regions间会变动。

金字塔池化模块在4个不同的金字塔尺度上 fuse 特征。如图3,Coarsest level 在全局池化中是红色,产生一个单独的bin输出。随后的金字塔level 将特征图分为不同的 sub-regions,在不同的位置有不同的pooled representation。金字塔池化模块不同层级的输出包含不同大小的特征图。为了保存全局特征的权值,作者使用 1 × 1 1\times 1 的卷积层,在每个金字塔level后,把context representation 的 dimension 降低至原来的 1 / N 1/N (如果pyramid 的 level size 是 1 / N 1/N ,如下图)。然后通过双线性插值法,直接对低维度特征图进行上采样,来获得与原特征图同样的size。最后,不同层级的特征相连,形成最终的pyramid pooling global feature。

注意,金字塔层级的个数和每个层级的size是可以变动的。它们与输入pyramid pooling layer 的特征图 size 有关。金字塔池化模块采用不同大小的 pooling kernel,对不同的sub-regions进行抽象。作者的金字塔池化模块有4个级别,bin size是 1 × 1 , 2 × 2 , 3 × 3 , 6 × 6 1\times1,2\times2,3\times3, 6\times6

3.3 Network architecture

有了金字塔池化模块,作者提出了pyramid scene parsing network(PSPNet)。先用一个预训练的ResNet模型,配合dilated network strategy,来提取特征图。最后的特征图大小是输入图像的 1 / 8 1/8 。在它之上,使用金字塔池化模块来收集context information。利用4-level pyramid,pooling kernel 就覆盖了全图,半图,和图像中的小部分。然后通过upsample,产生 global prior。再把这个 prior 和原特征图连接起来,最后再跟着一个卷积层来生成最终的预测图。

PSPNet 为 pixel-level 场景解析提供了有效的 global context prior。金字塔池化模块能收集不同层级的信息,比global pooling 更具代表性。PSPNets 与原来的dilated FCN 网络比较,没有提升多少计算量。在端到端的学习过程中,global 金字塔池化模块和局部FCN特征可被同时优化。

4. Deep Supervision for ResNet-Based FCN

5. Experiments

猜你喜欢

转载自blog.csdn.net/calvinpaean/article/details/84849767