目录
通过引入cross-view和intra-view的约束,提升类内一致性(intra-class compactness)和类间区分性(inter-class dispersion)。优点就是在不增加推理计算量的情况下,提升(弱)监督场景下的分割效果。我觉得这样的约束,在强监督场景下也可以使用,弥补交叉墒损失的缺陷。
CAM计算
CAM: Class Activation Map
以图像分类问题为例,经过backbone提取特征后,最后一个卷积的特征为
f
∈
R
D
×
H
W
f \in R^{D\times HW}
f∈RD×HW,
H
W
HW
HW为特征图维度,
D
D
D为通道维度。再用一个
G
l
o
b
a
l
A
v
e
r
a
g
e
P
o
o
l
i
n
g
(
G
A
P
)
Global \, Average\,Pooling\,(GAP)
GlobalAveragePooling(GAP)聚合空间特征。最后用一个
w
∈
R
C
×
D
w\in R^{C\times D}
w∈RC×D映射到类别空间。
本文在计算CAM时,直接对特征
f
f
f做一个通道数为
C
C
C的1x1卷积,得到
f
′
∈
R
C
×
H
W
f^{'} \in R^{C\times HW}
f′∈RC×HW。对
f
′
f^{'}
f′做个
R
e
L
U
ReLU
ReLU操作,得到CAM。在
f
′
f^{'}
f′的基础上,做一个
G
A
P
GAP
GAP操作,得到每个类别
c
c
c的
s
c
o
r
e
score
score。
Pixel-to-Prototype Contrast
每个类别,都存在一个具有代表性的
e
m
b
e
d
d
i
n
g
embedding
embedding,也就是
p
r
o
t
o
t
y
p
e
prototype
prototype, 用
P
=
{
p
c
}
c
=
1
C
P=\{{p_c}\}^{C}_{c=1}
P={pc}c=1C来表示。这里的目标就是在投影特征空间,通过对比学习,让每个像素学到具有区分性的特征
e
m
b
e
d
d
i
n
g
embedding
embedding。这篇文章中,投影空间中,每个像素embedding
v
i
∈
R
128
v_i\in R^{128}
vi∈R128,通过1x1卷积+ReLU得到。核心思想就是推远每个像素和其他类别prototype之间的距离,拉近每个像素和正确类别prototype之间的距离。loss计算如下,比较像交叉墒损失。
F
(
v
i
;
y
i
;
P
)
=
−
l
o
g
e
x
p
(
v
i
⋅
p
y
i
/
τ
)
∑
p
c
∈
P
e
x
p
(
v
i
⋅
p
c
/
τ
)
F(v_i;y_i; P) = -log\frac{exp(v_i\cdot p_{y_i}/\tau)}{\sum_{p_c\in P}exp(v_i\cdot p_c / \tau)}
F(vi;yi;P)=−log∑pc∈Pexp(vi⋅pc/τ)exp(vi⋅pyi/τ)
y
i
∈
[
1
,
2
,
.
.
.
,
C
]
y_i\in [1, 2, ..., C]
yi∈[1,2,...,C]是像素
i
i
i的伪标签,用来决定positive prototype。
τ
\tau
τ是温度参数,通常设为0.1。
Prototype Estimation
训练过程中,对一整个训练batch的所有伪标签为
c
c
c的像素,选择topK置信度的像素用以估计对应类别的
p
r
o
t
o
t
y
p
e
prototype
prototype。计算方式为每个像素embedding的加权平均,如下所示;再对每个prototype做L2归一化处理。
p
c
=
∑
i
∈
Ω
c
m
c
,
i
v
i
∑
i
′
∈
Ω
c
m
c
,
i
′
p_c = \frac{\sum_{i \in\Omega_c}m_{c,i}v_i}{\sum_{i^{'}\in\Omega_c}m_{c, i^{'}}}
pc=∑i′∈Ωcmc,i′∑i∈Ωcmc,ivi
这在强监督场景下,完全可以使用gt标签,来完美计算出每个类别的
p
r
o
t
o
t
y
p
e
prototype
prototype。
Cross-view Contrast
L c r o s s = L c p + L c c L^{cross} = L^{cp} + L^{cc} Lcross=Lcp+Lcc
Cross Prototype Contrast
L
c
p
=
1
∣
I
∣
∑
i
∈
I
F
(
v
i
;
y
i
;
P
′
)
L^{cp} = \frac{1}{|I|}\sum_{i\in I} F(v_i; y_i; P^{'})
Lcp=∣I∣1i∈I∑F(vi;yi;P′)
用另一个view的prototype来约束当前view。
Cross CAM Contrast
L
c
c
=
1
∣
I
∣
∑
i
∈
I
F
(
v
i
;
y
i
′
;
P
)
L^{cc} = \frac{1}{|I|}\sum_{i\in I} F(v_i; y_i^{'}; P)
Lcc=∣I∣1i∈I∑F(vi;yi′;P)
用另一个view的伪标签决定positive prototype和negative prototype。
Intra-view Contrast
L
i
n
t
r
a
=
1
∣
I
∣
∑
i
∈
I
F
(
v
i
;
y
i
;
P
)
L^{intra} = \frac{1}{|I|}\sum_{i\in I}F(v_i; y_i; P)
Lintra=∣I∣1i∈I∑F(vi;yi;P)
只是单纯的引入
L
i
n
t
r
a
L^{intra}
Lintra会导致效果下降。因为弱监督的场景设定下,像素
i
i
i的伪标很可能不对,会导致不正确的对比。所以本文又提出了semi-hard Prototype Mining的解决方案,此处不赘述。