【论文解读】DINO: 在DETR的肩膀上,重塑端到端目标检测

发布于:2025-06-01 ⋅ 阅读:(41) ⋅ 点赞:(0)

1st author: About Me - Hao Zhang

paper: DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection | OpenReview ICLR 2023 poster

code: Official implementation of the paper “DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection”


1. DETR的“初心”与“烦恼”

DETR将目标检测视为一个直接的集合预测问题:给定N个查询(Object Queries),模型输出N个预测(类别+边界框)。通过匈牙利算法(Hungarian Algorithm)在预测与真值(Ground Truth, GT)间进行一对一匹配,计算损失并反向传播。这种设计彻底摒弃了NMS,实现了端到端。

然而,这种“自由”也带来了代价:

  1. 收敛缓慢: 尤其在早期,二分图匹配的不稳定性使得模型需要很长时间才能学会将查询与特定目标关联起来。
  2. 查询的意义: 初始查询是可学习的embedding,其物理意义不明确,难以有效利用图像的空间先验。

为了解决这些问题,后续工作进行了一系列探索:

  • DAB-DETR: 明确将查询(Query)定义为4D的动态锚框(Dynamic Anchor Boxes) ( x , y , w , h ) (x, y, w, h) (x,y,w,h)。这使得查询有了明确的几何意义,并且可以在解码器的每一层进行迭代优化。
  • DN-DETR: 引入去噪训练(Denoising Training)任务。其核心思想是,在真实的GT框上加入噪声,然后让模型去恢复这些原始的GT框。这相当于给模型增加了“简单模式”的训练样本,显著加速了二分图匹配的稳定性和模型的收敛速度。

DINO在DAB-DETR和DN-DETR的基础上,进一步挖掘 DETR 的潜力。

2. DINO的贡献

Fig 2

提出了三大改进:

  1. 对比去噪训练 (Contrastive DeNoising Training): 在DN-DETR的去噪思想上更进一步,引入了“对比”的概念。不仅要让模型学会从加入微小噪声的正样本中恢复GT (Ground Truth),还要学会将加入较大噪声的“难负样本”区分为背景。这有助于模型更好地区分目标与非目标,减少重复检测。
  2. 混合查询选择 (Mixed Query Selection): 结合了静态(可学习)内容查询和动态(来自编码器特征)位置查询。位置查询从编码器输出中选取Top-K特征对应的位置作为初始锚框,而内容查询则保持为可学习的embedding。这种设计目的是更好地初始化解码器的锚框,同时保留内容查询的灵活性。
  3. 前瞻两次方案 (Look Forward Twice): 优化解码器中边界框的迭代优化过程。在更新当前层的框参数时,不仅利用当前层的预测偏移,还考虑下一层预测的偏移对当前层参数的梯度回传影响,从而更精细地调整参数。

3. DINO 的三大“法宝”

3.1. 对比去噪训练 (Contrastive DeNoising Training, CDN)

DN-DETR通过引入去噪任务,让模型学习从带有噪声的GT框中恢复原始GT框,以此稳定二分图匹配,加速收敛。DINO的CDN在此基础上更进一步,旨在提升模型区分“目标”与“近乎目标但非目标”的能力,从而减少重复检测和误检。

1. CDN的动机与原理:

标准的去噪训练只关注“如何重建目标”。但实际场景中,模型往往会在一个真实目标附近产生多个略有偏差的预测。CDN的核心思想是:对于一个GT框,我们不仅要构造“正样本”(加微小噪声,期望模型恢复GT),还要构造“负样本”(加稍微大噪声,希望模型预测为“无目标”或背景)。希望迫使模型学习更精细的边界判别。

2. CDN的实现:

