DETR详解:NLP里面的Transformer也能做目标检测?
本文由林大佬原创,转载请注明出处,来自腾讯、阿里等一线AI算法工程师组成的QQ交流群欢迎你的加入: 1037662480
最近有一篇文章刷屏了,来自Facebook AI的DETR。论文一经开源github的repo就斩获了1000个star,可以说是号召力很强了。但是究其原因,还是这篇论文具有很深刻的创新点。和其他目标检测论文不同的是,这不再是换一换backbone,加一加FPN的工作,而是将目标检测看做是一个基于集合的索引问题。
简而言之,就是给你一系列预测的物体集合,让你来给我定位它。譬如我先告诉你这图片里面有3只牛,2只马,你告诉我都在哪儿,这就是目标检测应有的吗?更重要的是,DETR还能非常简单的推广到全景分割,DETR不仅洞见很深刻,而且很简单。本文就会通过论文解读的方式来白话告诉大家这个论文到底是怎么做的。
我们提出了一种将对象检测视为直接集预测问题的新方法。我们的方法简化了检测流程,有效地消除了对许多手工设计的组件的需求,例如非最大抑制程序或锚点生成,这些组件明确编码了我们对任务的先验知识。新框架的主要成分称为DEtection TRANSformer或DETR,是基于集合的全局损耗,它通过二分匹配和变压器编码器-解码器体系结构来强制进行唯一的预测。给定固定的学习对象查询集,则DETR会考虑对象与全局图像上下文之间的关系,以直接并行并行输出最终的预测集。与许多其他现代检测器不同,新模型从概念上讲很简单,不需要专门的库。 DETR与具有挑战性的COCO对象检测数据集上成熟且高度优化的Faster RCNN基线相比,展示了准确性和运行时性能。此外,可以很容易地概括DETR以统一的方式产生全景分割
以上为官方摘要。
先来看看这个模型的结果:
总的来说还是蛮不错的,AP可以超过40. 论文里面提到了几个比较重要的模型特点:
- 这个模型取得了一个和FasterRCNN改进版差别多的效果;
- 这个模型在大物体上家检测效果很好;
- 小物体上效果不好;
- 我们希望未来加入FPN可以改进这一点(想发paper的赶紧准备,DETR-FPN路子已经有了)。
01. DETR结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8NCgYq8K-1590992020090)(https://i.loli.net/2020/05/28/o1qepdCOJrfNl5A.png)]
原理很简单,网络的输出实际上就是一系列的set,每个set就是我们通常说的一个target,一个target包含哪些?
w,h,x,y
class_id
pro
就这些,一个方格就代表一个target,然后我们通过一式两份的方式来匹配,有目标的就是匹配groundtruth,没有的就是no object。所以这里面就引入了一个很重要的概念,叫做 biartite matching loss
, 翻译过来就叫做一式两份的匹配loss。为什么需要一式两份呢?因为你预测出来的set是无序的,你需要和groundtruth进行一一的匹配。
至于这个匹配方式和匹配的实现,我们后面再细看看。
02. 什么是Transformers
啥是transformer?相信如果不是最NLP的应该不知道,但是transformer这个结构在NLP中已经十分流行了。其实如果告诉你Attention is All you need你可能更加耳熟能详,正式这篇论文最开始提出了transformer这个结构。采用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算限制为是顺序的,也就是说RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:
- 时间片 的计算依赖 时刻的计算结果,这样限制了模型的并行能力;
- 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。
Transformer的提出解决了上面两个问题,首先它使用了Attention机制,将序列中的任意两个位置之间的距离是缩小为一个常量;其次它不是类似RNN的顺序结构,因此具有更好的并行性,符合现有的GPU框架。论文中给出Transformer的定义是:Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequence aligned RNNs or convolution。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TCcft4W-1590992020097)(https://i.loli.net/2020/05/28/AauPQ7MLGHlhmNs.png)]
引用一张NLP的图。我知道你看图看不懂,因为我也不看不懂,白话来说总结如下:
- 其实就是一个自动编码机,或者自监督编码器,或者特征压缩,或者适用于序列的特征压缩;
- 输入一个序列,输出一个序列,在这里面学习序列与序列之间的关系。
但如果你要问我这和RNN,LSTM等有啥区别,我真不好说,加了Attention?本质区别?我认为从问题的结果来看,似乎具有一定的相似性。
whatever,反正我们就是用这么一个transoformer实现了set的query查询:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4y5Ko32k-1590992020098)(https://i.loli.net/2020/05/28/o1qepdCOJrfNl5A.png)]
就是我们这里的encoder和decoder,全部采用transformer结构。
03. DETR的实验结果
从结果上来看,这个模型的结果:
总结来说为:
- AP全面超越FasterRCNN,注意这里的FasterRCNN已经使用了已知的各种trick提升了AP之后的;
- APs依然落后于FasterRCNN,并且还不少;
- 至于原因我们一开始就说了,但是大物体上效果还不错。
04. 实测结果
我们实际上测试了DETR的结果。这里有几个示例图片供大家参考:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuv6xIkc-1590992020100)(https://i.loli.net/2020/06/01/x8LFXlo1tShd5gu.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uX73nqRu-1590992020100)(/media/fagangjin/samsung/datasets/media/manaassets/upRvrI2FYojJKq3.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SoCVXPLA-1590992020101)(https://i.loli.net/2020/06/01/divZCzmpPn2jY9M.png)]
很多人说DETR的效果没有stoa的CenterNet,YoloV4,Efficientdet好,但根据笔者的经验,这些算法的核心缺点和优点可以归纳如下:
- 就如同论文所说,DETR小目标物体差强人意,大目标效果好,原因是没有使用任何花里胡哨的网络优化,比如加入FPN,BiFPN等操作,但是使用下来,它在小物体上的效果其实还是可以的,至少比一些但阶段的算法强;
- 缺点其实也很明显,定位不准确,这个毛病和Centernet等anchorfree的方法差不多;
- DETR的弥补了anchorfree算法的一些缺点,比如笔者在使用centernet的时候就发现,它对于处理重叠场景物体检测是不可能好的,并且大物体效果不行,而这上面DETR却很擅长。
总结来说,我们可以期待在不久的将来将会有FPN-DETR,Efficient-DETR,Bert-DETR等一众改进版本问世,让我们拭目以待。
对于这些问题的思考,欢迎来家来社区发帖,来探讨你的想法,如果你是专业做3D单目目标检测的,也欢迎假如我们的社群一起交流探讨,专业的单目3D目标检测交流微信群,添加微信 jintianandmerry
加入。
如果你想学习人工智能,对前沿的AI技术比较感兴趣,可以加入我们的知识星球,获取第一时间资讯,前沿学术动态,业界新闻等等!你的支持将会鼓励我们更频繁的创作,我们也会帮助你开启更深入的深度学习之旅!
最后本文用到的所有代码,在神力AI平台。地址:
https://github.com/facebookresearch/detr