语义分割CVPR2020-Context Prior for Scene Segmentation -基于上下文先验知识的场景分割

论文地址
开源代码

0.摘要

近几年的研究工作已经广泛地研究了上下文的依赖性在语义分割中的重要性。然而,大多数方法很少区分不同类别之间的上下文依赖关系(比如 non-local)的机制就是计算特征图像素点之间的关系,这肯定会引入不同类别之间的依赖关系,但是并不是所有的类间依赖关系都是对最后的模型性能有益的,甚至可能有害),这可能会影响语义分割模型的性能。基于此,作者设计了一个即插即用的通用模块:context prior layer(上下文先验层)。在这个层中,**作者根据GT首先形成的Ideal Affinity Map去监督类内和类间信息的产生,从而从原理上规范了类内和类间上下文信息的分离。**可以说,这篇文章的最重要的点围绕在明确区分类内和类间上下文。

1.概述

由于卷积层结构的限制,FCN提供的上下文信息不足,有待改进。因此,近年来各种方法被提出来用于探索上下文依赖性,以获得更准确的分割结果。目前为止,上下文信息的聚合主要有两种方法:

  • 基于金字塔的方法:有几种方法如PSPNet采用基于金字塔的模块或全局池化来有规律的聚合区域或全局上下文信息。然而,它们捕获了同类的上下文关系,却忽略了不同类别的上下文。
  • 基于注意力的方法:最近基于注意力的方法,如通道注意力、空间注意力,有选择地聚合不同类别之间的上下文信息。然而,**由于缺乏明确的区分,注意力机制的关系描述不够清晰。因此,它可能会选择不需要的上下文依赖关系。
    总的来说,这两种方法聚合上下文信息,没有明显的区别类内和类间上下文 ,导致了不同上下文关系的混合。
    作者注意到,确定的上下文依赖关系确实有助于网络理解场景。同一类别(类内上下文)的相关性和不同类别(类间上下文)的差异性使得特征表示更加健壮,减少了可能类别的搜索空间。但与此同时,有些类间上下文对最后的结果是有害的。因此,作者将ground truth建模
    类内和类间的先验知识,从而去监督网络上下文信息的学习,以获得更准确的预测,**这对语义分割非常重要。

2.相关工作

2.1.上下文聚合

获取上下文依赖关系主要有两种途径。

  • PSPNet采用金字塔池模块将特征地图划分为不同比例的区域。它平均每个区域的像素,作为该区域中每个像素的局部上下文。同时,Deeplab[1,3,5]方法采用了阿托斯空间金字塔池来采样不同范围的像素作为局部上下文。
  • DANet、OCNet和CCNet利用自相似方式聚合远程空间信息。此外,EncNet、DFN和ParseNet使用全局池来获取全局上下文。尽管这些注意机制取得了成功,但它们可能捕获了不需要的上下文依赖,而没有明确区分不同上下文关系的差异。
    尽管这些注意机制取得了成功,但它们可能捕获了不需要的上下文依赖,而没有明确区分不同上下文关系的差异。因此,在所提出的方法中,我们显式地正则化模型以获得类内和类间上下文依赖。

2.2.注意力机制

