本文由深圳计算机视觉与模式识别重点实验室、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
.
作者对比了几种用于语义分割的模型,分析它们是否包含上述三个特性:
本文的主要贡献在于:
- 总结了语义分割任务中上下文特征向量的三个理想特性,并从这些特性的角度比较了近年基于深层次上下文信息的语义分割方法。
- 提出
Adaptive Context
模块,在估计局部区域权重时,利用局部和全局上下文特征表示的GLA
特性。 - 在三个benchmark上取得SOTA性能。在不使用
MS COCO
做预训练的前提下,在PASCAL VOC 2012
上取得84.2%
的新纪录。
模型构架
像前面提到的,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^s
的affinity map
-
第二个分支中:
pooling
:对输入的特征X
进行adaptive average pooling
,使用1*1 conv
处理得到s*s*512
大小的特征,然后reshape为 s s ∗ 512 s^s*512 ss∗512以匹配第一个分支中生成的affinity map
.
Matrix Prodyct
中对两个分支产生的结果进行矩阵乘法运算得到
h
w
∗
512
hw*512
hw∗512大小的结果,然后reshape为
Z
S
∗
512
Z^S*512
ZS∗512大小的结果,然后,又利用残差连接将最初始的特征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=1∑s×sfs(xi,g(X),j)yjs
但是整篇文章中并没有给出adaptive pooling
是什么???因为本文的创新点就在与Adaprive
,就个人估计的话,这里的adaptive pooling
应该是指,不同尺度的池化操作。
实验结果
实验实施时部分超参数以及优化方式给出了,然后数据增强方式也是沿用之前的做法。感觉很多文章的实验细节部分都差不多。
论文的代码是基于PyTorch
完成的。作者对于三个数据集上取得的结果写的稀疏有致,主要侧重于PASCAL VOC 2012
中的实验过程。
PASCAL VOC 2012
文章首先说明金字塔尺度pyramid scale
对模型是有提升的。
然后对比了不同的backbone以及是否使用GLA
对模型的影响:
然后测试了不同的设置对模型的影响,包括Deep supervision、数据增强、多尺度、微调模型
,【上面的两张表的输入都是单一输入(没有对一张图进行flip等数据增强处理)】从下表可以看出的是微调模型对性能的提升还是比较大的。:
之后就是对比多模型对20类目标的分割性能:
Pascal-Context
ADE20K
这里作者说明了为什么ADE20K
数据集上的mIoU
相对较低,因为其训练数据集的场景多样性和复杂性,很难实现细微的改进。
总结
思路还是跟着PSPNet、DeepLab系列
,结合多尺度、局部全局特征提升语义分割模型性能,然后文章中还使用了残差连接,但是没有交代对模型有多大的提升。另外,疑惑的是Adaptive pooling
是指什么。以及图中的CNN
的具体处理是什么,最终输出的X
其形状如何?猜想是:既然作者将X
经1*1 conv
降低特征图数量之后利用全局平均池化后的结果作为全局信息,原始的X
作为局部信息,那么经CNN
处理后得到的特征图X
应该没有经过很多的卷积池化处理,也即图中的CNN
模块其具体操作应该较为简单。