论文信息

  • 标题:DETRs with Hybrid Matching
  • 会议:ICCV 2023
  • 单位:北京大学、斯坦福大学、浙江大学、微软亚洲研究院
  • 代码:github.com/HDETR/H-DETR
  • 论文:https://arxiv.org/pdf/2207.13080.pdf

一、开篇:DETR 先天短板——正样本太少、训练太难

DETR 凭借一对一集合匹配实现了端到端、无 NMS 的神仙检测 pipeline,但天生有个“硬伤”:

👉 一张图里只有不到 30 个真值框,却有 300 个查询
👉 99% 的查询都是负样本,几乎得不到定位监督
👉 监督信号极度稀疏 → 收敛极慢、优化困难

之前的改进要么改查询、要么改注意力,
H-DETR 直接从匹配机制下手

用“一对一”保端到端,用“一对多”提训练效率,两者混合一起训!
在这里插入图片描述

上图展示了我们混合匹配方案在五个具有挑战性的视觉任务(从左至右依次为:2D 物体检测、2D 全景分割、2D 姿态估计、3D 物体检测和多目标跟踪)中的改进效果。我们的混合匹配方案相较于各种基于 DETR 的方法,在 6 倍基准测试中的表现分别提升了 +1.7%、+1.1%、+1.5%、+1.6%、+1.7% 和 +1.6%。所有这些改进均是在相同的训练轮次下实现的,并且在评估过程中无需额外的计算成本。我们按照它们原始的设置,选择了 VoVNetV2 [23]/ResNet50 作为 PETRv2/所有其他方法的骨干网络。

效果简单粗暴:
✅ Deformable DETR 直接 +1.7% AP
✅ 2D 检测、3D 检测、姿态估计、多目标跟踪、全景分割 全涨点
✅ 推理完全不变、不增加 FLOPs、依然无 NMS
✅ 即插即用,兼容几乎所有 DETR


二、核心动机:一对一太弱,一对多太野,混合刚刚好

1)一对一匹配(DETR 原生)

优点:无重复框、不需要 NMS、端到端完美
缺点:正样本太少、训练极慢、难拟合

2)一对多匹配(传统检测)

优点:正样本充足、训练快、精度高
缺点:预测重复、必须 NMS、破坏端到端

3)H-DETR 混合匹配(本文答案)

训练:一对一分支 + 一对多辅助分支联合监督
推理:只保留一对一分支,完美继承 DETR 所有优点

一句话:
用一对多喂饱模型,用一对一保证推理质量!

在这里插入图片描述

上图展示 DETR 的工作流程。

三、全文精读:H-DETR 混合匹配机制详解

3.1 总览:三种混合模式(原文完整实现)

H-DETR 提供三套混合方案,效果都涨点,其中 Hybrid-Branch 最强

  1. Hybrid-Branch(分支混合,主推)
    同时存在两组查询:

    • 主分支:一对一匹配(推理用)
    • 辅助分支:一对多匹配(训练用)
      共享编码器,解码器并行,masked 自注意力隔离
  2. Hybrid-Epoch(轮次混合)
    前 ρ 轮用一对多,后 (1−ρ) 轮用一对一

  3. Hybrid-Layer(层混合)
    前 L1 层用一对多,后 L2 层用一对一


3.2 核心 1:Hybrid-Branch 混合分支(核心创新)

在这里插入图片描述

上图展示了我们混合匹配方案的流程。我们用相同颜色的区域来标记其参数是共享的。我们用“p”来表示训练轮次的百分比。在混合层方案中,我们有 L = L + L2 。

结构

  • 一组查询 Q:一对一匹配(推理唯一使用)
  • 另一组查询 Q̂:一对多匹配(训练辅助)
  • 两个分支并行前馈
  • 使用 masked 自注意力,互不干扰
  • 损失加权相加

一对一分支损失(推理用)

Lone2one=∑l=1LLHungarian(Pl,G)\mathcal{L}_{one2one} = \sum_{l=1}^L \mathcal{L}_{Hungarian}(P^l, G)Lone2one=l=1LLHungarian(Pl,G)

符号解释:

  • LLL:解码器层数
  • PlP^lPl:第 l 层输出预测
  • GGG:真值框集合
  • LHungarian\mathcal{L}_{Hungarian}LHungarian:匈牙利匹配损失(分类+L1+GIoU)

通俗解释:
标准 DETR 损失,保证无 NMS 去重

一对多分支损失(训练辅助)

Lone2many=∑l=1LLHungarian(P^l,G^)\mathcal{L}_{one2many} = \sum_{l=1}^L \mathcal{L}_{Hungarian}(\widehat{P}^l, \widehat{G})Lone2many=l=1LLHungarian(P l,G )

关键设计:
把真值 G 重复 K 次得到 G^\widehat{G}G
再做匈牙利匹配 → 自动实现一对多分配!

符号解释:

  • P^l\widehat{P}^lP l:辅助分支第 l 层预测
  • G^\widehat{G}G :重复 K 次的真值集合
  • KKK:一般取 6×

通俗解释:
让同一个物体能匹配到多个查询,大大增加正样本!

总损失

Ltotal=Lone2one+λ⋅Lone2many\mathcal{L}_{total} = \mathcal{L}_{one2one} + \lambda \cdot \mathcal{L}_{one2many}Ltotal=Lone2one+λLone2many


3.3 核心 2:Masked 自注意力(防止干扰)

为了不让一对多分支破坏一对一的去重能力:
两组查询之间完全屏蔽注意力!
只在组内做自注意力。

这是 H-DETR 既能享受一对多增益、又能保持无 NMS 的关键。


