??该论文已被CVPR2022接收,作者团队由香港科技大学、IDEA、清华大学组成。但论文源码暂未公开,只提供了一个Github主页。
- 论文链接:https://arxiv.org/abs/2203.01305
- 官方代码:https://github.com/FengLi-ust/DN-DETR
- 官方解读:https://www.zhihu.com/question/517340666/answer/2381304399
Abstract
??我们在这篇论文中提出了一种全新的降噪训练方法来加速DETR方法的训练,并对DETR方法收敛慢的问题给出了深刻的理解。DETR方法收敛慢是由于二分图匹配不稳定的问题会导致在训练早期阶段优化目标不一致。为了解决这个问题,除Hungarian loss意外,我们还额外给Transformer decoder送入带有噪声的真值框,并训练模型预测其原来的真值框,通过这种方式能够有效降低二分图匹配难度并获得更快的收敛速度。我们方法是通用的,可以很容易地应用到各种DETR类方法,只需要加几十行代码就能带来显著的速度提升。与相同配置下的基线相比,DN-DETR只需要50%的训练epoch就能达到相同的性能。
图1 不同模型收敛速度对比
1. Introduction
??目标检测是计算机视觉中的一项基础任务,目标是在图像中预测目标的类别和包络框。虽然取得了显著的进展,经典的检测器主要还是基于卷积神经网络,直到Carion等人提出DETR方法将Transformers引入目标检测任务。 ?? 和先前的检测器相反,DETR使用可学习的query 从Transformer编码器输出中提取特征,并使用二分图匹配来进行基于集合的包络框预测。这种设计可以有效规避人工设计锚点以及NMS步骤,使得目标检测能够进行端到端的优化。然后,和之前的检测器相比,DETR的训练收敛速度过于缓慢了。为了在COCO检测数据集上得到好的性能,通常需要500个训练epoch,而Faster-RCNN只需要12个epoch。
??许多工作都试图找出根本原因并缓解收敛过慢的问题。其中有些工作提出通过优化模型结构来解决。比如Sun等人将收敛慢的问题归因于交叉注意力的低效,并提出一个只有编码器的DETR方法。Dai等人设计了一种基于ROI的动态解码器,帮助解码器聚焦于感兴趣的区域。较新的工作则提出将每个DETR的query 和一个特定的空间位置关联,而不是多个位置,从而实现更有效的特征提取。例如,Conditional DETR将每个query 解耦成一个内容部分和位置部分,使得每个query 和某个特定的空间位置都有明确的关联。Deformable DETR和Anchor DETR直接将2D参考点视为query 来进行交叉注意力。DAB-DETR将query 解释成4D的锚点框,并逐层渐进地进行学习。
??尽管取得了这些进展,但很少有工作为了更有效的训练关注二分图匹配部分。本文中,我们发现收敛慢的问题同样和离散的二分图匹配组件有关,鉴于随机优化的特性,二分图匹配是不稳定的,尤其是在训练早期阶段。因此,对于同一张图像,一个query 经常会在不同时期匹配到不同的目标,使得优化变得不明确且不稳定。
??为了解决这个问题,我们提出了一种全新的训练方法,通过引入query 去噪任务来帮助稳定训练过程中的二分图匹配。先前的工作已经证明将query 解释成包含位置信息的参考点或锚点框是有效的,所以我们沿用他们的观点,使用4D锚点框作为query 。我们的解决方案是将带有噪声的真值包络框视为噪声query ,和可学习的锚点query 一起送入Transformer解码器。两类query 具有相同的输入格式
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h),可以同时送入Transformer解码器。对于带有噪声的query ,我们执行去噪任务,预测加入噪声之前的原始真值框。对于其他可学习的锚点框,我们使用相同的训练loss,包含普通DETR的二分图匹配loss。由于带有噪声的包络框不需要经过二分图匹配组件,去噪任务可以视为一个更简单的辅助任务,可以帮助DETR减轻不稳定的二分图匹配以及更快地学习边界框预测。与此同时,由于添加的随机噪声通常很小,去噪任务同样可以帮助降低优化难度。为了最大化该辅助任务的潜力,我们将每个解码器query 视为“边界框 + 类别标签”的嵌入,从而我们能够同时对边界框和类别进行去噪。
??总的来说,我们的方法是一种去噪训练方法。我们的损失函数包含两部分,一部分是重构loss,另一部分是和其他DETR方法相同的Hungarian loss。我们的方法可以简单地插入到任何已有的DETR类方法中。方便起见,我们利用DAB-DETR来验证我们的方法,因为它们的解码器query 是明确的4D锚点格式
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h)。对于只支持2D锚点的DETR变体,比如Anchor DETR,我们可以直接在锚点上做去噪。对于那些不支持锚点的方法,比如原始的DETR,我们可以增加一个线性变换将4D锚点框映射到和其他可学习query 相同的潜在空间。
??据我们所知,DN-DETR是首次将去噪的概念引入到检测模型中的工作。我们的贡献总结如下:
- 我们设计了一种全新的训练方法来加速DETR的训练。实验结果表明,我们的方法不仅加速了训练收敛,而且获得了更好的训练结果——在12个训练epoch的配置下,在所有检测方法中获得了最好的结果。而且,我们的方法比基线DAB-DETR获得了显著的性能提升(+1.9AP),并且可以很容易的集成到其他DETR类方法中。
- 我们从一个全新的角度分析了DETR训练收敛慢的问题,并且给出了更深刻的理解。我们设计了一种指标来评估二分匹配的不稳定性,并验证了我们的方法能够有效降低不稳定性。
- 我们进行了一系列消融实验来分析我们模型中不同组件的有效性,比如噪声、标签嵌入以及注意力掩模。
2. Related Work
??经典的基于CNN的检测器可以分为2类:一阶段方法和二阶段方法。二阶段方法首先生成一些区域提议,然后决定每个区域是否包含目标并进行边界框回归。Ren等人提出一种端到端的方法,利用RPN预测锚点框。与二阶段方法相反,一阶段方法直接目标框相对预测锚点框的偏移量。总的来说,他们都是基于锚点的方法。
??Carion等人提出一种基于Transformer的端到端目标检测器,名为DETR,不使用锚点。尽管DETR相比Faster-RCNN获得了相当的性能提升,但是它的训练收敛非常慢——为了达到一个好的性能需要500个epoch。
??近期许多工作对加速DETR的训练过程进行了尝试。有些工作发现DETR中Transformer解码器的交叉注意力效率低下,并从不同角度对其进行了改良。比如,Dai等人设计了一种动态解码器,能够以由粗到精的方式聚焦于ROI,降低了训练难度。Sun等人舍弃了Transformer的解码器,提出了一种只有编码器的DETR。另一些工作则对解码器的query 进行了改良。Zhu等人设计了一种注意力模块,只关注参考点附近的采样点。Meng等人将每个解码器query 解耦成内容部分和位置部分,对内容和位置分别进行交叉注意力计算。Yao等人利用RPN提议K个锚点。DAB-DETR使用4D向量作为query 并用级联的方式逐层更新边界框。
??尽管取得了上述进展,没有任何工作将Hungarian loss中用到的二分图匹配视为收敛慢的主要原因。Sun等人分析Hungarian loss的时候,使用预训练的DETR作为教师网络提供真值标签给学生模型,然后训练学生模型。他们发现这种方式仅能在早期训练阶段帮助模型收敛,并且对于最终性能没有明显帮助。因此他们推论Hungarian loss不是收敛慢的主要原因。本文中,我们给出了不同的分析,提出了一种有效的解决方案,并推导出了不同的结论。
??我们使用DAB-DETR作为检测架构来评估我们的训练方法,为了支持标签去噪,用依附了指示标记的标签嵌入来替换解码器嵌入部分。我们和其他方法的不同之处主要在于训练方法。除Hungarian loss意外,我们增加了一个去噪loss作为一个更容易的辅助任务来加速训练和提升性能。Chen等人用合成的造成目标增强他们的序列,但是和我们的方法完全不同。他们将噪声目标划分到“噪声”类别(不属于任何真值类别),所以他们能够提升召回率。和他们的方法相反,我们将噪声框视为原始的框,这么做的动机是绕开二分图匹配直接学习到真值框的近似。
3. Why Denoising accelerates DETR training?
??匈牙利匹配是一种流行的图匹配算法。给定一个代价矩阵,算法输出最优的匹配结果。DETR是第一个将匈牙利匹配用于目标检测任务中预测框和真值框匹配的算法。DETR将真值分配转化为一个动态过程,但由于离散的二分图匹配以及随机的训练过程带来了不稳定的问题。有工作表明匈牙利匹配由于blocking pairs的存在,会导致不稳定的匹配结果。代价矩阵很小的改变可能会给匹配结果带来巨大的改变,这会进一步引起解码器query 优化目标不一致的问题。
??我们将DETR类模型的训练过程视为两阶段:学习好的锚点以及学习相对偏移。如前人工作表明,解码器query 负责学习锚点。不一致的锚点更新可能是的相对偏移量难以学习。因此在我们的方法中,我们利用一个去噪任务作为训练捷径,因为该捷径绕过了二分图匹配,使得学习相对偏移量更加简单。因为我们将每个解码器query 解释成一个4D锚点框,一个加了噪声的query 可以认为是一个在真值框附近的“好的锚点”。因此去噪训练任务的目标非常明确——预测加噪声之前的真值框,有效避免了匈牙利匹配带来的模糊性问题。
??为了量化评估二分图匹配结果的不稳定性,我们按如下方式设计了一个指标。对于一张训练图像,我们将第
i
i
i个epoch预测的目标表示为
O
i
=
{
O
0
i
,
O
1
i
,
…
,
O
N
?
1
i
}
O^i=\{O_0^i,O_1^i,\dots, O_{N-1}^i\}
Oi={O0i?,O1i?,…,ON?1i?},其中
N
N
N表示预测的目标数量,真目标表示为
T
i
=
{
T
0
i
,
T
1
i
,
…
,
T
M
?
1
i
}
T^i=\{T_0^i,T_1^i,\dots, T_{M-1}^i\}
Ti={T0i?,T1i?,…,TM?1i?},其中
M
M
M是真值目标的个数。在二分图匹配之后,我们计算一个索引向量
V
i
=
{
V
0
i
,
V
1
i
,
…
,
V
N
?
1
i
}
V^i=\{V_0^i,V_1^i,\dots, V_{N-1}^i\}
Vi={V0i?,V1i?,…,VN?1i?}来存储第
i
i
i个epoch的匹配结果:
V
n
i
=
{
m
,
i
f
?
O
n
i
?
m
a
t
c
h
e
s
?
T
m
?
1
,
i
f
?
O
n
i
?
m
a
t
c
h
e
s
?
n
o
t
h
i
n
g
(1)
V_n^i=\left \{\begin{aligned} m,\quad&\mathrm{if} \ O_n^i \ \mathrm{matches} \ T_m\\-1,\quad &\mathrm{if} \ O_n^i \ \mathrm{matches \ nothing}\end{aligned} \right. \tag{1}
Vni?={m,?1,?if?Oni??matches?Tm?if?Oni??matches?nothing?(1)我们将
V
i
V^i
Vi和
V
i
?
1
V^{i-1}
Vi?1之间的差异定义为第
i
i
i个epoch的不稳定性:
I
S
i
=
∑
j
=
0
N
1
(
V
n
i
≠
V
n
i
?
1
)
(2)
IS^i=\sum_{j=0}^N\textbf1(V_n^i\neq V_n^{i-1}) \tag{2}
ISi=j=0∑N?1(Vni??=Vni?1?)(2)其中
1
(
?
)
\textbf1(\cdot)
1(?)是指示函数,如果
x
x
x为真
1
(
x
)
=
1
\textbf1(x)=1
1(x)=1否则等于0。第
i
i
i个epoch整个数据集的不稳定性是所有图像不稳定数的平均值。为了注释简单,在公式(1)和(2)中省略了图像的索引。
??如图2所示,我们在COCO2017验证集上对DN-DETR和DAB-DETR的
I
S
IS
IS指标进行了对比,验证集平均每张图7.36个目标,所以
I
S
IS
IS的最大值为
7.36
×
2
=
14.72
7.36\times 2=14.72
7.36×2=14.72。从图2可以看出,我们的方法有效降低了匹配的不稳定性。
图2 IS指标对比
4. DN-DETR
4.1 Overview
??我们基于DAB-DETR结构来实现我们的训练方法。和DAB-DETR类似,我们显式地将解码器query 构造成边界框坐标,唯一不同之处在于解码器嵌入部分,DN-DETR增加了一个类别标签嵌入来支持标签去噪。如图4所示,我们的主要贡献是训练过程。
??和DETR类似,我们的架构包含一个Transformer编码器和一个Transformer解码器。在编码器一侧,将CNN主干提取的图像特征送入带有位置编码的Transformer编码器,得到精炼的图像特征。在解码器一侧,query 被送入解码器并通过交叉注意力来搜寻目标。
??我们将解码器query 表示为
q
=
{
q
0
,
q
1
,
…
,
q
N
?
1
}
\mathrm{q}=\{q_0,q_1,\dots,q_{N-1}\}
q={q0?,q1?,…,qN?1?},解码器输出表示为
o
=
{
o
0
,
o
1
,
…
,
o
N
?
1
}
\mathrm{o}=\{o_0,o_1,\dots,o_{N-1}\}
o={o0?,o1?,…,oN?1?},用
F
F
F表示经精炼后的图像特征,用
A
A
A表示基于去噪任务导出的注意力掩模。我们的方法可以表示为
o
=
D
(
q
,
F
∣
A
)
(3)
\mathrm o=D(\mathrm q,F|A) \tag{3}
o=D(q,F∣A)(3)其中
D
D
D表示Transformer解码器。
??解码器query 包含两部分,一部分是匹配部分,这部分的输入是可学习的锚点,其处理方式和DETR一样,采用二分图匹配,并学习用匹配的解码器输出来近似真值边界框和类别。另一部分是去噪部分,该部分的输入是加了噪声的真值边界框和类别标签(本文剩下的部分都称之为“GT对象”)。去噪部分的输出是重构后的GT对象。
??下文中,我们将去噪部分表示为
q
=
{
q
0
,
q
1
,
…
,
q
N
?
1
}
\mathrm{q}=\{q_0,q_1,\dots,q_{N-1}\}
q={q0?,q1?,…,qN?1?},匹配部分表示为
Q
=
{
Q
0
,
Q
1
,
…
,
q
N
?
1
}
\mathrm{Q}=\{Q_0,Q_1,\dots,q_{N-1}\}
Q={Q0?,Q1?,…,qN?1?},所以我们的方法可表示为
o
=
D
(
q
,
Q
,
F
∣
A
)
(4)
\mathrm o=D(\mathrm q,\mathrm Q, F|A) \tag{4}
o=D(q,Q,F∣A)(4)为了提升去噪的效率,我们提出在去噪部分使用不同版本的噪声GT对象。除此之外,我们利用注意力掩模来防止去噪部分到匹配部分之间,以及同一个GT对象不同版本噪声之间信息泄漏。
4.2 Intro to DAB-DETR
??最近许多工作将DETR的query 和不同的位置信息联系起来。同样的,DAB-DETR显式地将query 制定成4D锚点坐标的形式。如图3(a)所示,一个query 指定为一个元组
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h),其中
x
,
y
x,y
x,y是中心坐标,
w
,
h
w,h
w,h是边界框的宽高。另外,锚点坐标会逐层进行动态更新。每一个解码器层的输出是
(
Δ
x
,
Δ
y
,
Δ
w
,
Δ
h
)
(\Delta x, \Delta y, \Delta w, \Delta h)
(Δx,Δy,Δw,Δh),那么锚点就被更新为
(
x
+
Δ
x
,
y
+
Δ
y
,
w
+
Δ
w
,
h
+
Δ
h
)
(x+\Delta x, y+\Delta y, w+\Delta w, h+\Delta h)
(x+Δx,y+Δy,w+Δw,h+Δh)。
??值得注意的是,我们的方法主要是一种训练方法,可以集成到任何DETR类的方法之中。为了在DAB-DETR上测试,我们只进行最小程度的修改:将解码器嵌入指定为标签嵌入,如图3(b)所示。
图3 交叉注意力部分对比
4.3 Denoising
??对于每张图像,我们给所有GT对象的边界框和类别标签都加上随机噪声。为了最大程度利用去噪学习,我们为每个GT对象使用了不同版本的噪声。
??我们考虑通过两种方式添加噪声:中心平移和边界框缩放。我们定义
λ
1
\lambda_1
λ1?和
λ
2
\lambda_2
λ2?为这两种噪声的尺度。对于中心平移,我们添加给边界框中心添加一个随机的噪声
(
Δ
x
,
Δ
y
)
(\Delta x, \Delta y)
(Δx,Δy),并保证
∣
Δ
x
∣
<
λ
1
w
/
2
|\Delta x|<\lambda_1w/2
∣Δx∣<λ1?w/2及
∣
Δ
y
∣
<
λ
1
h
/
2
|\Delta y|<\lambda_1h/2
∣Δy∣<λ1?h/2,其中
λ
1
∈
(
0
,
1
)
\lambda_1\in (0,1)
λ1?∈(0,1),所以添加过噪声后的边界框中心仍然位于原始的边界框之内。对于尺度缩放,我们设置
λ
2
∈
(
0
,
1
)
\lambda_2 \in (0,1)
λ2?∈(0,1),边界框的宽度和长度分别在
[
(
1
?
λ
2
)
w
,
(
1
?
λ
2
)
w
]
[(1-\lambda_2)w,(1-\lambda_2)w]
[(1?λ2?)w,(1?λ2?)w]和
[
(
1
?
λ
2
)
h
,
(
1
?
λ
2
)
h
]
[(1-\lambda_2)h,(1-\lambda_2)h]
[(1?λ2?)h,(1?λ2?)h]范围内随机采样。
??对于标签噪声,我们随机将一些真值标签翻转成其它类别。标签翻转迫使模型根据添加了噪声的边界框来预测真值标签,从而更好的捕捉标签和边界框之间的关系。我们通过超参数
γ
\gamma
γ来控制标签翻转的比例。和DAB-DETR一样,我们的重构损失函数包括针对边界框的
l
1
?
l
o
s
s
l_1 \ loss
l1??loss、
G
I
O
U
?
l
o
s
s
GIOU \ loss
GIOU?loss,以及针对分类标签的focal loss。我们使用函数
δ
(
?
)
\delta(\cdot)
δ(?)表示噪声GT对象。因此,去噪部分的每个query 可以表示为
q
k
=
δ
(
t
m
)
q_k=\delta(t_m)
qk?=δ(tm?),其中
t
m
t_m
tm?是第
m
m
m个GT对象。
??注意去噪仅在训练阶段考虑,在推理阶段需要移除去噪部分,只留下匹配部分。
图4 训练方法概述
4.4 Attention Mask
??注意力掩模是我们模型中非常重要的一个组件。没有注意力掩模,去噪训练会导致性能下降而非提升,如表4所示。
??为了引入注意力掩模,我们首先需要将噪声GT对象分组,每个分组是所有GT对象的一个噪声版本。去噪部分表示为
q
=
{
g
0
,
g
1
,
…
,
g
P
?
1
}
(5)
\mathrm{q}=\{\mathrm{g}_0,\mathrm{g}_1,\dots,\mathrm{g}_{P-1}\}\tag{5}
q={g0?,g1?,…,gP?1?}(5)其中
g
p
g_p
gp?定义为第
p
p
p个去噪分组。每个去噪分组包含
M
M
M个query ,
M
M
M是图像中GT对象的个数。所以我们有
g
p
=
{
q
0
p
,
q
1
p
,
…
,
q
M
?
1
p
}
(6)
g_p=\{q^p_0,q^p_1,\dots,q^p_{M-1}\}\tag{6}
gp?={q0p?,q1p?,…,qM?1p?}(6),其中
q
m
=
δ
(
t
m
)
q_m=\delta(t_m)
qm?=δ(tm?)。
??注意力掩模的作用是为了防止信息泄漏。有两种类型的潜在信息泄漏,一种是匹配部分看到噪声GT对象并很容易地预测GT对象。另一种是一种噪声版本的GT可以看到另一种版本。因此,我们的注意力掩模是为了保证去噪部分对匹配部分不可见,以及去噪分组之间互相不可见,如图4所示。
??我们用
A
=
[
a
i
j
]
W
×
W
\textbf{A}=[a_{ij}]_{W\times W}
A=[aij?]W×W?表示注意力掩模,其中
W
=
P
×
M
+
N
W=P\times M+N
W=P×M+N,
P
P
P和
M
M
M是分组数量和GT对象数量,
N
N
N是匹配部分的query 数量。令前
P
×
M
P\times M
P×M行和列表示去噪部分,其余的部分表示匹配部分。
a
i
j
=
1
a_{ij}=1
aij?=1表示第
i
i
i个query 看不见第
j
j
j个query ,反之亦然。我们按如下设计注意力掩模
a
i
j
=
{
1
,
i
f
?
j
<
P
×
M
?
a
n
d
?
?
i
M
?
≠
?
j
M
?
;
1
,
i
f
?
j
<
P
×
M
?
a
n
d
?
i
≥
P
×
M
;
0
,
o
t
h
e
r
w
i
s
e
.
(7)
a_{ij}=\left \{\begin{aligned}1,&\quad\mathrm{if}\ j<P\times M\ \mathrm{and} \ \lfloor\frac{i}{M}\rfloor\neq\lfloor\frac{j}{M}\rfloor; \\ 1,&\quad\mathrm{if}\ j<P\times M\ \mathrm{and} \ i\ge P\times M;\\0,&\quad \mathrm{otherwise.}\end{aligned} \right.\tag{7}
aij?=??????????1,1,0,?if?j<P×M?and??Mi???=?Mj??;if?j<P×M?and?i≥P×M;otherwise.?(7)注意,我们允许去噪部分看到匹配部分,因为匹配部分的query 是学习得到的,不包含真值对象的信息。
??多个去噪分组引入的额外计算量是微不足道的。当引入5个去噪分组时,在ResNet-50主干下,DAB-DETR训练计算量从94.4GFLOPs增加到94.6GFLOPs,并且在测试阶段不增加任何计算开销。
4.5 Label Embedding
??在我们的模型中,解码器嵌入被指定为标签嵌入,以支持边界框去噪和类别标签去噪。除了COCO 2017中的80个类别,我们还在匹配部分加入了一个未知类别嵌入,在语义上和去噪部分保持一致。我们在标签嵌入后增加了一个标记,当标记等于1时query 属于去噪部分,等于0时则属于匹配部分。
|