DETR【论文阅读】
End-to-End Object Detection with Transformers
1. Introduction
- 发表:ECCV 2020
- 影响:在目标检测上使用了一种全新的架构,是里程碑式的工作。简单优雅统一的结构,不再依赖于人的先验知识(anchor生成,nms),只需CNN和transformer。
- 解决问题:正如标题所说的,使用transformer做端到端的目标检测。之前的方法并不是端到端的,需要proposal或anchor 以及后处理(nms:非极大值抑制来去除冗余框),导致训练和部署困难。
- 方法:将目标检测(预测框的位置及类别)看成一个集合预测的问题, 本质上这些boxes是一个集合,不同的图像对应的集合是不同的,而目标检测的任务就是预测给定图片对应的集合。1)提出了一种新的损失函数,通过二分图匹配的方式并行地输出一组独一无二的预测,这样就不存在冗余的框,也不需要nms;2)使用transformer encoder-decoder的架构,在encoder部分引入learned object query(有点类似anchor的意思)对全局信息进行学习,且预测每个object对应的框是并行的,因为这些框的预测并不依赖于其他框(即没有顺序结构)
- 优点:简单,只需支持CNN和transformer,代码也很短。很容易扩展到其他任务上,例如在全景分割任务上就能取得很好的效果。
- 结果:能够和基线模型差不多。
2. Method
框架
图像首先输入CNN中提取特征,将其拉直输入到encoder中去学习全局信息。然后将学习到的特征输入到decoder中生成预测框
- CNN:个人觉得是为了学习局部特征。因为object总是在一块区域。
- encoder:主要是为了学习全局信息,每个点都能看到图像中的其他点(有一定的交互),这样对于一个object大概率就只会出现一个框。这样的全局特征有利于移除全局的框。感觉前面的CNN+encoder就是为了对局部特征和全局特征进行建模。
- decoder:这里的输入除了encoder的特征还有一组qurey,与特征进行交互。query的数量限定了decoder会输出多少个框(在论文中设置的是100)。因此每张图像都会输出100个框。
- 对于100个框,作者将选择框的任务看成集合预测的问题,在训练的时候使用二分图匹配的方式得到匹配的框,在此基础上计算loss。在测试的时候使用阈值进行选择,置信度高于阈值则视为object,否则为背景类。
结果
- 在COCO数据集上取得了与Faster R-CNN competitive的结果;
- 优点:但是DETR在大物体的表现上很好,归功于transformer对全局建模的能力,而基于anchor的方法受限于anchor的大小;且DETR可以看成一种框架,可以较容易地扩展到别的任务上,例如全景分割
- 不足:DETR在小物体上的表现并不好,需要改进。且训练慢(是之前训练时长的10倍)