DETR

文章链接 https://arxiv.org/abs/2005.12872
开源代码 https://github.com/facebookresearch/detr
简单版的代码可以看这个人的 https://www.zhihu.com/people/cw613/posts


这篇文档来自Facebook AI团队,核心是提出了一种叫DETR的新方法(即 DEtection TRansformer),用 transformer 架构来解决“目标检测”问题。它最大的特点是把目标检测变成了“direct set prediction problem”,去掉了很多传统方法里人工设计的复杂步骤,用更简单的思路实现了和经典模型差不多甚至更好的效果。

咱们用大白话拆解一下它的核心内容:

1. 先理解背景:传统目标检测的“麻烦事”

以前做目标检测(比如经典的Faster R-CNN),要走很多“弯路”:

  • 得先预设一堆“锚框”(比如在图片上画很多小方框,猜物体可能在这些框里);
  • 预测后会有很多重复框(比如一个猫被标了3个框),还得用“非极大值抑制(NMS)”手动删掉重复的;
  • “anchor generation”“non-maximum suppression procedure”都是人凭经验调的,不仅麻烦,还容易受限于人的先验知识(比如锚框大小没设对,小物体就检测不到)。

DETR就是要解决这些麻烦——直接让AI输出最终的物体集合,不用锚框,也不用NMS。

2. DETR 的核心思路:两大“神器”

image

(1)用“ bipartite matching 损失”解决“匹配问题”

DETR 一次会预测出N个物体(比如100个,比图片里实际的物体多很多),但怎么判断这些预测里哪些对应真实物体、哪些是“假阳性”(比如把背景当成物体)?
DETR用了“匈牙利匹配算法”:给预测的100个物体和图片里真实的物体做“一对一匹配”——让每个真实物体都对应一个最像它的预测(比如类别对得上、框的位置重叠多),剩下没匹配上的预测就标为“no object”。
这样既保证了每个物体只被预测一次(没有重复),也不用人工设计匹配规则。

(2)用“Transformer encoder-decoder”做“全局推理”

Transformer 的优势是能“全局看信息”(比如翻译时会考虑整个句子的上下文)。DETR把这个思路用到了图片上:

  • Encoder(编码器):先对整张图片做处理,用CNN提取图片特征,再用Transformer编码器“全局扫描”,理解图片里物体的整体布局(比如“猫在桌子上,桌子在窗边”这种关系),还能区分开重叠的物体。
  • Decoder(解码器):用一组“学习出来的查询向量(object queries)”——可以理解成“注意力焦点”,每个焦点负责找一个物体。解码器会结合编码器的全局信息,让这些“焦点”分别定位到不同物体,最后直接输出每个物体的类别和位置框。

关键是,这100个物体的预测是“并行输出”的,不用像其他方法那样“一个一个慢慢预测”,效率更高。

3. DETR的效果:和经典模型比怎么样?

文档在 COCO 数据集上测试了DETR,结果很有意思:

  • 整体性能和基于 CNN 的检测器差不多:用ResNet50当 backbone(基础网络)的DETR,和优化得很好的Faster R-CNN比,AP(衡量检测准度的指标)差不多(42左右),说明它的准度没问题。
  • 擅长找大物体:DETR在“大物体检测”上表现更好(比如大卡车、大象),AP比Faster R-CNN高7.8个点——因为Transformer的“全局推理”能更好地捕捉大物体的整体特征。
  • 小物体稍弱:但在“小物体检测”上(比如小蚂蚁、小零件),DETR比Faster R-CNN差一点——论文说这可以后续优化,就像以前Faster R-CNN用“特征金字塔(FPN)”解决小物体问题一样。

另外,DETR特别“好实现”:不用专门的库,只要有CNN和Transformer的基础代码。
image

4. 拓展:DETR还能做“全景分割”

全景分割是比目标检测更复杂的任务——不仅要找出物体,还要给每个物体的像素标上标签(比如“猫的像素是红色,桌子的像素是蓝色”),还要区分“可计数的物体(比如猫、车)”和“不可计数的背景(比如天空、草地)”。

DETR很容易拓展到这个任务:只要在解码器输出后,加一个“分割头”,让每个“物体查询”不仅输出类别和框,还输出对应的像素掩码(mask)。测试结果显示,DETR在全景分割上也比很多专门的模型表现好,尤其是在“背景分割”(比如天空、墙壁)上,因为Transformer的全局推理能更好地理解背景的整体区域。

5. 总结:DETR的意义

DETR 即 DEtection TRansformer, 是 Facebook AI 研究院提出的 CV 模型,主要用于目标检测,也可以用于分割任务。该模型使用 Transformer 替代了复杂的目标检测传统套路,比如 two-stage 或 one-stage、anchor-based 或 anchor-free、nms 后处理等;也没有使用一些骚里骚气的技巧,比如在使用多尺度特征融合、使用一些特殊类型的卷积(如分组卷积、可变性卷积、动态生成卷积等)来抽取特征、对特征图作不同类型的映射以将分类与回归任务解耦、甚至是数据增强,整个过程就是使用CNN提取特征后编码解码得到预测输出。

总之,DETR 将目标检测任务看作集合预测问题,对于一张图片,固定预测一定数量的物体(原作是100个,在代码中可更改),模型根据这些物体对象与图片中全局上下文的关系直接并行输出预测集,也就是 Transformer 一次性解码出图片中所有物体的预测结果,这种并行特性使得 DETR 非常高效。

DETR 的特点和问题:

  • 特点
  1. 将目标检测建模为集合预测(set prediction)的问题
  2. 使用二分匹配(bipartite matching)的标签分配策略
  3. 端到端(end2end),无需 NMS 后处理
  4. 没有 anchor 等手工设置(hand-craft)的位置先验
  • 问题
  1. 收敛慢(与传统的目标检测器相比,比如 Faster-RCNN)
  2. 与基于纯 CNN 的最强目标检测器相比,在性能上还有差距
  3. Decoder 中的 query 到底是什么鬼

后面这些 基于 DETR 的改进,暂时随便扫了一眼,网上可以参考的博客很多,我存下档方便之后看,就不仔细写了

Deformable DETR

https://zhuanlan.zhihu.com/p/372116181

DAB-DETR

https://zhuanlan.zhihu.com/p/560513044

DN-DETR

https://zhuanlan.zhihu.com/p/578548914

posted on 2025-11-18 22:33  小··明  阅读(120)  评论(0)    收藏  举报