对于语义分割任务,受SENet[16]的启发,一些方法,如EncNet[45]、DFN[43]和BiSeNet采用通道注意来选择所需的特征图。DANet和OCNet[使用自我注意来捕捉长期依赖,而PSANet则使用适应性学习集中注意力获取长期信息。然而,这些有效的方法缺乏明确的正则化,可能导致不希望的上下文聚合。因此,在我们的工作中,我们提出了一种嵌入在上下文先验层中的上下文先验,并带有显式的亲和力损失来监督学习过程。

3.提出的方法

3.1.概括

在这里插入图片描述

图二:所提出的上下文先验层
上下文先验层包含一个聚合模块(Aggregation)和一个由Affinity Loss监督的上下文先验特征图(Context Prior Map)先验映射。通过提取到的输入特征,聚合模块对空间信息进行聚合,推理上下文关系。在Affinity Loss的监督下,生成了一个point-wise的Context Prior Map。Affinity Loss构造了一个Ideal Affinity Map,它表明了同一类别的像素,并以此来监督Context Prior Map的学习
基于上下文先验映射,我们可以得到帧内先验(P)和帧间先验(1-P) 。原始特征图的形状为N×C1,其中N=H×W。我们对重塑形状的特征图与 P 和(1-P) 进行矩阵乘法捕获类内和类间上下文。最后,我们将上下文前一层的表示输入到最后一个卷积层,以生成逐像素预测。
Aggregation:聚合模块、Conv:卷积层、ⓧ:矩阵乘法、P:Context先验映射、Concat:concatenate操作)。

设计上下文先验层(Context Prior Layer),它可以在任何backbone的最后插入以进行语义分割的任务。Context Prior Layer 使用backbone如resnet50输出的特征图(图中最左边的黄色立体)作为输入。经过聚合模块(Aggregation)聚合局部上下文信息之后,送入一个卷积层与sigmoid层进行处理,最后进行reshape得到了Context Prior Map。Context Prior Map由GT产生的Ideal Affinity Map进行监督,学习得到了类内的上下文信息。将他与经过聚合后的特征图相乘后得到富含类内上下文信息的特征图,与此同时,用***1-P***得到可以得到类间上下文,同样的操作可以得到富含类间上下文信息的特征图。将类间、类内、原图进行concat后上采样,便得到了预测图。

2.2.Affinity Loss

在这里插入图片描述

对于图像中的每个像素,Affinity Loss使网络考虑相同类别的像素(上下文内)和不同类别(上下文间)中的像素。给定输入的ground truth,我们可以知道每个像素的“Context Prior”(即,哪些像素属于同一类别,哪些像素不属于同一类别)。可以学习Context Prior去引导整个网络。首先根据ground truth建立Ideal Affinity Map作为监督:给定输入图像 I 和其对应的ground truth L,将 I 送入网络中可以得到一个大小为HxW的特征图X。像上图一样,我们先将L下采样到与X大小相同,得到一个更小的groundtruth L 。我们使用了one-hot编码去对L中的类别标签进行编码,得到一个大小为HxWxC的矩阵L, C为类别数。紧接着,将L**Reshape成NxC大小,N=HxW。最后,我们进行一个矩阵乘法:A=L L∧T,这个A就是我们期望的Ideal Affinity Map,大小为NxN**。 我们使用Ideal Affinity Map去监督Context Prior Map的生成。
那么这个Ideal Affinity Map有什么可以让网络学习的地方信息呢?事实上,Ideal Affinity Map中的第j行(1 <= j <= N)代表着H×W个像素中的第j个像素,与所有像素的关系。
举例:如果第j个像素与第i个像素属于相同类别,那么Ideal Affinity Map中第j行第i列的值为1,否则为0。看到这里也就明白了,其实Ideal Affinity Map中蕴含了相当丰富的类内信息,而1-Ideal Affinity Map则为丰富的类间信息。所以通过Affinity Loss使得Context Prior Map能够学习到这些信息。
对于prior map中的每一个像素,其实是一个二分类问题。通常解决二分类问题用到的是二元交叉熵损失:
在这里插入图片描述其中,{pnP,n ∈ [1, N2]},P为预测得到的Prior MAP,{anA,n ∈ [1, N2]},A为期望得到的Ideal Affinity MAP。
但它只考虑了在Prior Map中的单个像素,忽略了与其他像素的语义联系,先验图P中的每一行其实是和Ideal Affinity Map A相关的,可以它们表示为同类像素或者不同类像素(有点邻接矩阵的意思),这个关系是有助于推理语义相关性和场景结构的。因此,我们考虑把同类像素和不同类像素作为两个部分来对关系分别编码,设计了基于二进制交叉熵损失的全局项:
在这里插入图片描述其中,(2)(3)(4)分别表示P中第j行的同类准确率(precision),同类召回率(recall),特异度(specificity)。
最后,完整的Affinity Loss定义如下:在这里插入图片描述
其中Lp、Lu和Lg分别表示Affinity损失、一元损失(二元交叉熵损失)和全局损失函数。此外,λu和λg分别是一元损失和全局损失的平衡权重。根据经验,我们将权重设置为:λu=1和λg=1

