下面按“这篇论文解决什么问题 → 方法怎么做 → 为什么有效 → 实验结果 → 优缺点”来讲解 DETR 这篇论文。论文题目是 End-to-End Object Detection with Transformers,提出了 DETR:DEtection TRansformer

1. 核心问题:目标检测为什么不够“端到端”?

传统目标检测器,比如 Faster R-CNN、RetinaNet、YOLO 系列,通常不是直接输出最终目标集合,而是依赖很多人工设计的组件,例如:

  • anchor 设计;
  • proposal 生成;
  • 正负样本匹配规则;
  • NMS 非极大值抑制;
  • 多尺度特征设计;
  • 后处理去重。

论文认为,目标检测本质上是一个 集合预测问题

给一张图像,直接预测一组目标,每个目标包含类别和边界框。

但传统方法通常会先产生大量候选框,再靠 NMS 等规则删掉重复框。DETR 的目标是把检测变成真正的 end-to-end set prediction:输入图像,直接输出最终的一组检测结果,不需要 anchor,也不需要 NMS。论文在第 1、2 页反复强调,DETR 用二分图匹配损失和 Transformer 架构,直接并行预测最终检测集合。


2. DETR 的一句话概括

DETR = CNN backbone + Transformer encoder-decoder + object queries + Hungarian matching loss。

它的整体流程是:

  1. 用 CNN,比如 ResNet,提取图像特征;
  2. 把二维特征图展平成序列,送进 Transformer encoder;
  3. 用一组可学习的 object queries 作为 decoder 输入;
  4. 每个 query 输出一个预测槽位;
  5. 每个槽位预测一个类别和一个边界框;
  6. 训练时用 Hungarian matching 把预测和真实目标一一匹配;
  7. 没匹配到真实目标的预测槽位输出 “no object”。

论文第 2 页图 1 展示了这个流程:图像经过 CNN 和 Transformer 后,输出一组 box predictions,再通过 bipartite matching loss 与真实框匹配。第 6 页图 2 展示了更完整的架构,包括 CNN backbone、positional encoding、Transformer encoder、Transformer decoder、object queries 和 FFN prediction heads。


3. 为什么需要 Hungarian matching?

传统检测器会产生很多重复框,所以需要 NMS 去重。DETR 不想用 NMS,因此训练时必须让模型学会:

每个真实物体只对应一个预测,每个预测最多对应一个真实物体。

这就是 二分图匹配 / Hungarian matching 的作用。

假设图片里有 3 个真实物体,但 DETR 固定输出 N 个预测槽位。N 通常远大于真实物体数量。训练时,DETR 会把真实目标集合补齐到 N 个,其中多出来的位置是 “no object”。

然后它计算每个预测和每个真实目标之间的匹配代价,代价包括:

  • 类别是否预测正确;
  • 边界框是否接近真实框。

接着用 Hungarian algorithm 找到总代价最小的一一匹配关系。匹配完成后,才计算最终损失。

这个机制很关键,因为它强制模型学习 唯一预测,避免多个 query 同时预测同一个目标。论文第 5 页给出了匹配公式,第 6 页说明 box loss 使用 L1 loss 和 GIoU loss 的组合。


4. DETR 架构详解

4.1 CNN backbone

输入图片先经过常规 CNN,例如 ResNet-50 或 ResNet-101,得到低分辨率特征图。论文中典型特征通道数是 2048,空间分辨率大约是原图的 1/32。随后用 1×1 卷积把通道降到 Transformer 使用的维度。

4.2 Transformer encoder

CNN 输出的是二维特征图,但 Transformer 接收序列,所以 DETR 把特征图展平成序列。

由于 Transformer 本身不理解空间位置,DETR 会加入 positional encoding。encoder 的 self-attention 可以让图像中任意两个位置相互交互,这使模型能够利用全局上下文。

这对于目标检测很有用。例如,一个物体可能被遮挡,或者一个大物体跨越很大区域,局部卷积特征不一定足够,而全局 self-attention 可以帮助模型理解整体场景。

论文第 10 页图 3 可视化了 encoder attention,显示 encoder 已经能够在一定程度上分离不同实例。

4.3 Transformer decoder 和 object queries

DETR 的 decoder 输入不是文本 token,而是一组可学习向量,叫做 object queries

可以把每个 object query 理解成一个“检测槽位”:

  • query 1 可能负责找某个目标;
  • query 2 可能负责找另一个目标;
  • 没找到目标的 query 输出 “no object”。

但这些 query 不是固定对应某个类别,也不是固定对应某个位置。它们是在训练中自己学出来的。

decoder 通过两种 attention 工作:

  1. self-attention:不同 object queries 之间互相交流,避免重复预测;
  2. cross-attention:object queries 去关注图像特征,定位目标。

论文第 11 页图 4 说明 decoder 层越深,AP 越高;前几层仍可能有重复预测,而后几层通过 self-attention 学会抑制重复框,因此最终层不需要 NMS。

4.4 FFN prediction heads

每个 decoder 输出向量经过一个简单 FFN,预测:

  • 类别;
  • box 中心点坐标;
  • box 宽高;
  • 或者 “no object”。

注意,DETR 直接预测相对于整张图片的绝对归一化 box,而不是像 Faster R-CNN 那样预测 anchor/proposal 的偏移量。


5. DETR 的损失函数

DETR 的训练损失主要由两部分组成:

第一部分:匹配损失

用于 Hungarian matching,决定哪个预测对应哪个真实目标。匹配代价考虑:

  • 分类置信度;
  • box 与真实框的距离。

