title

本文由深圳计算机视觉与模式识别重点实验室、SIAT-SenseTime联合实验室中国科学院深圳先进技术研究院、上海交大、香港中文大学联合出品。发表于CVPR2019
论文地址:APCNet:Adaptive Pyramid Context Network for Semantic Segmentation
项目代码基于Pytorch,但尚未开源…


背景

最近的研究表明结合上下文特征能够显著的提升深度语义分割模型性能。这些模型的差异仅仅在于在实际中它们构造上下文特征的方式不同。这篇文章首先介绍了语义分割任务中上下文特征的三个理想特性。作者发现尽管Global-guided Local Affinity(GLA)在构建上下文特征时起这重要作用,但是之前的研究者却往往忽略了这一点。基于此,作者提出用于语义分割的Adaptive pyramid context network,APCNet,ACPNet构造的主体是多个Adaptive Context Modules,ACMS。每个ACM利用全局图像表示作为指导估计每个区域的Affinity系数,然后计算这些上下文Affinity的上下文向量。
本文的实验在PASCAL VOC 2012、Pascal-Context、ADE20K数据集上完成。实验表明,APCNet在上述三个数据集中都取得了SOTA性能,其中在PASCAL VOC 2012测试集上class-level的mIOU为84.2%.

语义分割任务中上下文特征的三个特性:

  • Multi-scale : 物体通常具有不同的大小和位置,所以有必要从不同尺度捕捉图像内容。没有多尺度上下文的方法只能捕获单尺度的对象,在其他尺度上会丢失细节。
  • Adaptive:并不是输入图像中的所有区域对给定像素的语义标签都有同等的作用。区域中包含相关物体的能够产生有效信息,而其他区域则只能产生少量信息。在实际中,与给定像素点相关的区域或者像素点既可能在该点附近,也有可能与该点相距较远,这和输入图片的内容及其分布有关。因此,自适应地识别这些重要因素非常重要。
  • Global-guided Local Affinity(GLA) :为了构建有效的上下文特征,应该整合相关像素点、相关区域的特征。在实际中,通常的做法是以相同的权重累加这些特征。如何估计整合时候的Affinity权重是一个问题。这些权重反映的是不同的区域在预测某一像素点标签时的差异。之前的模型在估计这些自适应权重时只考虑了局部像素、区域的表征。而在本文中结合局部、全局表征信息估计健壮的权值。全局特征表示的确有助于提升语义分割结果。【这里就是说结合全局表征之后,不同区域、像素点对某一像素点的标签预测任务,不再以完全相等的权重整合这些特征】

本文提到了几篇2018年的文章,是利用注意力机制完成语义分割任务,有DANet、PSANet.

作者对比了几种用于语义分割的模型,分析它们是否包含上述三个特性:
comparison
本文的主要贡献在于:

  • 总结了语义分割任务中上下文特征向量的三个理想特性,并从这些特性的角度比较了近年基于深层次上下文信息的语义分割方法。
  • 提出Adaptive Context模块,在估计局部区域权重时,利用局部和全局上下文特征表示的GLA特性。
  • 在三个benchmark上取得SOTA性能。在不使用MS COCO做预训练的前提下,在PASCAL VOC 2012上取得84.2%的新纪录。

模型构架model