3.3.Context Prior Layer

在这里插入图片描述
如上图,Context Prior Layer得到一个输入特征X,形状为HxWxC0。我们使用聚合模块(aggregation module)将X变为X,形状为HxWxC1。得到 X 之后,进行1x1卷积+ BN + Sigmoid,形状变为HxWxN(N=HxW)去学习一个先验图 P。 在Affinity Loss的明确监督下,Context Prior Map P可以对类内(intra-class)像素和类间像素(inter-class)之间的关系进行编码。

  • 类内(intra-class)为:Y=P×X,这里的X 的尺寸将会被reshape成NxC1,这个操作会让Prior map能够自适应地为特征图选择类内像素作为类内上下文(intra-class context)。
  • 相反,反转的Prior Map可以选择性地突出类间(inter-class)像素,让其作为类间上下文(inter-class context):Y =(1-P)×X,其中的 1 为和P大小相同的全1矩阵。
    最后,我们将原始特征和两种上下文Concat去输出最终的预测F = Concat(X, Y, Y),有了这两种上下文,就可以推测每个像素的语义相关性和场景结构。

3.4. Aggregation Module

Context Prior Map需要一些局部空间信息来推断语义相关性。因此,作者设计了一个具有**完全可分离的卷积(在空间和深度维度上都是分离的)**的高效聚合模块来聚合空间信息。
在这里插入图片描述
一个kxk的卷积,我们这样来替代:先使用一个kx1卷积,接着再使用一个1xk卷积,我们称为空间可分离卷积(spatial separable convolution),并且每个空间卷积都采用深度都采用深度卷积(depth-wise convolution),这导致计算量大大减少。由于考虑了空间和深度两个维度,作者把这种方式称为Fully Separable Convolution

3.5.网络整体

上下文优先网络(CPNet)是由主干网络和上下文优先层组成的完全卷积网络,如图2所示。主干网是一个现成的卷积网络,例如ResNet,具有扩张策略。在上下文前一层,聚合模块首先高效地聚合一些空间信息。基于聚集的空间信息,上下文优先层学习上下文优先映射以捕获类内上下文和类间上下文。同时,亲和力损失规范了上下文先验知识的学习,而交叉熵损失函数则是分割监督。我们在骨干网络的第4阶段采用了辅助损耗,这也是一种交叉熵损耗。最终损失函数如下所示:在这里插入图片描述
其中Ls, La, Lp 分别代表主要分割损失(main segmentation loss),辅助损失(auxiliary loss)以及Affinity Loss,λs, λa, λp 是用来平衡loss的权重。经验性地设置为:λs=1, λa=1, λp=0.4。

4.实验

4.1.实验设置

  • Network: ResNet作为预训练,output_stride=8, 在Backbone的阶段4使用辅助损失(auxiliary loss),在Aggregation Module中fullyseparable convolution的卷积核大小为11。
  • Data Augmentation:采用均值减法,随机水平翻转、随机尺度变化({0.5, 0.75, 1.0, 1.5, 1.75, 2.0}),最后在训练时,我们随机剪裁大图像或者填充小图像到固定的尺寸。
  • Optimization:SGD(momentum=0.9, weight decay=10-4, batch size=16),使用了poly训练策略。
  • Inference:在预测阶段,用多尺度和翻转输入的平均预测作为预测结果,提高性能。

