论文信息

  • 标题:Conditional DETR for Fast Training Convergence
  • 会议:ArXiv 2021
  • 单位:中国科学技术大学、北京大学、微软亚洲研究院
  • 代码:https://github.com/Atten4Vis/ConditionalDETR
  • 论文:https://arxiv.org/pdf/2108.06152.pdf

0 前言

DETR 凭借端到端、无 Anchor、无 NMS 的优雅范式,彻底革新了目标检测 pipeline。但它训练收敛极慢——常规需要 500 个 epoch 才能达到稳定性能,严重影响落地效率。

核心痛点:
DETR 的跨注意力 过度依赖内容嵌入(content embedding) 去定位物体四条边,空间位置信息没被高效利用,前期训练注意力混乱。

本文提出 Conditional DETR,通过条件空间查询(conditional spatial query) 解耦空间与内容注意力,让每个注意力头精准聚焦物体边缘/内部区域,实现:

  • R50/R101 收敛速度提升 6.7×
  • DC5-R50/R101 收敛速度提升 10×
  • 50 epoch 效果接近原版 DETR 500 epoch

1 论文核心动机

1.1 为什么 DETR 训练慢?

原版 DETR 跨注意力计算:
(cq+pq)⊤(ck+pk)(c_q + p_q)^\top (c_k + p_k)(cq+pq)(ck+pk)

  • cqc_qcq:查询内容特征
  • pqp_qpq:空间位置查询(object query)
  • ckc_kck:键内容特征
  • pkp_kpk:键位置编码

问题:
空间查询 pqp_qpq 只提供粗粒度先验,无法利用图像信息精确定位边缘;
内容查询 cqc_qcq 被迫同时承担“匹配内容”+“定位位置”双重任务,训练难度暴增。

如图 1 所示:

  • 50 epoch 原版 DETR:左右边注意力完全散乱
  • 50 epoch Conditional DETR:四条边缘注意力清晰对齐
  • 500 epoch 原版 DETR:才勉强对齐

在这里插入图片描述

图 1. 我们条件 DETR-R50 训练 50 个周期(第一行)、原始 DETR-R50 训练 50 个周期(第二行)以及原始 DETR-R50 训练 500 个周期(第三行)的空间注意力权重图比较。我们条件 DETR 和训练 500 个周期的 DETR 的权重图能够很好地突出四个端点区域。相比之下,训练 50 个周期的 DETR 的负责左右边缘(第二行的第三和第四张图)的空间注意力权重图无法很好地突出端点。绿色框为真实边界框。

第一行:Conditional DETR-50epoch;第二行:DETR-50epoch;第三行:DETR-500epoch。
绿色框为真值。可以看到本文方法仅需 50 轮就实现精准边界聚焦,原版需要 500 轮。


2 Conditional DETR 整体架构

整体流程完全继承 DETR
Backbone → Transformer Encoder → Transformer Decoder → 分类/回归头

唯一改动:Decoder 跨注意力
提出 Conditional Cross-Attention,将空间与内容解耦:

  • 查询:concat(cq,pqcond)concat(c_q, p_q^{cond})concat(cq,pqcond)
  • 键:concat(ck,pk)concat(c_k, p_k)concat(ck,pk)
  • 注意力:cq⊤ck+pqcond⊤pkc_q^\top c_k + p_q^{cond\top} p_kcqck+pqcondpk

在这里插入图片描述

图 2. 展示了条件 DETR 中的一个解码器层。与原始 DETR [3] 的主要区别在于输入查询和用于交叉注意力的输入键。条件空间查询通过灰色阴影框中所示的操作从可学习的二维坐标 s 和前一个解码器层输出的嵌入中预测得出。二维坐标可以从对象查询(虚线框)中预测得出,或者简单地作为模型参数学习。空间查询(键)和内容查询(键)被连接起来作为查询(键)。由此产生的交叉注意力被称为条件交叉注意力。与 DETR [3] 一样,解码器层重复 6 次。

灰色框为本文核心:从 decoder embedding 预测条件空间查询,与位置编码做变换。


3 核心创新:条件空间查询

3.1 预测参考点

框回归公式:
b=sigmoid(FFN(f)+[s⊤00])b = sigmoid\left(FFN(f) + \begin{bmatrix}s^\top \\ 0 \\ 0\end{bmatrix}\right)b=sigmoid FFN(f)+ s00

  • bbb:预测框 (cx,cy,w,h)(cx, cy, w, h)(cx,cy,w,h)
  • fff:decoder 特征
  • sss参考点(2D),本文核心可学习变量
  • sigmoid:归一化到 0~1

