代码地址(暂未开源):ContextPrior
1. 概述
导读:现有分割算法中会去充分获取并利用输入数据的上下文信息,但是这些方法并没有有效区分这些上下文信息来自的类别(缺少监督),文章指出这样会给网络理解需要分割的图像造成困扰(带来错误分类的情况),因而在这篇文章中直接去监督特征融合,使得可以区分类内和类间的上下文。要实现上面的目标文章提出了带有相关性损失(Affinity Loss)的Context Prior Layer去获取一个理想的相关性特征图(这是通过GT监督获取的),从而去监督上下文信息的学习过程,再在上下文信息中抽取出属于统一类别的像素点,剩余的部分就是其它类别的像素点了(主要是引入GT的信息优化特征图,从而优化最后分割结果)。将文章提出的网络层融入到分割的CNN网络里面,可以获取类内和类间的上下文依赖,从而带来鲁棒的特征表达,再次基础上文章构建了一个分割网络CPNet(Context Prior Network)。文章的方法在一些数据集上也获得了不错的性能表现,在ADE20K上表现为46.4%mIoU,PASCAL-Context上53.9%,Cityscapes上81.3%。
在分割网络中为了获取更好的分割结果,会充分使用网络去获取输入的上下文信息,对于这样的目标一般有两类主要的方法去获取上下文信息:
- 1)基于金字塔的方法,基于金字塔与全局池化的特征获取方法可以获取类似的上下文联系,但是却忽视了不同类别上下文区域的依赖性,见下图所示错误分割:
- 2)基于注意力机制的方法,在分割中channel-wise/ spatial-wise/ point-wise的注意力机制被广泛使用,但是缺少有效的约束,使得注意力机制产生的结果并不是很清晰,这就会导致选择了错误上下文依赖,见下图错误分类所示:
文章发现经过区分的上下文信息可以帮助分割网络更好理解输入图像信息,从而获取更好的分割结果,因而这篇文章将上下文先验转换为一个二分类问题(对应后文网络结构中的 P P P与 1 − P 1-P 1−P矩阵),将相同类别的区域与其它的区域分隔开来,这里使用了相关性损失。在进行相关性损失之前上下文信息需要在spatial上的信息去推理它们之间的联系,因而文章设计了Aggregation Module在spatial(长条形卷积)与depth维度上使用分离卷积高效同和空间信息。
2. 方法设计
2.1 Context Prior Layer
这篇文章提出的结构是为了建立类内像素与类间像素的关系,从而构建了一个带监督的Context Prior Layer,其结构间下图所示:
这个层中输入的特征图大小为 X ∈ R H ∗ W ∗ C 0 X\in R^{H*W*C_0} X∈RH∗W∗C0,之后经过Aggregation模块变为 X ^ ∈ R H ∗ W ∗ C 1 \hat{X}\in R^{H*W*C_1} X^∈RH∗W∗C1,之后经过一个卷积进行升维变为 H ∗ W ∗ ( H ∗ W ) , N = H ∗ W H*W*(H*W),N=H*W H∗W∗(H∗W