【论文阅读】DN-DETR/DINO

DN-DETR

作者团队对 DETR 收敛缓慢给出了一个深刻的理解,并第一次提出了全新的去噪训练(DeNoising Training)方法用于解决 DETR 的 decoder 二分图匹配(Bipartite Graph Matching)不稳定的问题,可以让模型的收敛速度翻倍,并对检测结果带来显著的提升。该方法简易实用,可以广泛运用到各种 DETR 模型当中,以微小的训练代价带来显著的提升。

为什么 DETR 系列模型存在收敛缓慢的问题

这得从 DETR 的最初设计说起。DETR 把目标检测做成了一个 set prediction 的问题,并利用 匈牙利匹配(Hungarian matching)算法来解决 decoder 输出的 objects 和 ground-truth objects 的匹配。因此,匈牙利算法匹配的 离散性 和模型训练的 随机性,导致 ground-truth 的匹配变成了一个动态的、不稳定的过程。

要解决这个问题,我们要先理解 decoder 到底在做什么。如今 decoder queries 在很多工作中被解读为 anchor 坐标, 我们可以按照 DAB-DETR 把它看作一个四维的 bounding box(检测框):(x,y,w,h)(x,y,w,h)

在每一层 decoder 中都会去预测相对偏移量 (Δx,Δy,Δw,Δh)(\Delta x,\Delta y,\Delta w,\Delta h),去更新检测框。得到一个更加精确的检测框预测 (x,y,w,h)=(x,y,w,h)+(Δx,Δy,Δw,Δh)(x^{\prime},y^{\prime},w^{\prime},h^{\prime})=(x,y,w,h)+(\Delta x,\Delta y,\Delta w,\Delta h),并传到下一层中。

我们可以把 decoder 看成在学习两个东西:

  • good anchors(anchor位置)(x,y,w,h)(x,y,w,h)

  • relative offset(相对偏移)(Δx,Δy,Δw,Δh)(\Delta x,\Delta y,\Delta w,\Delta h)

Decoder Queries 可以看成是 Anchor 位置的学习,而不稳定的匹配会导致不稳定的 Anchor,从而使得相对偏移的学习变得困难。因此,我们使用一个 Denoising Task 作为一个 Shortcut 来学习相对偏移,它 跳过了匹配 过程直接进行学习。如果我们把 Query 像上述一样看作四维坐标,可以通过在真实框附近添加一个 微小的扰动 作为噪声,这样我们的 Denoising Task 就有了一个清晰的目标——直接重建真实框 而不需要匈牙利匹配。

作者设计了一个指标 IS(Instability)通过比较相邻 epoch 之间匹配的不一致性来衡量匹配的不稳定性,如下图所示。这表明DN-DETR能有效提高匹配的稳定性。

image.png

网络架构

为了最大限度地利用去噪训练,我们把 Content Query 输入为 Label Embedding,对 Label 也添加噪声进行 Reconstruct。 因为 Denoising 只是一种训练方式,不会改变模型的结构,只在输入时进行了一些改变。

image.png

将解码器 query 表示为 q={q0,q1,,qN1}\mathrm{q={q_0,q_1,\ldots,q_{N-1}}},解码器输出表示为 o={o0,o1,,oN1}\mathrm{o}=\left{\mathrm{o}_0,\mathrm{o}1,\ldots,\mathrm{o}{\mathrm{N}-1}\right},用 F\text{F} 表示经过精炼后的图像特征,用 A\text{A} 表示基于去噪任务导出的注意力掩膜,D\text{D} 表示 Transformer 解码器,我们的方法可以表示为:

o=D(q,FA)\mathrm{o}=\mathrm{D}(\mathrm{q},\mathrm{F}|\mathrm{A})

解码器 query 包含两部分,一部分是匹配部分,这部分的输入是可学习的锚点,其处理方式与 DETR 一样,采用了二分图匹配,并学习用匹配到的解码器输出来近似真实的 bbox 和 label。另一个部分是去噪部分,这部分的输入是加入了噪声的真实 bbox 和 label(后续称为 GT objects),去噪部分的输出旨在重建 GT objects。

