面向Few-Shot语义分割的部分感知原型网络(ECCV2020)
摘要
现有的方法大多集中在one-way Few-Shot分割的限制性设置上,或者存在目标区域不完全覆盖的问题。本文提出了一种基于原型表示的Few-Shot语义分割框架。我们的关键思想是将整体的类表示分解为一组部分感知原型,能够捕获多样化和细粒度的对象特征。此外,我们提出利用未标记的数据来丰富我们的部分感知原型,从而更好地建模语义对象的类内变量。我们开发了一个新的图神经网络模型,以生成和增强提出的基于标记和未标记图像的部分感知原型。
存在的问题及解决方案
之前的一些工作仅仅关注one-way Few-Shot分割。它们的方法使用密集的成对特征匹配和特定的解码网络来生成分割,因此这些方法通常难以泛化且计算成本高。其次,其它基于原型的方法通常对每个语义类使用整体表示,这很难处理不同部位、姿势或子类别对象的不同外观。更重要的是,所有这些方法都只是表示了一个基于小支持集的语义类,这对捕捉分割任务所需的丰富和细粒度特征变化是有限制的。
我们的主要思想是在两个方向上丰富语义类的原型表示。首先,我们将常用的整体原型表示分解为一个小的部分感知原型集,这些原型能够捕获多样化和细粒度的对象特征,并在语义对象区域产生更好的空间覆盖。此外,受先前图像分类工作的启发,我们将一组未标记的图像合并到我们的支持集中,这样我们的部分感知原型就可以从已标记和未标记的数据源中学习。这使我们能够超越受限制的小支持集,更好地对对象特征的类内变化建模。我们将这种新的问题设置称为半监督少镜头语义分割。基于我们的新原型,我们还设计了一种简单而灵活的匹配策略,既可用于one-way设置,也可用于multi-way设置。
方法
我们的方法的主要思想是通过一个新的原型表示来捕获语义类的类内变异和细粒度特征。具体来说,我们提出将支持对象的通用整体表示分解为每个类的一组部件原型,并额外利用未标记的数据来丰富它们的表示。
我们的网络由三个主要网络组成:一个为任务内的图像计算卷积特征映射的嵌入网络;一个原型生成网络,从标记和未标记的支持图像中提取一组部分感知原型;以及部分感知的掩码生成网络,用于生成查询图像的最终语义分割。
嵌入网络
用来提取图像特征,使用ResNet作为backbone。这里需要注意的一点是在 C − w a y C-way C−way K − s h o t K-shot K−shot的情况下,我们将带标记的支持集 S l S^l Sl的所有图像的特征划分成 C + 1 C+1 C+1个子集: F l = { F k l , k = 0 , 1 , . . . , C } \mathcal{F}^l=\left\{ \mathcal{F}_{k}^{l},k=0,1,...,C \right\} Fl={Fkl,k=0,1,...,C}, C C C表示 S l S^l Sl中包含的类数目,0表示背景类。假定经过嵌入网络后得到到特征为 F ∈ R H f × W f × n c h F\in \mathbb{R}^{H_f\times W_f\times n_{ch}} F∈RHf×Wf×nch,则 F k l \mathcal{F}_{k}^{l} Fkl包含所有被语义类 k k k标记的特征 f ∈ R n c h f\in \mathbb{R}^{n_{ch}} f∈Rnch,类似地我们假定未标记支持集 S u \mathcal{S}^u Su的所有特征表示为 F u \mathcal{F}^u Fu。
原型生成网络
原型生成网络,旨在为每个类生成一组有区别的部分感知原型。原型生成网络包括两个子模块:部分生成模块(Part Generation Module)和部分细化模块(Part Refinement Module)
Part Generation with Labeled Data
部分生成模块从标记的支持集构建一组部分感知原型,以便在对象区域捕获细粒度的part-level变化。
具体地,我们将每个类的原型数量表示为
N
p
N_p
Np和原型集合
P
k
=
{
p
i
}
i
=
1
N
p
,
p
i
∈
R
n
c
h
\mathcal{P}_k=\left\{ p_i \right\} _{i=1}^{N_p},p_{i\in}\mathbb{R}^{n_{ch}}
Pk={pi}i=1Np,pi∈Rnch,为了定义这些原型,首先使用K-means聚类在特征集合
F
k
l
\mathcal{F}_{k}^{l}
Fkl上得到一组数据划分
G
=
{
G
1
,
G
2
,
.
.
.
,
G
N
p
}
\mathcal{G}=\left\{ G_1,G_2,...,G_{N_p} \right\}
G={G1,G2,...,GNp},然后使用平均池化生成初始原型集合
P
∼
k
=
{
p
i
∼
}
i
=
1
N
p
\overset{\sim}{\mathcal{P}}_k=\left\{ \overset{\sim}{p_i} \right\} _{i=1}^{N_p}
P∼k={pi∼}i=1Np
我们进一步将语义类的全局上下文信息合并到部分感知原型中,通过在每个初始原型中增加上下文向量,该向量是基于注意机制从同一类中的其他原型中估计出来的:
Part Refinement with Unlabeled Data
第二个子模块是Part Refinement模块,它通过在额外的未标记的支持图像上丰富原型来捕获每个语义类的类内变化。然而,利用未标注的数据是具有挑战性的,因为未标注的图像特征集 F u \mathcal{F}^u Fu具有更多的噪声,而且通常比标记集合 F k l \mathcal{F}^l_k Fkl体积更大。
我们通过分组和剪枝过程来解决上述两个问题,生成一个更小却更相关的类
k
k
k的特征集合
R
k
u
\mathcal{R}^u_k
Rku,然后,我们设计一个图形注意网络来平滑未标记的特征,并通过聚合这些特征来完善部分感知原型。具体来说,我们的细化过程包括以下三个步骤:
Step-1: Relevant feature generation:
首先利用超像素生成的思想,计算出未标记图像的区域级特征表示。具体来说,我们将SLIC应用于所有未标记的图像,并在
F
u
\mathcal{F}^u
Fu上生成一组分组,分组定义为
R
=
{
R
1
,
R
2
,
.
.
.
,
R
N
r
}
\mathcal{R}=\left\{ R_1,R_2,...,R_{N_r} \right\}
R={R1,R2,...,RNr},我们使用平均池化来生成区域级特征池
R
u
=
{
r
i
}
i
=
1
N
r
\mathcal{R}^u=\left\{ r_i \right\} _{i=1}^{N_r}
Ru={ri}i=1Nr,然后我们为类
k
k
k选取一组相关特征如下:
Step-2: Unlabeled feature augmentation:
对于选择的未标记的特征,第二步的目标是通过在未标记的特征集中合并上下文信息来增强这些区域级表示。这允许我们对语义类的局部和全局线索进行编码。
具体来说,我们在特征集合
R
k
u
\mathcal{R}^u_k
Rku上建立一个全连接图,然后使用以下消息传递函数来计算更新
R
k
u
∼
=
{
r
i
∼
}
i
=
1
∣
R
k
u
∼
∣
\overset{\sim}{\mathcal{R}^u_k}=\left\{ \overset{\sim}{r_i} \right\} _{i=1}^{|\overset{\sim}{\mathcal{R}^u_k}|}
Rku∼={ri∼}i=1∣Rku∼∣
Step-3: Part-aware prototype refinement:
考虑到增强的未标记特征,我们用类似于标记的注意力策略来改进原始的部分感知原型。我们使用局部注意力原始
P
k
\mathcal{P}_k
Pk作为注意力查询来在
R
k
u
∼
\overset{\sim}{\mathcal{R}^u_k}
Rku∼中选择相似的未标记特征,然后将它们合并到
P
k
\mathcal{P}_k
Pk中:
类
k
k
k的最终细化原型集记为
P
k
r
=
{
p
1
r
,
p
2
r
,
.
.
.
,
p
N
p
r
}
\mathcal{P}_k^r=\left\{ p_1^r,p_2^r,...,p_{N_p}^r \right\}
Pkr={p1r,p2r,...,pNpr}
部分感知掩码生成网络
在每个元任务中给与每个语义类和背景的部分感知原型 { P k r } k = 0 C \left\{ \mathcal{P}_{k}^{r} \right\} _{k=0}^{C} {Pkr}k=0C,我们引入了一种简单而灵活的匹配策略来对查询图 I q I^q Iq像进行语义掩码预测。
我们首先匹配每个部分感知原型来得到一个相似度评分:
然后,我们通过max-pooling将类
k
k
k的所有分数映射融合在一起,并通过连接所有类的分数映射生成输出分割分数:
实验结果
结论
在这项工作中,我们提出了一种灵活的基于原型的Few-Shot语义分割方法。我们的方法能够捕获每个语义类的不同外观。为了实现这一点,我们提出了一个部分感知原型表示来编码细粒度的对象特征。此外,我们利用未标记的数据来捕获原型的类内变量,其中我们引入了第一个半监督少镜头语义分割框架。我们开发了一种新的图神经网络模型,用于生成和增强基于支持图像的部分感知原型。