End-to-End Object Detection with Transformers
会议:2020 ECCV
论文:https://arxiv.org/abs/2005.12872
代码:https://github.com/facebookresearch/detr
创新点:
- \作者摒弃了基于anchor、NMS等这种需要手工设计的模块,和R-CNN系列、YOLO系列,以及其他anchor-free的方法都不同,减少检测器对先验性息和后处理的依赖,做到了真正的end2end。
- 使用类似机器翻译的序列预测思想,利用了transformer,其中的self- attention允许模型抑制重复的预测,跳出了目标检测的传统方法。
Instruction
将目标检测任务转化为一个序列预测(set prediction)的任务,没有使用two-stage方法的proposals,没有使用YOLO系列的先验框,也没有用到NMS。
总体的思路是:首先将图像输入到CNN中提取特征,特征+位置信息叠加后输入到tranformer中,输出固定个数的预测结果(一个GT对应一个预测结果)。训练过程中,用到了匈牙利算法和二分图匹配。
作者提出了DETR模块,使用transformer编码-解码器结构和二分图匹配的方法,由输入图像直接得到预测结果序列。transformer结构引入了自注意力机制,它的作用是在一个序列中,显式建模元素之间的所有成对的一种对应关系,使这些结构特别适合于一系列的预测。DETR一次性预测所有的object,整体的模型进行端到端训练,损失函数是在预测和GT上进行二分图匹配。因为是在集合上进行预测,为每一个预测结果分配一个GT,所以可以实现并行计算。
存在的问题:
- DETR对大目标检测效果比较好,因为self-attention更关注全局信息,而对小目标检测效果比较差。可能的原因是transformer做的是全局运算
- 训练时间长,16张V100卡要在COCO上训练500个epochs,5天,性能才可以比肩Faster R-CNN。
Related Works
集合预测
目前没有权威性的深度学习模型用来做集合预测,通常的策略就是设计一个基于匈牙利算法的loss,来做一个预测和GT之间的二分图匹配。
Transformer和并行解码
Transformer是一个用于机器翻译的自注意力机制模块,它通过扫描所有的序列来获得全局信息,优势是全局计算和perfect memory(可以理解为保存全局信息,以及占用内存小),所以它比RNN更适合长序列。
作者将transformer和并行解码结合起来,平衡计算成本和全局计算能力的trade-off,取一个合适的权重。
目标检测
无论是two-stage还是one-stage,先验anchor都很影响检测的结果,作者直接去掉了这些需要手动设计的预检测模块,不在先验anchor上进行预测,而是直接通过一组absolute box直接预测输入图片。
The DETR model
集合预测中的两个关键元素:
- loss是一个集合,其中的元素是每个预测与GT之间的匹配
- 模型架构可以预测一组objects并建模它们之间的关系
集合预测损失函数
DETR输出N(通常比实际目标个数要多)个预测结果,一个主要的困难就是给预测的目标打分,包括类别、位置、尺寸。

- y y y:GT的集合,如果不足N个,则用 ∅ \emptyset ∅补齐
- y ^ \hat{y} y^:N个预测的集合
为了实现这个二分图匹配,需要找到损失最小的匹配顺序 θ ^ \hat\theta θ^</