这篇论文是码隆科技发表在ICCV 2019的论文,这一研究致力于在仅仅给定图像级别标签的情况下精确地检测与分割物体实例。因为手工标注大量训练数据代价高昂,与监督学习、半监督学习等方式相比,它是更适用于现实应用的技术。与以前那些包含多个离线模块的方法不同的是,本篇论文提出了序列化标签传播与增强网络(缩写为 Label-PEnet)。Label-PEnet 基于一种由粗到细的方式,可以递进地将图像级别的标签转化成像素级标签,极大程度地提升了图像数据在工业场景中的应用效率。
Introduction
目标是什么?
Label-PENet的目标是通过弱监督的方式,在仅仅提供图像级标签的状况下,实现state-of-art的对象分割,工作的整体思路是通过一系列级联的模块实现图像级标签向像素级标签的平滑过渡,与粗到细。
贡献总结~
这项工作中,通过四个级联的模块,包括:(1)多标签分类模块、(2)对象检测模块、(3)实例细化模块、(4)实例分割模块,它们依次级联,对物体外观进行反复的挖掘、总结和校正。采用了两阶段的训练过程,以有效的训练了Label-PEnet。
第一,提出了用于弱监督实例分割的序列化标签传播和增强网络(Label- penet)。整个的框架由四个级联的模块组成,这些模块对物体的外观进行重复的挖掘、总结和校正。为有效地训练Label-PEnet,提出了两阶段训练方案。这是利用CNNs从图像级到像素级识别目标的重要一步,从而提高弱监督实例分割的性能。
第二,提出一个提议校准模块来揭示CNNs的分类过程,然后从图像级和对象级监督中挖掘像素级标签。在这个模块中,探索了自顶向下和自底向上的方法,并将它们结合起来以提高识别目标像素的准确性。
第三,为了验证所提出的Label- PEnet的有效性,我们在标准基准上进行了实验:PASCAL VOC 2007和 PASCAL VOC 2012。实验结果表明,Label- PEnet的性能明显优于现有的方法,甚至可以与完全监督的方法相媲美。
Preliminary and Overview
给定一个图像级标签
y
I
=
[
y
1
,
y
2
,
.
.
.
,
y
C
]
T
y_I=[y^1,y^2,...,y^C]^T
yI=[y1,y2,...,yC]T关联的图像
I
I
I,我们的目标是对于每一个实例分割,去估计像素级的标签
Y
I
=
[
y
1
,
y
2
,
.
.
.
,
y
P
]
T
Y_I=[y_1,y_2,...,y_P]^T
YI=[y1,y2,...,yP]T,
C
C
C是对象类别的数量,
P
P
P是
I
I
I的像素个数,
y
l
y^l
yl是一个二进制值,其中
y
l
=
1
y^l=1
yl=1表示图像
I
I
I包含着
l
−
t
h
l-th
l−th对象类别,反之,
y
l
=
0
y^l=0
yl=0。像素p的标签由c维的二进制向量
y
p
y_p
yp表示。这是关于文章的相关符号含义的说明。
整个的网络如下图Fig.1所示:
网络的核心:级联模块
Multi-Label Classification Module. 使用图像级类别标签,通过选择性搜索生成一组对象建议
R
=
(
R
1
,
R
2
,
.
.
.
,
R
n
)
R=(R_1,R_2,...,R_n)
R=(R1,R2,...,Rn),然后将这些候选对象作为输入,输入到多标签分类模块当中,以更高的置信度收集建议,并学习去识别在分类任务中起关键作用的像素。
对于一个
W
×
H
W\times H
W×H的图像
I
I
I,用一个步长为
λ
s
\lambda_s
λs的深度神经网络去进行分类的学习,那么网络的输出就是
H
/
λ
s
×
W
/
λ
s
H/\lambda_s \times W/\lambda_s
H/λs×W/λs大小的特征图,然后在特征图上进行ROI Pooling操作,计算
∣
R
∣
|R|
∣R∣中每个提议对象的特征,得到图像
I
I
I的
∣
R
∣
|R|
∣R∣的区域特征,将两个全连通层分别用于计算的得到的区域特征,通过Fig 1 c中的Multi-Label Classification module就可以观察到,生成的分类结果为
x
c
,
1
∈
R
∣
R
∣
×
C
x^{c,1}\in \R^{|R|\times C}
xc,1∈R∣R∣×C和权重矩阵
x
p
,
1
∈
R
∣
R
∣
×
C
x^{p,1}\in \R^{|R|\times C}
xp,1∈R∣R∣×C,提议权重表示在图像级多标签分类中每个提案对
C
\mathcal{C}
C类的贡献,应用softmax函数将权重归一化为
其中
x
i
,
j
p
,
1
x_{i,j}^{p,1}
xi,jp,1代表的是第
j
j
j个类别中的第
i
i
i个提议的权重,那么
w
i
,
j
p
,
1
∈
R
∣
R
∣
×
C
w_{i,j}^{p,1}\in \R^{|R|\times \mathcal{C}}
wi,jp,1∈R∣R∣×C就是一个标准化的权重矩阵,然后我们通过按照元素乘积的方式来计算不同类别上的每个提议的最终得分
x
1
=
x
c
,
1
⨀
w
p
,
1
x^1 = x^{c,1}\bigodot w^{p,1}
x1=xc,1⨀wp,1, 图像级多标签分类的最终的结果是对每个类相关的多有的提议进行求和来计算的,即
s
c
1
=
∑
i
=
1
∣
R
∣
x
i
c
1
s_c^1=\sum_{i=1}^{|R|}x_{ic}^1
sc1=∑i=1∣R∣xic1,这样输入图像
I
I
I的最终得分向量为
s
1
=
[
s
1
1
,
s
2
1
,
.
.
.
,
s
C
1
]
s^1=[s^1_1,s_2^1,...,s_C^1]
s1=[s11,s21,...,sC1],表示每个类的置信度。然后用softmax函数对
s
1
s^1
s1进行计算得到一个概率向量
p
^
1
=
[
p
^
1
1
,
p
^
2
1
,
.
.
.
,
p
^
C
1
]
\widehat{p}^1=[\widehat{p}^1_1,\widehat{p}^1_2,...,\widehat{p}^1_{\mathcal{C}}]
p
1=[p
11,p
21,...,p
C1],图像级多标签分类的损失函数为:
Proposal Calibration. 这个是不属于4个模块的,是一个调优优化的模块,Fig1 详细的网络架构图中,在Multi-Label Classification Module和Object Detect Module中有所描述。
文章从激励反向传播(Excitation BP)中获得了启发,使用预测的分类得分为每一个提议计算一个注意力图。给出一个提议
R
i
R_i
Ri,它的类别预测的得分为
x
I
c
,
1
∈
R
C
x_I^{\mathcal{c},1}\in R^{\mathcal{C}}
xIc,1∈RC,然后再使用softmax函数得到一个归一化的向量
w
i
c
,
1
w_i^{\mathcal{c},1}
wic,1,使用最高值预测对应的类别为
c
i
c_i
ci,那么对于我们的权重矩阵
w
i
c
,
1
w_i^{\mathcal{c},1}
wic,1,除了第
c
i
c_i
ci个元素,其他元素全部设置为0,这样我们就得到了一个类别激活向量
α
i
c
,
1
∈
R
C
\alpha_i^{\mathcal{c},1}\in \R^{\mathcal{C}}
αic,1∈RC,如Fig.2所示,执行Excitation BP[41]从分类层前馈到ROI pooling层,对于提议
R
I
R_I
RI,生成一个proposal attention map
A
i
A_i
Ai,然后对于图
I
I
I中带有标签的
c
\mathcal{c}
c的提议,我们使用分类的分
x
c
,
1
x^{\mathcal{c},1}
xc,1进行NMS操作,进而得到得分最高的对象候选
R
c
R^{\mathcal{c}}
Rc,对于被
R
c
R^{\mathcal{c}}
Rc抑制的提议对象,也并没有直接的抛弃,而是通过将他们投影到图像中相应的位置来产生类别
c
i
c_i
ci的注意力图
A
c
A^c
Ac,其实也就是说,对于NMS这个地方,凡是大于设定的阈值的提议候选,自然就认定提议和我们类别是相关的,那么将他们所有的都投影到图像中相应的位置来产生类别
c
i
c_i
ci的注意力图,这样应该是比较全面的。
这样最后我们就得到一个对象实例注意力图的集合:
A
=
[
A
1
,
A
2
,
.
.
.
,
A
C
]
∈
R
×
H
×
W
A=[A^1,A^2,...,A^{\mathcal{C}}]\in \R^{\mathcal \times H\times W}
A=[A1,A2,...,AC]∈R×H×W,和背景图
A
0
=
m
a
x
(
0
,
1
−
∑
l
=
1
C
y
l
A
l
)
A_0=max(0,1-\sum_{l=1}^{\mathcal{C}}y^lA_l)
A0=max(0,1−∑l=1CylAl)
(这个地方我总感觉论文是不是写错啦,应该是
y
l
A
l
y^lA^l
ylAl)
除了注意力图之外,还进一步为每个实例类计算了一个对象热图,对于实例
c
c
c的对象的热图,通过用类
c
c
c对所有的提议进行像素级求和可以得到,对于类别c,使用相应的分类的分,以及进一步使用注意力图和对象热图来得到最终的instance confident maps,然后使用了条件随机域CRF 进行对对象实例进行更精确的分割。对于边界框和分割掩码,使用候选对象(如KaTeX parse error: Expected 'EOF', got '}' at position 16: R^\{\mathcal{c}}̲)的分类得分作为权重,得到预测的实例权重
W
1
∈
R
K
W^1\in \R^{\mathcal{K}}
W1∈RK,用它来引导接下来的物体检测模型的训练。
Object Detection Module. 将对象提议边界框
B
1
B^1
B1和对应的权重
W
1
W^1
W1作为ground truth 来训练一个标准的对象检测模型,跟Faster-RCNN的训练方式类似,在ground truth边界框的附近对正反两种提议进行采样,Faster RCNN的话应该是IOU大于0.7的为正例,小于0.3的为负例,其他的不管,对于采样的提议的权重,将其设置为与ground truth相同的权重,那么RPN网络的损失函数就可以修改为:
N
r
p
n
N_{rpn}
Nrpn是候选的提议的数量,
w
i
w_i
wi是预测的对象得分,
t
i
t_i
ti是预测的位置偏移量,
w
i
∗
w_i^*
wi∗是提议的权重,
t
i
∗
t_i^*
ti∗是输入的作为grounding truth的坐标(其实这个并不是一个真实的坐标),
λ
\lambda
λ是一个常数,
L
o
b
j
、
L
c
l
s
、
L
r
e
g
L_{obj}、L_{cls}、L_{reg}
Lobj、Lcls、Lreg分别是二进制对象或非对象损失、分类损失和边界框回归损失。对于RCNN部分的损失函数,如下所示:
p
i
p_i
pi是分类的得分,
p
i
∗
p_i^*
pi∗表示对象的类别。
N
r
c
n
n
N_{rcnn}
Nrcnn是RPN产生的提议的数量,
L
c
l
s
L_{cls}
Lcls是分类的损失。对于Faster-RCNN结构,也就是Object Detection Module,也增加了一个提议校准来优化目标提议。不同于分类模块中的提议优化的是,在检测模块对于多个标签能够产生多个目标候选,而不仅仅是为每个标签输出一个候选对象。最后,我们可以用对应的边界框
T
2
T^2
T2和权重
W
2
∈
R
J
W^2\in \R^{\mathcal{J}}
W2∈RJ来获得多个实例标记
S
2
S^2
S2,其中
J
\mathcal{J}
J表示对象实例的数量。
我觉得这里的RPN的损失函数跟Faster-RCNN中的损失函数是相似的,只是在这个模块中,训练时的,输入的ground truth 本来就是前面的模块预测的,不是真实的,其他的应该是一样。
Instance Refinement Module. 使用生成的instance mask
S
2
S^2
S2和对象边界框
T
2
T^2
T2,我们可以训练一个实例分割的任务。在这个模块中,实现了针对像素级预测的实例推理,而不是对提议进行校准。
Instance Segmentation Module. 在这个模块中,已经成功地将图像级标签转换为像素级标签。可以以完全监督的方式执行标准实例分割,只需遵循在实例细化模块中实现的训练策略。最终结果可以在推理过程中生成。
Training
一个两阶段的训练过程,包括级联前训练和级联后的课程学习。利用前一个模块的输出,循环渐进的进行训练,并逐步的加强监督信息。
Cascaded Pre-Training 固定backbone,然后按照顺序训练四个级联模块,包括多标签分类、对象检测、实力优化、实例分割,对每一个模块的训练进行收敛,使模型输出得到很好的正则化和细化,然后将这些输出作为下一个模块的监督。进而将弱监督的实例分割任务分解为4个子任务,将图像级监督逐步的平滑过渡到稠密的像素级预测上。
Forward-Backward Learning with Curriculum. 一个 比较复杂的任务是四个模型的序列化训练,因为有可能会让网络陷入局部最小值,那么针对这个问题,文中提出了一直利用课程学习的前向-后向学习方法,这个方法分为前向课程学习阶段和后向验证阶段,如Fig.1所示。在前向课程学习中,四个模块是依次训练的,监督信息逐步增强,而在反向验证中,训练是按照相反的顺序进行的,反向验证从实例分割模块开始,只在模块上进行推理,并为实例细化模块生成对象位置和实例mask,然后用全监督的方式训练实例细化模块,为对象检测模块提供对象位置。在多标签分类模块中,我们对用SS产生的proposal与检测模块检测到的物体的IOU大于0.5的proposals,进行单标签的分类,与此同时,依旧保持着多标签的分类任务的训练。