Pyramid Scene Parsing Network 论文学习
论文地址: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是 ,在Cityscapes准确率是 。
1. Introduction
基于语义分割的场景解析是计算机视觉中的基础课题。它的目的就是给每个像素点分类。场景解析能提供场景的完备理解。它能预测标签,位置,以及各元素的形状。这个课题前景非常广阔,可用于自动驾驶,机器人感知等。
场景解析的难度与场景和标签的多样性密切相关。最新的ADE20K数据集是目前最具挑战性的,包含不受约束的数据和更多的场景类别。对这些数据集开发有效的算法需要攻克不少难题。
![](https://img-blog.csdnimg.cn/20181206114657329.png)
目前主流的场景解析框架都基于全卷积网络。深度神经网络提升了动态的物体理解,但是面对复杂场景和不受约束的数据时,仍有难度。例如图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的预测结果,作者总结它在复杂场景下的多个问题。
![](https://img-blog.csdnimg.cn/20181206140918803.png)
- Mismatched Relationship 上下文关系对于复杂场景理解极其重要,存在着co-occurrent 视觉模式。比如,一架飞机要么在跑道上,要么在天上飞。如图2中第一行,FCN基于外观就将黄色边框里的船预测为汽车。但是常识告诉我们,车是几乎不会出现在河上的。缺乏上下文信息的话,很容易就会误分类。
- Confusion Categories ADE20K中有很多容易混淆的类别标签。例如 field and earth,mountain and hill, wall, house, building and skyscraper. 它们的外观类似。标注整个数据集的专家的错误率都有 。图2中第二行,FCN将边框中物体部分预测为skyscraper,部分预测为building,这是不对的,它只能属于某一个。我们可以通过不同类别之间的关系来解决这个问题。
- Inconspicuous Classes 场景内可能包含任意大小的物体。有一些很小的物体,如streetlight, signboard, 就很难被发现,但是它们却很重要。相反,大的物体可能会超过FCN的感受野大小,造成不连贯的预测。如图2第三行,枕头和床单很像,忽略全局信息导致无法解析枕头。为了提升对很小或很大的物体预测性能,我们应该把更多的注意力放到那些sub-regions上。
以上的错误都或多或少都与上下文的关系有关。因此,一个深度网络如果有合适的global-scene-level prior,可以很大幅度地提升场景解析的表现。
3.2 Pyramid Pooling Module
有了上面的分析,作者介绍了pyramid pooling module(金字塔池化模块)。
![](https://img-blog.csdnimg.cn/2018120613544691.png)
在深度网络中,感受野的大小表示我们可以使用多少的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。金字塔池化模块不同层级的输出包含不同大小的特征图。为了保存全局特征的权值,作者使用 的卷积层,在每个金字塔level后,把context representation 的 dimension 降低至原来的 (如果pyramid 的 level size 是 ,如下图)。然后通过双线性插值法,直接对低维度特征图进行上采样,来获得与原特征图同样的size。最后,不同层级的特征相连,形成最终的pyramid pooling global feature。
![](https://img-blog.csdnimg.cn/20181206152600224.png)
注意,金字塔层级的个数和每个层级的size是可以变动的。它们与输入pyramid pooling layer 的特征图 size 有关。金字塔池化模块采用不同大小的 pooling kernel,对不同的sub-regions进行抽象。作者的金字塔池化模块有4个级别,bin size是 。
3.3 Network architecture
有了金字塔池化模块,作者提出了pyramid scene parsing network(PSPNet)。先用一个预训练的ResNet模型,配合dilated network strategy,来提取特征图。最后的特征图大小是输入图像的 。在它之上,使用金字塔池化模块来收集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
略