zl程序教程

您现在的位置是:首页 >  其他

当前栏目

《Context Prior for Scene Segmentation》论文笔记

论文笔记 for Context Segmentation Scene
2023-09-11 14:22:29 时间

代码地址(暂未开源):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 1P矩阵),将相同类别的区域与其它的区域分隔开来,这里使用了相关性损失。在进行相关性损失之前上下文信息需要在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} XRHWC0,之后经过Aggregation模块变为 X ^ ∈ R H ∗ W ∗ C 1 \hat{X}\in R^{H*W*C_1} X^RHWC1,之后经过一个卷积进行升维变为 H ∗ W ∗ ( H ∗ W ) , N = H ∗ W H*W*(H*W),N=H*W HW(HW),N=HW,之后reshape成为 ( H ∗ W ) ∗ ( H ∗ W ) (H*W)*(H*W) (HW)(HW)的矩阵,之后使用Affinity Loss作为约束,得到约束之后的矩阵P,之后是就是对类内和类间的上下文信息分别处理了,之后与aggreation模块之后的矩阵做矩阵乘法,最后再与之前的输入特征concat起来。

对于前面提到的Aggregation Module文章其实是采用了分离卷积加长条形卷积几何的策略实现的,其结构为:
在这里插入图片描述

2.2 Affinity Loss及网络损失

为了建立类别间的联系,文章引入了Affinity Loss,这个损失使得网络不仅考虑类内的像素同时考虑类间不同类别的像素。在给定GT的情况下就可以获取每个像素的上下文信息,文章就是利用GT的信息来引导先验信息(Ideal Affinity Map)的建立。

对于一张输入到分割模型中的图片,其经过编码之后特征图的宽高为 H ∗ W H*W HW,则这里需要将对应的GT进行下采样到同样的尺寸得到 L ^ \hat{L} L^,之后对其经过one-hot变换得到 L ^ ′ ∈ R H ∗ W ∗ C \hat{L}^{'}\in R^{H*W*C} L^RHWC的矩阵,之后将其进行reshape之后得到 N ∗ C , N = H ∗ W N*C,N=H*W NC,N=HW的矩阵,之后乘上自己的转置矩阵 A = L ^ ′ L ^ ′ T , A ∈ R N ∗ N A=\hat{L}^{'} {\hat{L}^{'}}^T, A\in R^{N*N} A=L^L^T,ARNN得到最后的Ideal Affinity Map。其计算过程见下图3所示(注意:这里已经onehot变换过了,因而下图中只有0和1,之后用于二分类和特征优化,真正给标签在后面的分割网络里面会再进行优化):
在这里插入图片描述
在进行图2中矩阵P训练约束的之后首先采用常用的交叉上损失函数:
L u = − 1 N 2 ∑ n = 1 N 2 ( a n l o g p n + ( 1 − a n ) l o g ( 1 − p n ) ) L_u=-\frac{1}{N^2}\sum_{n=1}^{N^2}(a_nlogp_n+(1-a_n)log(1-p_n)) Lu=N21n=1N2(anlogpn+(1an)log(1pn))
之后还对图2层中输出的类内和类间像素进行约束,使用的是类内预测值 T j p T_j^p Tjp(精度),真实类内比例 T j r T_j^r Tjr(召回)与真实类间比例 T j s T_j^s Tjs作为损失( j j j代表的是矩阵中的某一行):
在这里插入图片描述
因而,这部分Affinity Loss可以描述为:
L p = λ u L u + λ g L g L_p=\lambda_uL_u+\lambda_gL_g Lp=λuLu+λgLg
在整个网络中,除了上面提到的损失之外,还有最后分割的损失 L s L_s Ls,还外加一个在backbone stage4上的额外损失 L a L_a La,因而网络是由3部分的损失构成的:
L = λ s L s + λ a L a + λ p L p L=\lambda_sL_s+\lambda_aL_a+\lambda_pL_p L=λsLs+λaLa+λpLp

3. 实验结果

性能比较:
在这里插入图片描述
消融实验:
在这里插入图片描述