3.2 条件空间查询生成

  1. 对参考点归一化并做正弦编码:
    ps=sinusoidal(sigmoid(s))p_s = sinusoidal(sigmoid(s))ps=sinusoidal(sigmoid(s))

  2. 用 FFN 从 fff 预测变换向量:
    λq=FFN(f)\lambda_q = FFN(f)λq=FFN(f)

  3. 逐元素乘积得到条件空间查询:
    pq=λq⊙psp_q = \lambda_q \odot p_spq=λqps

通俗解释
让模型自己学一个“空间注意力滤波器”,精准照射物体四条边或中心区域。

3.3 解耦跨注意力

Attention=cq⊤ck+pq⊤pkAttention = c_q^\top c_k + p_q^\top p_kAttention=cqck+pqpk

  • 内容注意力:负责“是什么”
  • 空间注意力:负责“在哪里”

多头机制自然分工
8 个头中,通常 4 个头对应 4 条边,1 个头负责物体内部分类,其余冗余互补。

在这里插入图片描述

图 3. 展示了由我们的条件 DETR 计算得出的空间注意力权重图(第一行)、内容注意力权重图(第二行)以及综合注意力权重图(第三行)。这些注意力权重图来自 8 个注意力头中的 5 个,分别负责四个端点以及对象框内部的一个区域。针对四个端点的内容注意力权重图突出显示了框内的分散区域(自行车)或两个对象实例中的类似区域(牛),而相应的综合注意力权重图则借助空间注意力权重图来突出显示端点区域。对象框内部区域的综合注意力权重图主要依赖于空间注意力权重图,这表明对象内部区域的表示可能包含了足够的类别信息。这些图是使用 50 个训练周期的条件 DETR-R50 训练得到的。

第一行:空间注意力(精准锁定边缘)
第二行:内容注意力(散乱)
第三行:融合注意力(干净聚焦)


4 核心代码片段(PyTorch 风格)

# ==============================
# 条件空间查询生成(核心)
# ==============================
def compute_conditional_spatial_query(
    decoder_feature,  # 解码器特征 f
    reference_point   # 参考点 s
):
    # 1. 归一化 + 正弦位置编码
    ref_sigmoid = torch.sigmoid(reference_point)
    pos_s = sinusoidal_encoding(ref_sigmoid)  # [B, 256]

    # 2. 从 decoder feature 预测变换向量 λ
    lambda_q = ffn_theta(decoder_feature)    # [B, 256]

    # 3. 逐元素乘积 → 条件空间查询
    cond_query = lambda_q.unsqueeze(1) * pos_s.unsqueeze(1)
    return cond_query

# ==============================
# 解耦跨注意力
# ==============================
class ConditionalCrossAttention(nn.Module):
    def forward(self, content_q, spatial_q, content_k, spatial_k, value):
        # 内容注意力
        attn_content = torch.matmul(content_q, content_k.transpose(-2,-1))

        # 空间注意力
        attn_spatial = torch.matmul(spatial_q, spatial_k.transpose(-2,-1))

        # 融合
        attn = (attn_content + attn_spatial) / scale
        attn = attn.softmax(dim=-1)

        out = torch.matmul(attn, value)
        return out

5 实验结果与分析

5.1 收敛速度对比

表格1(来自原文 Table 1) COCO 2017 val

模型 epoch AP
DETR-R50 500 42.0
DETR-R50 50 34.9
Conditional DETR-R50 50 40.9
Conditional DETR-R50 75 42.1
模型 epoch AP
DETR-DC5-R50 500 43.3
DETR-DC5-R50 50 36.7
Conditional DETR-DC5-R50 50 43.8

结论:

  • DC5-R50:50 epoch > DETR 500 epoch
  • 加速比:10 倍
  • R50:加速比 6.7 倍

5.2 强骨架收益更明显

更深、更强的骨架(DC5)依赖内容特征更严重,因此 Conditional DETR 收益更大。


6 相关工作对比

  • Deformable DETR:稀疏采样,多尺度特征
  • SMCA:高斯先验调制注意力
  • Conditional DETR:解耦空间-内容,端到端学习“边缘注意力”,无需人工先验

7 实现细节

  • 解码器:6 层
  • 多头数:8
  • 优化器:AdamW
  • 损失:Focal Loss + L1 + GIoU
  • 匹配:匈牙利匹配

8 总结

Conditional DETR 抓住了 DETR 训练慢的本质:空间与内容注意力耦合

通过条件空间查询,让每个头自动聚焦物体边缘/内部区域,大幅降低对内容特征的依赖,最终实现:
✅ 训练收敛提速 6.7~10 倍
✅ 精度持平甚至更高
✅ 结构优雅,完全兼容 DETR
✅ 工业落地极具价值

如果你在做 DETR 系列落地,Conditional DETR 几乎是必加的基础改进


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