下文中,我们将去噪部分表示为 q={q0,q1,,qN1}\mathrm{q={q_0,q_1,\ldots,q_{N-1}}},匹配部分表示为 Q={Q0,Q1,,QN1}\mathrm{Q={Q_0,Q_1,\ldots,Q_{N-1}}},我们的方法可以表示为:

o=D(q,Q,FA)\mathrm{o=D(q,Q,F|A)}

为了提升去噪的效率,我们提出在去噪部分使用不同版本的噪声 GT objects。除此之外,利用注意力掩膜来防止去噪部分到匹配部分之间、以及同一个 GT object 在不同版本的噪声之间的信息泄露。

image.png

去噪部分的细节

对于每张图片,对其中标签物体的包围框和类别都添加随机噪声。

  • 中心噪声 center shifting(中心偏移):对包围框中心 (x,y)(x, y) 添加噪声 (Δx,Δy)(\Delta x, \Delta y),并且满足Δx<λ1w2,Δy<λ1h2,λ1(0,1)|\Delta x|<\frac{\lambda_1w}2,|\Delta y|<\frac{\lambda_1h}2,\lambda_1\in(0,1),保证中心点添加噪声后仍然在原始的包围框内。

  • 宽高噪声box scaling(包围框缩放):对于 λ2(0,1)\lambda_2\in(0,1),分别从 [(1λ2)w,(1+λ2)w][(1-\lambda_2)w,(1+\lambda_2)w][(1λ2)h,(1+λ2)h][(1-\lambda_2)h,(1+\lambda_2)h] 中采样宽和高。

  • 类别噪声:随机将真实类别的 one-hot 变量进行翻转

  • 训练时,包含匹配 query 和去噪 query,噪声 query 记为 qk=δ(tm)q_k=\delta(t_m)tmt_m 表示第 mm 个 GT object

  • 推理时,只有匹配 query

注意力掩码(Attention Mask)

我们将加过噪声的 GT objects 分成若干组,每一组都是所有 GT objects 的加噪版本。

q={g0,g1,...,gP1}\mathbf{q}={\mathbf{g_0},\mathbf{g_1},...,\mathbf{g_{P-1}}}

其中 gp\mathbf{g_p} 被定义为第 pp 个去噪组。每个去噪组都包含 M 个查询,其中 MM 是图片中 GT objects 的数量,所以我们有:

gp={q0p,q1p,...,qM1p}\mathbf{g_p}=\left{q_0^p,q_1^p,...,q_{M-1}^p\right}

其中 qmp=δ(tm)q_m^p=\delta(t_m)

注意力掩码(Attention Mask)的目的是为了防止信息泄露,存在两种潜在的类型。

其一为 匹配 query 可能能够看到 去噪 query,从而能够轻易地预测出真实的 GT object。

其二为 去噪组之间可能会相互看见。

因此,我们的注意力掩码需要解决上面两个问题。

使用 A = [aij]W×W\mathbf{A}\mathrm{=}[\mathbf{a}{ij}]{W\times W}来表示 Attention Mask,其中 W=P×M+NW=P\times M+NPPMM 分别是 组数 和 GT object 的数量,NN 是匹配部分的查询数量。我们让一开始的 P×MP \times M 个行列部分来表示去噪部分的交叉注意力掩码,剩下的表示匹配部分。aij=1a_{ij}=1 表示第 ii 个查询能否看见第 jj 个查询,因此 Attention Mask 的定义如下:

