摘要
首先谈一下H-DETR解决的问题:我们知道在DETR中使用的一对一标签分配,即一个gt分配一个预测的query,这样虽然使得DETR不用使用NMS这类的手工组件,但也很大程度上影响了模型的收敛速度与精度。因为一般我们会设置远多于图像中box数量的query,那么就只有少部分会作为正样本进行预测。为了解决这个问题,H-DETR提出了一种混合匹配模式,组合原始的一对一匹配与一个辅助的一对多匹配分支(只在训练中) ,实现了在不仅仅在DETR上的提升,同时在其它许多DETR变体上的应用也有提升。
混合匹配
论文给出了3中混合匹配方式,分别是混合分支方式,混合epoch方式,混合网络层方式。如下图所示:
混合分支方式
混合分支方式在解码器中包含两个分支,分别是一对一与一对多匹配分支,首先对于输入query也进行分组,其中
Q
=
{
q
1
,
q
2
,
⋯
,
q
n
}
\mathbf{Q}=\{\mathbf{q}_1,\mathbf{q}_2,\cdots,\mathbf{q}_n\}
Q={q1,q2,⋯,qn}作为一对一匹配分支的输入,
Q
^
=
{
q
^
1
,
q
^
2
,
⋯
,
q
^
T
}
\widehat{\mathbf{Q}}=\{\widehat{\mathbf{q}}_1,\widehat{\mathbf{q}}_2,\cdots,\widehat{\mathbf{q}}_T\}
Q
={q
1,q
2,⋯,q
T}作为一对多匹配分支的输入(代码实现上两者未作区分,使用相同方式生成,只不过数量不一样)。
对于一对一匹配,损失函数计算如下:
L
o
n
e
2
o
n
e
=
∑
l
=
1
L
L
H
u
n
g
a
r
i
a
n
(
P
l
,
G
)
\mathcal{L}_{\mathrm{one2one}}=\sum_{l=1}^L\mathcal{L}_{\mathrm{Hungarian}}(\mathbf{P}^l,\mathbf{G})
Lone2one=l=1∑LLHungarian(Pl,G)其中
P
l
\mathbf{P}^l
Pl表示每一层的预测结果,
G
\mathbf{G}
G表示gt,就是原始的DETR计算方式。
对于一对多匹配,首先需要将gt复制K份以对应query,
G
~
=
{
G
1
,
G
2
,
⋯
,
G
K
}
\tilde{\mathbf{G}}=\{\mathbf{G}^1,\mathbf{G}^2,\cdots,\mathbf{G}^K\}
G~={G1,G2,⋯,GK},其中
G
1
=
G
2
=
⋯
=
G
K
=
G
\mathbf{G}^{1}{=}\mathbf{G}^{2}{=}\cdots{=}\mathbf{G}^{K}{=}\mathbf{G}
G1=G2=⋯=GK=G,计算公式如下
L
o
n
e
2
m
a
n
y
=
∑
l
=
1
L
L
H
u
n
g
a
r
i
a
n
(
P
^
l
,
G
^
)
\mathcal{L}_{\mathrm{one2many}}=\sum_{l=1}^L\mathcal{L}_{\mathrm{Hungarian}}(\widehat{\mathbf{P}}^l,\widehat{\mathbf{G}})
Lone2many=l=1∑LLHungarian(P
l,G
),去看代码实际上函数是与一对一相同的,只是输入输出不同,如何实现了论文提到的一对多方式呢,因为输出gt是复制的,相当于有K份一样的,那么就有K个query对应相同的一个gt,相当于就是一对多分配了。不知道我的理解对不对。
总损失函数:
λ
L
o
n
e
2
m
a
n
y
+
L
o
n
e
2
o
n
e
\lambda\mathcal{L}_{\mathrm{one2many}}+\mathcal{L}_{\mathrm{one2one}}
λLone2many+Lone2one
混合Epoch方式与混合网络层方式
怎么说呢,理解了前面看图基本就够了,我这里不展开谈了,有想法也可以评论区交流,我可以看看我的理解是否有问题。
实验结果
下面是关于三种混合方式的对比,其中看出混合分支方式最好
关于K值的设置,实验结果