CDN引入了两个噪声尺度超参数 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2,其中 λ 1 < λ 2 \lambda_1 < \lambda_2 λ1<λ2

  • 正样本 (Positive Queries): 对每个GT框 b g t = ( x , y , w , h ) b_{gt} = (x, y, w, h) bgt=(x,y,w,h),加入尺度不超过 λ 1 \lambda_1 λ1 的噪声 δ 1 = ( Δ x 1 , Δ y 1 , Δ w 1 , Δ h 1 ) \delta_1 = (\Delta x_1, \Delta y_1, \Delta w_1, \Delta h_1) δ1=(Δx1,Δy1,Δw1,Δh1),得到 b p o s = b g t + δ 1 b_{pos} = b_{gt} + \delta_1 bpos=bgt+δ1。模型的目标是从 b p o s b_{pos} bpos 恢复出 b g t b_{gt} bgt

    • ∣ Δ x 1 ∣ < λ 1 ⋅ w g t |\Delta x_1| < \lambda_1 \cdot w_{gt} ∣Δx1<λ1wgt, ∣ Δ y 1 ∣ < λ 1 ⋅ h g t |\Delta y_1| < \lambda_1 \cdot h_{gt} ∣Δy1<λ1hgt
    • ∣ Δ w 1 ∣ < λ 1 ⋅ w g t |\Delta w_1| < \lambda_1 \cdot w_{gt} ∣Δw1<λ1wgt, ∣ Δ h 1 ∣ < λ 1 ⋅ h g t |\Delta h_1| < \lambda_1 \cdot h_{gt} ∣Δh1<λ1hgt (论文中对w,h的噪声尺度是相对于w,h自身,这里简化表示了统一尺度)
    • 实际论文中是对中心点偏移和宽高缩放分别加噪声,这里统一用 λ \lambda λ表示噪声范围。
    • 损失函数: 对于正样本,使用标准的回归损失(L1 loss + GIoU loss)和分类损失(Focal Loss),目标类别为GT的类别。
  • 负样本 (Negative Queries): 对同一个GT框 b g t b_{gt} bgt,加入尺度介于 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2 之间的噪声 δ 2 = ( Δ x 2 , Δ y 2 , Δ w 2 , Δ h 2 ) \delta_2 = (\Delta x_2, \Delta y_2, \Delta w_2, \Delta h_2) δ2=(Δx2,Δy2,Δw2,Δh2),得到 b n e g = b g t + δ 2 b_{neg} = b_{gt} + \delta_2 bneg=bgt+δ2。模型的目标是将 b n e g b_{neg} bneg 预测为背景(“no object”)。

    • λ 1 ⋅ w g t < ∣ Δ x 2 ∣ < λ 2 ⋅ w g t \lambda_1 \cdot w_{gt} < |\Delta x_2| < \lambda_2 \cdot w_{gt} λ1wgt<∣Δx2<λ2wgt (以此类推其他维度)
    • 损失函数: 对于负样本,只计算分类损失,目标类别为背景。

如论文 Fig3 所示:

Fig 3

每个GT框都会生成一组正样本和一组负样本(论文中提到可以有多组CDN group,即对一个GT框多次添加不同噪声生成多个正负样本对)。这些CDN查询与原始的匹配查询(matching queries)一同送入Transformer解码器。

3. CDN为何有效?

  • 抑制重复预测: 当多个初始锚框都离一个GT很近时,模型可能难以抉择,导致输出多个对同一目标的预测。CDN通过让模型学会将“稍微偏离但仍算接近”的锚框(负样本)识别为背景,增强了模型对“最佳”锚框的选择能力。
  • 提升小目标检测: 论文 Fig 4 的ATD(Average Top-K Distance)指标显示,CDN能帮助模型为小目标找到更近的初始锚框。ATD(k) 计算的是与GT匹配的预测框中,其初始锚框与GT距离最大的k个样本的平均距离。CDN在这个指标上优于DN,说明其选择的初始锚框质量更高。

3.2. 混合查询选择 (Mixed Query Selection)

DETR及其早期变体的查询初始化方式通常是“静态的”,即查询要么是完全可学习的embedding,要么完全依赖于图像内容(如Deformable DETR的two-stage)。DINO提出了一种“混合”策略。

1. 动机与设计:

DAB-DETR将查询的“位置部分”显式化为4D锚框。如何更好地初始化这些锚框,直接影响模型的性能和收敛。

  • 纯静态查询(如DN-DETR): 位置锚框和内容特征都是可学习的。这种方式缺乏图像先验,学习效率不高。
  • 纯动态查询(Deformable DETR two-stage变体): 从编码器输出的Top-K特征中,同时生成位置锚框和内容特征。论文认为,编码器输出的特征是初步的,直接作为内容特征可能包含噪声或不完整信息(比如一个特征可能对应多个物体或物体的一部分)。

DINO的混合查询选择策略 (论文 Fig 5):

  • 位置查询 (Positional Queries / Anchor Boxes): 动态生成。从编码器最后一层的输出特征中,选取Top-K个得分最高的特征(通过一个小型分类头预测objectiveness score)。这些特征对应的位置信息(在特征图上的归一化坐标和预设的宽高)被用来初始化解码器的初始锚框。
  • 内容查询 (Content Queries): 保持静态可学习。这部分不使用编码器的特征,而是像原始DETR一样,使用可学习的embedding。