像前面提到的,APCNet的主体结构是对于某一特征图利用并行的多个ACM模块进行处理,整合后经卷积得到最终输出。
上图主要包含两个分支:其中第一个分支用以计算affinity coefficients α s \alpha ^s αs,而第二个分支处理单一尺度下的表征 y s y^s ys
注意到图中用不同颜色的方块表示不同的part,如下说明:

  • 第一个分支中:
    X:x代表经过CNN模型处理后得到的特征图。
    g(X):代表全局信息。对上述的特征图利用1*1 conv降低特征图维度,得到x,然后利用spital global average pooling,空间全局池化操作得到全局特征信息表征g(X).
    a^s:在每一个像素点上,利用1*1 conv对局部特征 x i {x_i} xi和全局向量 g ( X ) g(X) g(X)进行操作,后接一个Sigmod激活函数。【这里作者测试过如果使用更大的卷积核会降低性能】
    Affinity Matrix:对于上述得到的Affinity vector其大小均为s*s,对于h*w个vector将其整合为一个大小为hw * s^saffinity map

  • 第二个分支中:
    pooling:对输入的特征X进行adaptive average pooling,使用1*1 conv处理得到s*s*512大小的特征,然后reshape为 s s ∗ 512 s^s*512 ss512以匹配第一个分支中生成的affinity map.

Matrix Prodyct中对两个分支产生的结果进行矩阵乘法运算得到 h w ∗ 512 hw*512 hw512大小的结果,然后reshape为 Z S ∗ 512 Z^S*512 ZS512大小的结果,然后,又利用残差连接将最初始的特征x累加到这个结果上。

文中的创新应该在与对于某像素的标签预测问题,对不同的区域、像素分配不同的权重,作者这里给了一个比较抽象的描述:
adaptive context vector的计算公式为: z i s = ∑ j = 1 s × s α i j s y j s \mathbf{z}_{i}^{s}=\sum_{j=1}^{s \times s} \alpha_{i j}^{s} \mathbf{y}_{j}^{s} zis=j=1s×sαijsyjs
其中, α i , j s = f s ( x i , g ( X ) , j ) \alpha_{i, j}^{s}=f_{s}\left(\mathbf{x}_{i}, g(\mathbf{X}), j\right) αi,js=fs(xi,g(X),j)
最后得到的算式为: z i s = ∑ j = 1 s × s f s ( x i , g ( X ) , j ) y j s \mathbf{z}_{i}^{s}=\sum_{j=1}^{s \times s} f_{s}\left(\mathbf{x}_{i}, g(\mathbf{X}), j\right) \mathbf{y}_{j}^{s} zis=j=1s×sfs(xi,g(X),j)yjs

但是整篇文章中并没有给出adaptive pooling是什么???因为本文的创新点就在与Adaprive,就个人估计的话,这里的adaptive pooling应该是指,不同尺度的池化操作。


实验结果

实验实施时部分超参数以及优化方式给出了,然后数据增强方式也是沿用之前的做法。感觉很多文章的实验细节部分都差不多。
论文的代码是基于PyTorch完成的。作者对于三个数据集上取得的结果写的稀疏有致,主要侧重于PASCAL VOC 2012中的实验过程。

PASCAL VOC 2012

文章首先说明金字塔尺度pyramid scale对模型是有提升的。

PS
然后对比了不同的backbone以及是否使用GLA对模型的影响:

models
然后测试了不同的设置对模型的影响,包括Deep supervision、数据增强、多尺度、微调模型,【上面的两张表的输入都是单一输入(没有对一张图进行flip等数据增强处理)】从下表可以看出的是微调模型对性能的提升还是比较大的。:

setting
之后就是对比多模型对20类目标的分割性能:

model com

Pascal-Context

CONTEXT

ADE20K

这里作者说明了为什么ADE20K数据集上的mIoU相对较低,因为其训练数据集的场景多样性和复杂性,很难实现细微的改进。
ade20k


总结

思路还是跟着PSPNet、DeepLab系列,结合多尺度、局部全局特征提升语义分割模型性能,然后文章中还使用了残差连接,但是没有交代对模型有多大的提升。另外,疑惑的是Adaptive pooling是指什么。以及图中的CNN的具体处理是什么,最终输出的X其形状如何?猜想是:既然作者将X1*1 conv降低特征图数量之后利用全局平均池化后的结果作为全局信息,原始的X作为局部信息,那么经CNN处理后得到的特征图X应该没有经过很多的卷积池化处理,也即图中的CNN模块其具体操作应该较为简单。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