aij={1,if j<P×M and iMjM;1,if j<P×M and iP×M;0,otherwise.a_{ij}=\left{\begin{array}{ll}1,&\text{if }j<P\times M\text{ and }\lfloor\frac{i}{M}\rfloor\neq\lfloor\frac{j}{M}\rfloor;\1,&\text{if }j<P\times M\text{ and }i\geq P\times M;\0,&\text{otherwise.}\end{array}\right.

值得注意的是,去噪部分能否看见匹配部分并不会影响模型的表现,因为匹配部分是自学习的,并不包含与 GT object 有关的信息。

标签嵌入(Label Embedding)

在模型中,解码器嵌入(Decoder Embedding)被指定为标签嵌入,以同时支持 bbox 去噪和标签去噪。

除了已有的 class,还考虑了 unknown,还考虑了在匹配部分中使用的未知类别嵌入来与去噪部分在语义上保持一致。我们还附加了一个指示器来标记嵌入。如果一个查询属于去噪部分,则指示器为1,否则为0。

为什么加入去噪查询以后会加速收敛?

image.png

  1. 稳定 Hungarian 匹配过程:
  • DETR 采用 Hungarian bipartite graph matching 方法来匹配预测的目标和真实目标,但这种匹配方法在训练的早期阶段容易不稳定,导致优化目标的不一致性。

  • 加入 denoising query 后,通过向 Transformer 解码器输入加噪的 GT(Ground Truth)边界框,并训练模型去还原这些加噪边界框,减少了对 Hungarian 匹配的依赖,从而稳定了匹配过程。这样避免了随机优化过程中因匹配不一致带来的困扰。

  1. 使查询的搜索更具局部性:
  • 加噪后的 GT 框(denoising query)本质上是与真实目标框接近的“好锚点”。通过这种训练,模型可以更局部地进行目标预测,减少了查询与目标之间的距离,使学习过程更高效。

  • 文中通过对 anchor 和目标之间的距离比较(如 L1 距离),表明引入去噪查询后,距离显著缩短,训练难度降低,最终收敛更快。

此外,去噪任务本质上是一个较为简单的辅助任务,它明确了优化目标——还原 GT 框。这种明确性减少了目标优化的复杂性,同时帮助模型快速学习如何预测边界框和类别标签。

DINO

DINO 在之前工作(DN-DETR)的基础上,通过以下几种方法改进了模型:

  • **对比去噪训练(Contrastive DeNoising Training):**DN - DETR在稳定训练和加速收敛方面非常有效。在DN查询的帮助下,它学习基于附近有 GT 框的锚进行预测。然而,它缺乏对附近没有对象的锚预测 "no object"的能力。为了解决这个问题,我们提出了一种对比去噪 (Contrastive DeNoising:CDN) 方法来拒绝无用的锚。

  • **混合查询选择(Mixed Query Selection):**为了更好地初始化查询,DINO 提出了一种混合查询选择方法。该方法从编码器的输出中选择位置查询作为初始锚点,而内容查询则保持为可学习。

  • 两步前瞻机制(Look Forward Twice):为了更好地优化解码器早期层的参数,利用后续层的梯度信息更新早期层的预测,从而提升目标框的精确性。

网络架构

image.png

对比去噪训练(Contrastive DeNoising Training

借助 DN 查询,它学会根据附近具有 GT 框的锚点进行预测。但是,它缺乏对于附近没有对象的锚点进行“无对象”预测的能力。为了解决这个问题,我们提出了一种对比去噪(CDN)方法来拒绝无用的锚点。

image.png

定义了两个超参数 λ1{\lambda}_1λ2{\lambda}_2(其中 λ1<λ1{\lambda}_1 < {\lambda}_1),生成两种不同种类的 CDN 查询:正样本查询和负样本查询。正样本查询相对于负样本查询的噪声幅度要小于 λ1\lambda_1,预期能够重建其相应的 GT 框。负样本的噪声幅度要大于 λ1\lambda_1 但小于 λ2\lambda_2,预期会被预测为“无目标”。我们通常选择较小的 λ2\lambda_2,因为更接近 GT 框的困难负样本将能够更有效地改进模型性能。

对于一张具有 nn 个物体的图像,将会生成 2×n2 \times n 数量的去噪查询。与 DN-DETR 相似的是,我们同样使用多个 CDN组来提升方法的有效性。

**分析:**此方法有效的原因在于它可以抑制混淆并选择高质量的锚点(查询)以预测边界框。“混淆”是指多个锚点靠近同一个对象时发生的情况。在这种情况下,模型很难决定选择哪个锚点。混淆可能导致两个问题。第一个是重复预测。虽然类似DETR的模型可以通过基于集合的损失和自注意力来抑制重复框,但这种能力是有限的。如下图的左图所示,当用DN查询替换我们的CDN查询时,箭头指向的男孩有3个重复预测,但右图中的 CDN 查询就很好地解决了这个问题。

image.png

混合查询选择(Mixed Query Selection)

image.png

在 DETR 和 DN-DETR 中,解码器查询是静态的嵌入,没有考虑来自单个图像的任何编码器特征。他们直接从训练数据中学习锚点(在 DN-DETR 和 DAB-DETR 中)或位置查询(在 DETR 中),并将内容查询设置为全部为0的向量。Deformable DETR 学习了位置和内容查询,这是静态查询初始化的另一种实现方式。

为了进一步提升性能,Deformable DETR 具有查询选择变体(在其论文中被称为“twostage”),它从最后一个编码器层中选择前 K 个编码器特征作为先验,以增强解码器查询。如图(b)所示,位置查询和内容查询都是通过对选定特征进行线性变换生成的。

此外,这些选定的特征被输入到辅助检测头中,以获取预测的包围框,这些包围框用于初始化参考框。同样,Efficient DETR 也根据每个编码器特征的客观性(类别)分数选择顶部K个特征。

动态的 4D 锚点查询公式使我们的模型与解码器的位置查询密切相关,可以通过查询选择进行改善。我们遵循上述做法,并提出了一种混合查询选择方法。

**分析:**如图(c)所示,我们只使用与所选的前 K 个特征相关的位置信息来初始化锚框,但是保持内容查询与以前一样静态(全初始化为 0)。注意到 Deformable DETR 使用前 K 个特征来增强位置查询和内容查询。由于所选特征是没有经过进一步细化的初步内容特征,它们可能对解码器具有歧义和误导性。例如,所选特征可能包含多个对象或仅是对象的一部分。相比之下,我们的混合查询选择方法仅通过顶部 K 个所选特征增强位置查询,并保持内容查询与以往一样可学习。它帮助模型更好地利用位置信息,从编码器中汇集更全面的内容特征。

两步前瞻机制(Look Forward Twice)

image.png

我们在本节提出了一种新的框预测方法。Deformable DETR 中的迭代框细化通过阻止梯度反向传播(Detach\text{Detach})以稳定训练。我们将这种方法命名为 look forward once,因为第 ii 层的参数仅基于盒子 bib_i 的辅助损失进行更新。

然而我们推测,来自后续层的改进的框信息可能对纠正其相邻早期层的框预测更有帮助。因此,我们提出了另一种称为“向前查看两次(Look Forward Twice)”来执行框更新的方法。第 ii 层的参数受到第 ii 层和第 (i+1)(i + 1) 层损失的影响。

对于每个预测的偏移量 Δbi\Delta b_i,它将被用于更新框两次,一次用于 bib_i^{\prime},另一次用于 bi+1(pred)b_{i+1}^{(pred)},因此我们将我们的方法命名为“向前查看两次”。

预测框 bi(pred)b_{i}^{(pred)} 的最终精度取决于两个因素:初始框 bi1b_{i−1}的质量和框的预测偏移 bi∆b_i。look forward once 方案仅优化后者,因为梯度信息从第 ii 层分离到第 (i1)(i-1)层。相反,我们改进初始框 bi1b_{i−1}和预测框偏移 bi∆b_i。提高质量的简单方法是使用层 ii 的最终框 bib_i^{\prime} 与下一层输出 bi+1∆b_{i+1}进行监督。因此,我们将 bib_i^{\prime}Δbi+1\Delta b_{i+1} 的总和作为第(i+1)(i+1) 层的预测框。

更具体地,给定第 ii 层的输入框 bi1b_{i−1},我们通过以下方式获得最终预测框 bi(pred)b^{(pred)}_i

Δbi=Layeri(bi1),bi=Update(bi1,Δbi),bi=Detach(bi),bi(pred)=Update(bi1,Δbi),\begin{aligned}\Delta b_i&=\text{Layer}{\text{i}}(b{i-1}),&b_i'&=\text{Update}(b_{i-1},\Delta b_i),\b_i&=\text{Detach}(b_i'),&b_i^{(\text{pred})}&=\text{Update}(b_{i-1}',\Delta b_i),\end{aligned}

其中 bib_i^{\prime}bib_i 的未分离版本。术语 Update(,)\mathrm{Update}(\cdot,\cdot) 是一个通过预测的框偏移 bi∆b_i 来优化框 bi1b_{i−1}的函数。

评论 (0)

暂无评论,来发表第一条评论吧!