3.4 核心 3:推理完全不变(0 开销)

推理阶段只保留一对一分支,直接扔掉一对多分支。
👉 模型结构不变
👉 速度不变
👉 显存不变
👉 依然无 NMS
👉 完全兼容部署


四、核心公式 + 逐字符解释(全文覆盖)

公式 1:一对一匹配损失

Lone2one=∑l=1LLHungarian(Pl,G)\mathcal{L}_{one2one}=\sum_{l=1}^L \mathcal{L}_{Hungarian}(P^l,G)Lone2one=l=1LLHungarian(Pl,G)

  • lll:解码器层编号
  • LLL:总层数
  • PlP^lPl:第 l 层预测框集合
  • GGG:真值框集合
  • LHungarian\mathcal{L}_{Hungarian}LHungarian:匈牙利匹配损失

公式 2:一对多匹配(真值重复 K 次)

G^={G1,G2,...,GK},  Gi=G\widehat{G}=\{G^1,G^2,...,G^K\}, \ \ G^i=GG ={G1,G2,...,GK},  Gi=G

  • KKK:重复倍数(默认6)
  • G^\widehat{G}G :用于一对多的增强真值

公式 3:一对多损失

Lone2many=∑l=1LLHungarian(P^l,G^)\mathcal{L}_{one2many}=\sum_{l=1}^L \mathcal{L}_{Hungarian}(\widehat{P}^l,\widehat{G})Lone2many=l=1LLHungarian(P l,G )

公式 4:混合总损失

L=Lone2one+λLone2many\mathcal{L}=\mathcal{L}_{one2one}+\lambda \mathcal{L}_{one2many}L=Lone2one+λLone2many

  • λ\lambdaλ:平衡系数,通常取 1

五、核心代码(PyTorch 官方风格)

# ==============================
# H-DETR 混合分支核心
# ==============================
class HybridBranchDecoder(nn.Module):
    def __init__(self, decoder_layer, num_layers):
        super().__init__()
        self.layers = _get_clones(decoder_layer, num_layers)
        self.num_layers = num_layers

    def forward(self, Q, Q_hat, memory, query_pos=None, query_pos_hat=None):
        # Q: 一对一分支查询
        # Q_hat: 一对多辅助查询
        output = Q
        output_hat = Q_hat

        for layer in self.layers:
            # 并行前馈,mask 自注意力防止交互
            output, output_hat = layer(
                output, output_hat, memory,
                query_pos, query_pos_hat
            )

        return output, output_hat

# ==============================
# 混合损失计算
# ==============================
def hybrid_loss(preds, preds_aux, targets):
    # 一对一损失
    loss1 = HungarianLoss(preds[-1], targets)

    # 构造重复 K 次的真值
    targets_many = []
    for t in targets:
        targets_many.append(t.repeat(K, 1))
    # 一对多损失
    loss2 = HungarianLoss(preds_aux[-1], targets_many)

    return loss1 + 1.0 * loss2

六、实验结果与全图表分析(全文复现)

6.1 2D 目标检测(COCO)

表格 1(来自原文 Table 1)

模型 主干 epoch AP AP(S) AP(M) AP(L)
Deformable DETR R50 12 47.0 29.1 50.0 61.6
H-Deformable DETR R50 12 48.7 31.2 51.5 63.5

✅ 提升:+1.7% AP
✅ 小目标 +2.1%,大目标 +1.9%
✅ 全尺寸稳定涨点

6.2 3D 目标检测(nuScenes)

表格 2(来自原文 Table 3)

模型 主干 epoch mAP NDS
PETRv2 VoV99 36 41.07 50.68
H-PETRv2 VoV99 36 42.59 52.38

✅ +1.52% mAP
✅ +1.7% NDS

6.3 人体姿态估计(COCO)

表格 3(来自原文 Table 4)

模型 主干 epoch AP
PETR R50 100 69.3
H-PETR R50 100 70.9

✅ +1.6% AP

6.4 多目标跟踪(MOT17)

表格 4(来自原文 Table 5)

模型 epoch MOTA
TransTrack 20 67.1
H-TransTrack 20 68.7

✅ +1.6% MOTA
✅ FN 大幅下降


图片 1(来自原文 Figure 1)
5 个任务全场景涨点图
2D检测、全景分割、姿态估计、3D检测、多目标跟踪
全部稳定 +1.1~1.7%

分析:
H-DETR 是真正通用的 DETR 训练插件,不挑任务、不挑模型。


七、三种混合方案对比(原文完整结论)

表格 5(来自原文 Table 6)

  1. Branch 混合 > Epoch 混合 > Layer 混合
  2. Branch 混合精度最高
  3. 推理 FPS 完全一致
  4. 训练耗时仅增加约 7%

八、和 Group DETR / DN-DETR / DINO 区别(超清晰)

方法 核心 是否需要辅助查询 推理
DN/DINO 去噪查询 扔掉
Group DETR 分组一对一 扔掉
H-DETR 混合匹配 扔掉

核心差异:

  • H-DETR 不修改查询结构,纯从匹配机制提升
  • 最通用、最容易嵌入各类 DETR

九、全文总结(最精简版)

核心创新

  1. 混合匹配:一对一 + 一对多,兼顾去重与训练效率
  2. 分支并行:主分支保推理,辅助分支提性能
  3. Masked 自注意力:隔离互不干扰
  4. 推理 0 开销:完全不改变部署流程
  5. 超通用:2D/3D/姿态/跟踪/分割全涨点

一句话封神

H-DETR 用最简单的混合匹配,解决了 DETR 正样本不足的世界级难题,成为全任务通用的即插即用涨点神器。


Logo

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

更多推荐