Fig 5

2. 为何混合?

这种设计试图取长补短:

  • 利用编码器的输出来指导初始锚框的位置,使其更接近潜在目标,提供良好的空间先验。
  • 保持内容查询的可学习性,使得解码器可以更灵活地从编码器特征中聚合与目标相关的语义信息,而不是受限于初步编码器特征可能带来的偏差。模型可以学习到更鲁棒和更具表达力的内容表示。

3.3. 前瞻两次方案 (Look Forward Twice)

在DETR类的解码器中,每一层都会对上一层输出的锚框进行refine。Deformable DETR 提出了一种迭代边界框优化机制,论文称之为 “look forward once”。DINO在此基础上提出了 “look forward twice”。

Fig 6

1. Deformable DETR的 “Look Forward Once” (回顾):

在 Deformable DETR 的解码器中,边界框的预测是一个迭代精炼的过程。这意味着解码器的每一层都会在前一层预测的边界框基础上,逐步优化和调整预测结果。 “Look Forward Once” 策略的提出为了有效管理这一迭代过程中的梯度流,确保训练的稳定性和效率。

具体来说,在解码器的第 i i i 层,它会基于前一层的预测框 b i − 1 b_{i-1} bi1,计算出一个预测偏移量 Δ b i \Delta b_i Δbi。这个偏移量随后被用来更新并得到当前层的预测框 b i b_i bi