4.2.ADE20K数据集的评估

4.2.1.消融实验

首先:基于ResNet-50 评估了具有扩张卷积的FCN模型;之后,我们在ResNet主干的第4级增加了辅助损耗,这可以将mIoU提高1.86% (34.38% → 36.24%),将pixAcc提高0.86% (76.51% → 77.37%)。再采用不同的聚合上下文的方法评估,如表:
在这里插入图片描述

Aux:auxiliary loss,BCE:binary cross entropy loss,AL:Affinity Loss,MS:multi-scale and flip testing strategy.

还研究了聚合模块、内部分支、内部分支和亲和损失在我们的CPNet模型中的有效性。与基线模型相比,聚合模块将mIoU和pixAcc提高了5.27% / 2.56%。利用基于二元交叉熵损失的内部分支,我们的单尺度测试结果在mIoU和pixAcc方面获得42.34% / 80.15%,超过基线6.1% / 2.78%。另一方面,在相同的设置下,InterPrior分支达到42.88% / 79.96%。这两个显著的改进都表明了所提议的上下文的有效性。基于内部分支,亲和损失可以将mIoU和pixAcc提高0.4% / 0.15%,而基于内部分支,可以提高0.55% / 0.25%。我们将内部分支和内部分支与亲和力损失相结合,实现了43.92%的mIoU和80.77%的pixAcc,这表明两个优先级可以互补。为了进一步提高性能,我们应用了多尺度和翻转测试策略来实现44.46%的mIoU和81.38%的pixAcc。更深的网络导致更好的特征表示,我们的CPNet获得了45.39%的mIoU和81.04%的pixAcc。在测试策略下,基于ResNet-101的模型实现了46.27%的mIoU和81.85%的pixAcc。在这里插入图片描述

实验结果(mIoU)基于不同的内核大小,有/或没有上下文先验。(k:完全可分卷积的核大小,∆:引入上下文先验CPContext优先的改进。)
推广到PPM和ASPP模块。评估指标为mIoU(%)。(PPM:pyramid池模块、aspp:atrus空间金字塔池、CP:Context-Prior、AM:聚合模块。)

4.2.2.分析

  • 空间信息与背景先验的影响。
    区分上下文的依赖关系有助于场景理解。因此,我们提出一个语境优先模型来模拟语境内和语境间。同时,上下文先验需要一些空间信息来推理这种关系。为此,我们在上下文优先层中集成了一个聚合模块。随着过滤器尺寸的增加,没有上下文先验的模型获得接近的结果。然而,在上下文先验的情况下,每个模型都能稳定地实现改进。同时,随着过滤器尺寸的增加,改进逐渐增加。当滤波器尺寸为11时,性能(43.92% mIoU)和相对增益(2.41%)达到峰值。
  • 推广到其他空间信息聚合模块。
    用PPM或ASPP模块替换聚合模块,以在相似性损失的监督下生成上下文先验图。与没有上下文先验的PPM相比,上下文先验可以进一步提高1.06%的mIoU,比ASPP提高2.3%,比我们的聚合模块高出2.41%。此外,在没有上下文优先的情况下,与PPM和ASPP模块相比,我们的聚合模块也实现了最高的性能。
    在这里插入图片描述

图六:我们的CPNet预测的先前地图的可视化。(a) 我们只使用聚合模块来生成注意图,而不需要对亲和力丢失进行监控。(b) 在Affinity loss的指导下,上下文优先层可以捕获类内上下文和类间上下文。(c) Ideal Affinity Map是从基本事实出发构建的。深颜色显示出更高的响应。

4.3.PASCAL上下文的评估

在这里插入图片描述

表4:ADE20K验证集的定量评估。所提出的CPNet与现有的分割算法相比具有良好的性能
在这里插入图片描述
PASCAL上下文验证集的定量评估。建议的CPNet与现有的分割方法相比表现良好。†表示该方法使用额外的数据集。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值