第二部分:Hungarian loss

匹配完成后,对匹配好的预测计算最终损失:

  • 类别交叉熵;
  • box 的 L1 loss;
  • box 的 GIoU loss。

其中 “no object” 类别会被降低权重,因为大部分预测槽位通常都没有目标。如果不降低权重,模型会过度偏向预测背景。论文第 5、6 页详细描述了这一点。


6. 实验结果:DETR 效果如何?

论文主要在 COCO 2017 上实验,和 Faster R-CNN、RetinaNet 对比。

第 9 页表 1 是核心结果。几个重点:

模型AP小目标 APS大目标 APL
Faster R-CNN-FPN+ R5042.026.653.4
DETR R5042.020.561.1
Faster R-CNN-R101-FPN+44.027.256.0
DETR-DC5-R10144.923.762.3

结论是:

DETR 的整体 AP 可以接近甚至超过强 Faster R-CNN baseline,但它在小目标上明显较弱,在大目标上明显更强。

这很好理解:

  • Transformer 的全局 attention 适合建模大目标和长距离关系;
  • 但 DETR 使用较低分辨率特征,对小目标不友好;
  • DETR-DC5 通过提高特征分辨率改善小目标,但计算量也明显上升。

7. 消融实验:哪些设计最重要?

论文第 10 到 12 页做了很多 ablation,结论很清楚:

7.1 encoder 很重要

去掉 encoder 层后,AP 明显下降,尤其是大目标 AP 下降更多。说明 encoder 的全局 self-attention 对场景理解和实例分离有帮助。

7.2 decoder 层数很重要

decoder 层数越多,预测越好。第 11 页图 4 显示,随着 decoder 层加深,AP 和 AP50 都持续上升。

同时,NMS 在浅层 decoder 输出上有帮助,但在最终层反而会降低 AP。说明 DETR 最终确实学会了去重,不再需要 NMS。

7.3 FFN 很重要

去掉 Transformer 层中的 FFN 后,参数减少,但 AP 下降约 2.3。说明 attention 不是唯一关键,FFN 也提供了重要的非线性变换能力。

7.4 positional encoding 很重要

完全去掉空间位置编码会造成明显下降。Transformer 本身是 permutation-invariant 的,如果没有位置编码,很难知道图像中某个特征来自哪里。


8. 泛化到全景分割

论文还把 DETR 扩展到 panoptic segmentation

做法是在 DETR 的 decoder 输出上加一个 mask head,让每个预测目标不仅输出 box,还输出 mask。然后用 pixel-wise argmax 合并所有 mask,避免 mask 重叠。

第 13 页图 7 展示了 panoptic head,第 14 页表 2 对比了 PanopticFPN 和 UPSNet。结果显示 DETR 在 COCO panoptic segmentation 上取得了很强结果,尤其在 stuff 类别上表现突出。论文认为这可能得益于 encoder 的全局 reasoning 能力。


9. 这篇论文的主要贡献

这篇论文的贡献可以概括为四点:

  1. 把目标检测建模为直接集合预测问题
    不再依赖 anchor、proposal、NMS 等传统组件。

  2. 提出 DETR 架构
    用 CNN 提特征,用 Transformer 做全局建模,用 object queries 并行输出检测结果。

  3. 用 Hungarian matching 实现一一匹配训练
    解决集合预测中的 permutation invariance 和重复预测问题。

  4. 展示 Transformer 可以用于目标检测和全景分割
    DETR 在 COCO 检测上接近 Faster R-CNN,在全景分割上也很有竞争力。


10. 局限性

DETR 虽然概念优雅,但原始版本有几个明显问题:

10.1 训练很慢

论文中 DETR 通常需要 300 到 500 个 epoch,比传统检测器训练周期更长。第 8 页提到,300 epoch 在 16 张 V100 上训练约 3 天,500 epoch 可以进一步提升 AP。

10.2 小目标效果差

表 1 显示 DETR 的 APS 明显低于 Faster R-CNN-FPN。原因之一是 DETR 使用较低分辨率特征,而小目标对高分辨率特征更敏感。

10.3 收敛难度较高

DETR 不使用 anchor 和人工先验,模型需要自己学会从 query 到目标的匹配关系,因此优化更难。


11. 如何直观理解 DETR?

可以把传统检测器想象成:

先撒很多候选框,再筛选、修正、去重。

而 DETR 像是:

给模型 100 个“提问位置”,每个 query 问图像:“这里有没有一个我应该负责的物体?”最后每个 query 要么输出一个物体,要么输出 no object。

Transformer decoder 的 self-attention 让这些 query 之间互相协商:

“这个人我来预测,你不要重复预测。”
“那个车你负责,我负责旁边的狗。”

Hungarian matching 则在训练时告诉模型:

“每个真实物体只能分配给一个 query,不能多人抢同一个目标。”

这就是 DETR 能去掉 NMS 的根本原因。


12. 总结

DETR 的意义不只是提出了一个检测器,而是改变了目标检测的建模方式:它把检测从复杂的人工 pipeline 变成了一个简洁的 集合预测问题。它用 Transformer 的全局建模能力和 Hungarian matching 的一一匹配机制,实现了端到端目标检测。

它的优点是结构简单、概念优雅、不需要 anchor 和 NMS,并且对大目标和全局关系建模很强;缺点是训练慢、小目标表现弱。后续很多工作,比如 Deformable DETR、DAB-DETR、DN-DETR、DINO 等,基本都是围绕“加快收敛、改善小目标、改进 query 设计”来发展。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