关键在于对前一层边界框 b i − 1 b_{i-1} bi1梯度进行截断(detach()

  • 用于后续层输入时的 b i b_i bi 计算:
    b i = Update ( Detach ( b i − 1 ) , Δ b i ) b_i = \text{Update}(\text{Detach}(b_{i-1}), \Delta b_i) bi=Update(Detach(bi1),Δbi)
    这里, D e t a c h ( b i − 1 ) Detach(b_{i-1}) Detach(bi1) 操作非常重要。它意味着当 b i b_i bi 被计算出来,并作为下一层(第 i + 1 i+1 i+1 层)的输入时,从 b i b_i bi 向后传播的梯度不会流回 b i − 1 b_{i-1} bi1 及其之前的层。保证了第 i − 1 i-1 i1 层的参数更新不会受到第 i i i 层损失的直接影响,从而稳定了训练,避免了深度迭代可能带来的梯度不稳定性。

  • 用于当前层损失计算时的 b i p r e d b_i^{pred} bipred
    b i p r e d = Update ( b i − 1 , Δ b i ) b_i^{pred} = \text{Update}(b_{i-1}, \Delta b_i) bipred=Update(bi1,Δbi)
    然而,在计算第 i i i 层的辅助损失 ( L o s s i Loss_i Lossi)时,我们使用的是未经 detach() b i − 1 b_{i-1} bi1。这意味着 b i p r e d b_i^{pred} bipred 会被用来计算 L o s s i Loss_i Lossi,并且这个损失的梯度会正常地回传到 Δ b i \Delta b_i Δbi 和第 i − 1 i-1 i1 层的参数

为何采用 “Look Forward Once”?

  • 稳定训练: 避免了过长的梯度路径,减少了梯度消失或爆炸的风险,尤其是在深度解码器中。
  • 聚焦学习: 每一层解码器都专注于学习如何从前一层提供的(被 detach() 的)边界框出发,进行单次且更准确的精炼。
  • 辅助损失的关键作用: 虽然前一层的参数不会受当前层损失的直接影响,但由于 Deformable DETR 在每一层都计算了辅助损失,这确保了每一层都能独立且有效地学习如何精炼边界框,从而推动整个迭代过程向前发展。

2. DINO 的 “Look Forward Twice” 策略:

思想: 解码器后续层(如第 i + 1 i+1 i+1 层)的精炼信息和损失,对于指导前层(如第 i i i 层)参数的优化也有用。

在计算第 i i i 层参数的梯度时,DINO 不仅仅考虑第 i i i 层自身的辅助损失,还会考虑第 i + 1 i+1 i+1 层的损失是如何通过第 i i i 层的输出(特别是未被 detach() 的中间预测框 b i ′ b'_i bi)来影响的。

DINO 解码器第 i i i 层的处理流程:

  1. 预测偏移量:
    解码器第 i i i 层首先根据其输入 b i − 1 b_{i-1} bi1 (前一层的预测框),预测一个当前层的偏移量:
    Δ b i = Layer i ( b i − 1 ) \Delta b_i = \text{Layer}_i(b_{i-1}) Δbi=Layeri(bi1)

  2. 生成用于下一层输入的预测框(截断梯度):
    为了保持训练的稳定性,DINO 会像 Deformable DETR 一样,生成一个截断梯度的预测框 b i b_i bi。这个 b i b_i bi 会作为第 i + 1 i+1 i+1 层的输入,在反向传播时,任何来自第 i + 1 i+1 i+1 层或更深层的梯度都不会流回 b i − 1 b_{i-1} bi1 及其之前的层。
    b i = Detach ( Update ( b i − 1 , Δ b i ) ) b_i = \text{Detach}(\text{Update}(b_{i-1}, \Delta b_i)) bi=Detach(Update(bi1,Δbi))

  3. 生成用于当前层损失和后续层监督的预测框(保留梯度):
    DINO 的创新在于,还生成另一个版本的预测框 b i ′ b'_i bi。这个 b i ′ b'_i bi 是通过保留梯度的方式计算的,所以它不仅用于计算第 i i i 层的辅助损失,而且,它允许来自后续层的梯度回传
    b i ′ = Update ( b i − 1 , Δ b i ) b'_i = \text{Update}(b_{i-1}, \Delta b_i) bi=Update(bi1,Δbi)

b i b_i bi b i ′ b'_i bi 的作用

  • b i b_i bi (已 detach):主要用于传递到下一层作为输入,确保迭代的稳定性。
  • b i ′ b'_i bi (未 detach):用于计算当前层损失,并且作为一种“概念上的基础”,其梯度会参与影响后续层损失的反向传播。换言之,尽管第 i + 1 i+1 i+1 层实际输入的框是 b i b_i bi(已 detach),但第 i i i 层的参数更新在深层监督下,会考虑到 b i ′ b'_i bi 对第 i + 1 i+1 i+1 层甚至更深层预测的间接影响。

如论文 Fig 6 (b) ,一个预测偏移量 Δ b i \Delta b_i Δbi 不仅用于更新 b i ′ b'_i bi 以计算第 i i i 层的损失,还间接影响了第 i + 1 i+1 i+1 层甚至更深层的预测 ( b i + 1 pred b_{i+1}^{\text{pred}} bi+1pred 等)。这意味着,在优化第 i i i 层的参数(即 Δ b i \Delta b_i Δbi 的来源)时,不仅要考虑 b i ′ b'_i bi 自身的准确性,还要考虑它作为后续层预测的“基础”时的表现。

为何 “Look Forward Twice” 策略更好?

  • 更优的梯度流: 这种策略允许来自解码器更深层的监督信号(即更准确的精炼信息)回传到更浅的层。这使得浅层不仅要学习如何生成一个在当前层看起来不错的偏移,还要学习如何生成一个对后续精炼更有利的偏移和特征表示。
  • 协同优化与全局视野: 浅层解码器在训练时能够“预见”到它们对后续层的影响。因此,DINO 不仅仅是优化当前层的预测偏移,更是间接优化了作为下一层输入的初始框 b i − 1 b_{i-1} bi1 的质量,以及 Δ b i \Delta b_i Δbi 本身。这使得整个解码器能够作为一个协同单元进行优化,而不是每个层孤立地进行优化。通过这种方式,模型能够学习到更全局的精炼策略,从而提升最终的检测性能。

4. 实验

4.1. 实验设置

DINO的实验主要在 COCO 2017 数据集上进行,同时也展示了在 Objects365 等大规模数据集上预训练后的强大泛化能力。

基础设置:

  • 骨干网络 (Backbone): 主要使用ResNet-50 进行对比实验和消融研究,并使用Swin Transformer (SwinL) 冲击SOTA性能。
  • 解码器/编码器层数: 6层编码器和6层解码器。
  • 查询数量: 对于ResNet-50模型,使用900个解码器Query。
  • 多尺度特征: 采用了类似Deformable DETR的多尺度特征图输入到Transformer。
  • 训练周期: 提供了12 epoch (1x), 24 epoch (2x), 36 epoch (3x) 等不同训练周期的结果。

4.2. 效果

2. COCO验证集 (val2017) 上的惊人表现:

  • 对比DN-DETR:

    • 在ResNet-50骨干网络和12 epoch训练下,DINO (49.4 AP) 相较于DN-DETR (43.4 AP) 取得了 +6.0 AP 的巨大提升。尤其在小物体检测上 (AP_S),提升更是达到了 +7.5 AP (32.3 AP vs 24.8 AP)。这充分证明了DINO改进的有效性。
    • 即使训练更长时间 (如24 epochs, DINO 51.3 AP vs DN-DETR 48.6 AP, 提升 +2.7 AP),DINO依然保持显著优势。
  • 收敛速度: 不仅最终性能更高,而且收敛速度也更快。12个epoch就能达到甚至超过其他DETR变体用50个epoch才能达到的性能。

3. COCO测试集 (test-dev) 上的SOTA地位:

Fig 1

  • 当使用SwinL骨干网络并在Objects365上预训练后,DINO在COCO test-dev上取得了 63.3 AP 的成绩(无TTA),在论文发表时,这是公开数据集和模型中的最佳结果。
  • 模型效率: Fig 1(b)显示,DINO在取得SOTA性能的同时,其模型大小和预训练数据量远小于当时的其他一些SOTA模型(如SwinV2-G、Florence)。例如,相比SwinV2-G,DINO模型参数量减少到约1/15,骨干网络预训练数据量减少到约1/60,检测任务预训练数据量减少到约1/5,但取得了更好的结果。

DINO不仅强大,而且高效,是第一个在COCO榜单上超越传统优秀检测器(如HTC++,DyHead)的端到端Transformer检测器。

4.3. 消融实验

论文通过消融实验验证了各项改进的独立贡献。基线模型是一个经过优化的DN-DETR。

  • 基线 (Optimized DN-DETR): 44.9 AP
  • 基线 + 纯查询选择 (Pure Query Selection, 类似Deformable DETR two-stage): 46.5 AP (提升 +1.6 AP)。说明从编码器获取位置先验是有效的。
  • 基线 + 混合查询选择 (Mixed Query Selection, DINO方案): 47.0 AP (相比纯查询选择提升 +0.5 AP,相比基线提升 +2.1 AP)。证明DINO的混合策略优于简单的纯动态查询。
  • 基线 + 混合查询选择 + 前瞻两次 (Look Forward Twice, LFT): 47.4 AP (相比上一步提升 +0.4 AP)。验证了LFT对框精炼的积极作用。
  • 基线 + 混合查询选择 + LFT + 对比去噪训练 (CDN) = DINO: 47.9 AP (相比上一步提升 +0.5 AP)。证明CDN能进一步提升性能,尤其是在区分难负样本方面。

4.4. 训练效率与可扩展性

  • 训练时间: DINO (ResNet-50, batch size 2/GPU) 的每epoch训练时间与Deformable DETR相当(约55min/ep),远快于原始DETR(约16min/ep,但原始DETR的batch size是8,且需要更多epoch收敛)。考虑到DINO用更少的epoch就能达到高精度,其整体训练效率是具有竞争力的。

  • GPU显存: DINO的显存占用(16GB)也与Deformable DETR持平。

  • 可扩展性:

    • 解码器层数: 减少解码器层数对性能影响较大(从6层减到2层,AP下降3.0)。这是合理的,因为框的迭代精炼依赖于解码器深度。但DINO的性能下降幅度小于Dynamic DETR,论文将其归功于混合查询选择提供了更好的初始查询。

    • CDN查询数量: 表7显示,在一定范围内增加CDN查询数量(如从无DN到100个CDN query pairs)能显著提升性能。但超过一定数量后(如1000个DN queries vs 100个CDN query pairs),提升不明显甚至可能略微下降,这表明CDN的质量比单纯的数量更重要。

5. 总结与展望

DINO通过3种创新使得在性能、收敛速度和模型效率上均取得了突破,首次确立了端到端Transformer检测器在主流 benchmarks 上的领先地位。

  1. 对比去噪训练 (CDN): 提升了模型区分目标与背景的能力,减少了重复检测。
  2. 混合查询选择: 巧妙地结合了动态位置先验和静态内容查询,优化了查询初始化。
  3. 前瞻两次方案: 改进了边界框的迭代精炼机制,使得梯度流更有效。

展望:

  • 轻量化与部署: 目前的DINO(尤其基于SwinL)仍然是一个相对较大的模型。如何将其核心思想应用于更轻量化的模型,以适应边缘设备部署,是一个有价值的方向。
  • 多模态与通用性: DETR类模型的端到端特性使其很自然地可以扩展到其他视觉任务,甚至多模态任务。DINO的改进思路是否能迁移到这些领域,值得探索。
  • 进一步优化训练: 虽然CDN等加速了收敛,但DETR类模型的训练仍然比一些传统检测器要复杂。探索更稳定、更高效的训练策略依然重要。

网站公告

今日签到

点亮在社区的每一天
去签到