1. 出处
2017 CVPR
2. 核心思想
整体结构:
通过金字塔池化模块将全局上下文信息和PSPNet结合在一起
- 全局先验表示,对于场景解析任务是有效的
- PSPNet为像素级预测提供了更优秀的框架
3. 问题
已有的语义分割方法(按这篇文章来说的话,叫做场景解析,scene parsing),无法解决以下问题:FCN把船错分成了汽车,这是由于一些物体有相似的外观。但如果基于先验context来看这张图片的话,就能进行正确预测。
当前基于FCN的模型最大的问题在于缺乏合适的策略来利用全局场景类别信息。
总结起来,FCN具有以下弊端:
-
Mismatched Relationship 不匹配的关系
比如飞机和路不匹配,但飞机和跑道和天空匹配;车和河不匹配
-
Confusion Categories 易混淆的类别
对于ADE20K数据集,易混淆的类别有:
field, earth
mountain, hill
wall, house, building, skyscraper老练的标注者进行预测尚且会出错,更何况计算机。所以需要利用类别间的关系去进行预测,因为这些易混淆类别是互斥的,所以只能是其中一种类别。
-
Inconspicuous Classes 不显眼的类别
场景包括的物体类别大小是任意的,小物体,比如招牌、路灯很难发现。大物体会超出FCN的感受野,导致不连续的预测。为了提高显著的小物体和大物体的表现,我们需要更注意不同的次区域包含不显著的物体。
之前用于获取全局image-level特征的复杂场景理解方法,是spp。
与上述方法不同,为了合并合适的全局特征,我们提出了PSPNet
4. 解决方案
不同于已有方法(spp),为了结合合适的全局特征,我们提出了PSPNet。除了传统的dilated FCN用于像素级预测,我们扩展像素级特征到特殊设计的全局金字塔池化。这种局部和全局信息结合使得最终的预测结果可信度更高。
还提出了一种优化策略:使用有监督损失
5. 模型结构
ParseNet是成功将全局平均池化用于语义分割,但这个策略不足够用来覆盖必要的信息。因为场景图片中包含很多物体,直接混合信息的话产生一个一维向量的话,会损失全局关系并造成混淆。
金字塔池化生成的不同维度的特征图最终会被flatten然后concat,喂入全连接层,用于分类。为进一步减少不同子区域之间的上下文信息损失,作者提出了一个分层全局prior,包含不同尺寸的信息,而且不同子区域之间不同。叫作金字塔池化模块
金字塔池化模块混合4种不同金字塔尺度的特征。
- 红色的最粗糙的level是全局池化,生成单维输出。
- 下边的维度都是将特征图分成不同的子区域,在不同位置形成池化表示。
为了维持全局特征的权重,在每一个金字塔维度之后使用1x1卷积,将上下文表示降维。对低维特征图使用双线性插值进行上采样,得到和原始特征图相同大小的特征图。
4个维度大小分别为1x1,2x2,3x3,6x6,池化操作的类型在最大和平均中进行选取。
4个维度的金字塔,相当于池化核覆盖整张图片(1x1),覆盖一半(2x2),以及更小的划分(3x3, 6x6),将4个全局prior和原始特征图拼接,再经过卷积,得到票最终预测图。
6. 基于Resnet的FCN深度监督
深度Resnet的后几层主要基于前面的层学习residues。
作者提出利用额外损失的监督生成初始结果,因此深度网络的优化解耦成两部分。
除了主分支使用softmax损失函数来训练最终的分类器,另一个分类器在第4个阶段后。让两部分损失向所有浅层反向传播。
7. 启发
全局平均池化可用于获取全局上下文信息,常用在图像分类任务中
- 对于某些复杂的数据集,如ADE20K,全局平均池化无法覆盖必要的信息,这些像素是根据物体来进行标注的,直接混合,得到一个单独的向量的话会损失空间关系。