重读经典:《End-to-End Object Detection with Transformers》

DETR 论文精读【论文精读】

这一次朱毅博士给大家精读的论文是 DETR,是目标检测领域里程碑式的一个工作,文章收录于 ECCV20DETRDetection Transformer 的缩写,作者使用 Transformer 简化了目标检测流程,不再需要进行 NMS(非极大值抑制) 操作,而是直接将目标预测看作是集合预测问题

这篇论文在2020年5月第一次挂到 arxiv上的时候,就引起了计算机视觉圈的强烈反响,网上很多人都觉得这篇论文应该是 ECCV20 的最佳论文。从20年5月到22年5月两年的时间 DETR 的引用次数就已经超过了2000,而且它的官方代码也有将近 9000个star。如果跟去年大火的 CLIP 相比,CLIP 的官方代码到现在也只有8000个star,可见 DETR 的受欢迎程度。

DETR 论文连接为:https://export.arxiv.org/pdf/2005.12872.pdf

DETR 代码链接为:https://github.com/facebookresearch/detr


0. 标题、作者、摘要

首先是论文标题,论文标题意思是:使用 Transformers 进行端到端的目标检测。

在这里插入图片描述
第一个关键词是 End-to-End 即端到端的目标检测,另外一个就是使用了目前大火的 Transformer 来做目标检测。

  • 对目标检测了解不多的同学来说,可能并不能体会到这个端到端的意义究竟有多大?事实上呢,从深度学习开始火一直到 DETR,目标检测领域都很少有端到端的方法。大部分方法至少最后还需要一个后处理的操作,也就是 nms 这个操作。不论是 proposal based 的方法还是 anchor based 的方法,还是 non anchor based 的方法,最后都会生成很多的预测框,如何去除这些冗余的框,就是 nms 要做的事情,而因为有了 nms 的存在,这个模型在调参上就比较复杂。而且即使训练好了一个模型,部署起来也非常困难,因为 nms 这个操作不是所有硬件都支持的。所以说一个简单的端到端的目标检测系统,是大家一直以来梦寐以求的,而 DETR 就解决了以上说的这些痛点。

  • 它既不需要 proposal 也不需要 anchor,直接利用 Transformer 这种能全局建模的能力,把目标检测看成了一个集合预测的问题,而且也因为有了这种全局建模的能力,所以 DETR 不会输出那么多冗余的框,它最后出什么结果就是什么结果。而不需要再用 nms 去做这个后处理了,一下就让模型的训练和部署都简单了不少。作者其实在他们的官方代码里也写到,他们的目的就是不想让大家一直觉得目标检测是一个比图像分类难很多的任务。它们其实都可以用一种简单的优雅的框架去做出来,而不像之前那些目标检测框架需要很多的人工干预,很多的先验知识,而且还需要很多复杂的库,或者普通的硬件不支持的一些算子。

文章作者全部来自 Facebook AI ,一作是 NYU 的博士生,这应该是在 Facebook 实习的时候做出来的工作。二作 是 PyTorch 最重要的维护者之一,五作是第一个提出全景分割这个任务的,就是 panoptic segmentation,在分割领域非常有经验,因此本文在最后做了一个全景分割的拓展实验。


下面是论文摘要,摘要总共有9句话。

在这里插入图片描述

  • 第1句话交代了这篇文章干了什么事情,这篇文章把目标检测任务直接看成是一个集合预测的问题。因为本来的任务就是给定一个图片然后去预测一堆框,每个框不光要知道它的坐标,还要知道这个框里所包含的物体的类别。但是这些框其实是一个集合,对于不同的图片来说,它里面包含的框也是不一样的,也就是说每个图片对应的那个集合也是不一样的,而我们的任务就是说给定一个图片我们要去把这个集合预测出来。听起来这么直接的一个设置之前很少有人把它做 work
  • 第2句话是这篇文章的贡献,把目标检测做成了一个端到端的框架。把之前特别依赖于人的先验知识的部分都给删掉了。比如说最突出的非极大值抑制的部分,还有生成 anchor 的部分。一旦把这两个部分拿掉之后,就不用费尽心思去设计这种 anchor,而且最后也不会出这么多框,也不会用到 nms,也不会有那么多的超参需要去调,整个网络就变得非常的简单。
  • 第3句话具体介绍了 DETR,本文提出了两个东西,一个就是新的目标函数,通过这种二分图匹配的方式能够强制模型去输出一组独一无二的这个预测,意思就说没有那么多冗余的框了,每个物体理想状态下他就会生成一个框。另外一个就是使用了这种 tranformer encoder-decoder 的架构。
  • 第4句话介绍在这个transformer encoder-decoder 架构中,在 transformers 解码器的时候,另外还有一个输入 learned object query。有点类似于 anchor 的意思。在给定了这些 object query 之后,DETR 就可以把这个 learned object query 和全局的图像信息结合在一起,通过不停的去做注意力操作,从而能够让模型直接输出最后的一组预测框,而且作者这里还强调了一下是 in parallel,就是一起出框。为什么要强调是并行出框呢,其实有两个原因:一个原因是在 Tranformer 原始的2017年那篇论文里,decoder 是用在自然语言处理的任务上,所以还有一个掩码机制,采用的是一种自回归的方式就一点一点把这个文本生成出来的。而目标检测任务我们是一股脑就把这些目标检测全都输出出来。而且第二点不论是从想法上,还是从实效性上来说并行都比串行要更合适,因为首先这些框,它是没有一个顺序的,并不是说想检测一个大物体,就要先依赖于检测小物体,或者说检测图片右边的物体就要依赖于图检测图片左边的物体;而没有一个先后的顺序,所以说没法做这种自回归的预测。第二对于视觉,尤其对于检测任务来说,我们肯定是希望它越快越好,越实时性越好。所以并行一起出框,肯定是要比顺序的这种一个一个出框要实效性高很多的。
  • 第5句话介绍了 DETR 有什么好处,作者这里把简单性排到了第一位。这个新的模型从想法上来看非常简单,而且从实践上来看也不需要一个特殊的 deep learning library,只要库或者硬件支持 cnntransformer,那就一定能支持 DETR
  • 第6句话作者提到了 DETR 的性能,在 COCO 数据集上 DETR 和一个训练的非常好的 Faster RCNN 的基线网络取得了差不多的这个结果。而且模型内存、速度也和 Faster RCNN差不多。其实光从目标检测的这个性能上来说,DETR 在当时不是最强的,它和当时最好的方法差了将近10个点。
  • 第7-8句话作者又试了一下别的任务,在全景分割这个任务上 DETR 的效果非常不错。最后作者又列了一下这个优点,就是 DETR 能够非常简单的就能拓展到其他的任务上,比如说全景分割,就是用 DETR 在后面加一个专用的分割头就可以了。这个性质其实非常厉害,尤其是对于一个新的方法来说。因为它本来就是挖了一个坑,那这个坑肯定是挖的越大越好,这样接下来才会有更多人来填坑。从这个角度来说性能稍微差一点其实是好事,因为接下来大家才会在这个上面去继续去做。
  • 最后作者说他们的这个代码全都在 facebook research 下面这个 DETRrepo 里,感兴趣的同学可以去玩一玩。facebook research 的代码库写的非常好,尤其是本来就是做开源的人写出来的代码库,看起来都是一种享受。

1. 引言

在这里插入图片描述
引言第一段介绍了本文研究的动机。

  • 作者上来先说目标检测任务就是对于每一个这个感兴趣的物体去预测一些框和这个物体的类别,所以说白了就是一个集合预测的问题。但是现在大多数好用的目标检测器都是用一种间接的方式去处理这个集合预测的问题。比如说用这种 proposal 的方式( RCNN 系列的工作 Faster R-CNNMask R-CNNCascade R-CNN),或者 anchor 方式( YOLOFocal loss),还有就是最近的一些 non anchor base 的方法,比如说用物体的中心点(centernet FCOS )。这些方法都没有直接的去做几何预测的任务,而是设计了一个代理任务,要么是回归要么是分类,然后去解决目标检测问题。
  • 但是所有这些提到的方法,它们的性能很大程度上受限于后处理操作,也就是 nms 操作。因为这些方法都会生成大量的这种冗余的框,也就是这里说的 near duplicate predictions 。接近重复的预测,对于同一个物体会大大小小左左右右的出来很多框,所以最后就得用 nms去把这些框都抑制掉。但是也因为用了 anchor,因为用了 nms,所以导致这些检测器都非常的复杂,而且非常的难以优化,非常的难调参。
  • 为了简化这个流程本文提出了一个直接的方式去解决集合预测的问题,从而巧妙的绕过了之前所有的这些代理任务,也就绕过了人工设计的部分,比如说生成 anchor,比如说使用 nms
  • 作者说这种端到端的思想其实已经在很多别的任务里大范围的使用了。而且能使这些任务都变得更加的简单,更加的好用。但是在目标检测领域还没有人这么做过,之前也有一些类似的尝试(比如 learnable nms 或者 soft nms)。它们一定程度上简化了目标检测的流程,但是要么就是融入了更多的先验知识,要么就是在这些比较难的benchmark 数据集上取得不了很好的成绩。
  • 最后作者总结第一段,作者的目的就是要把这个鸿沟弥补上:即我们不需要使用更多的先验知识,我们就是端到端的一个网络同时还能在这些比较难的数据集上取得更好的结果。

在这里插入图片描述
图一是 DETR 整个流程,大致分为以下几步:

  • 首先用卷积神经网络抽取特征,然后拿到这个特征之后把它拉直,送给一个 Transformerencoder-decoder
  • 在这里 Transformer encoder 的作用就是去进一步的学习全局的信息,为接下来的 decoder也是为最后的出预测框做铺垫。本文中用了很多的实验和图来说明为什么要用 encoder,但最直观最简单的理解就是如果使用了 encoder。那每一个点或者说每一个特征就跟这个图片里其他的特征都会有交互了,这样大概就知道哪块是哪个物体,哪块又是另外一个物体,对于同一个物体来说就只应该出一个框而不是出好多个框。这种全局的特征非常有利于去移除这种冗余的框。
  • 做完第二步全局建模之后,第三步就是用 Transformer decoder 生成框的输出。这里作者其实没有画 object query,但其实这个 object query 挺重要的。当有了图像特征之后,这里还会有一个 object query,这个 query 其实就是限定了要出多少个框。通过这个 query 和特征不停的去做交互,在这个 decoder 里去做自注意力操作从而得到最后的输出的这个框。在论文里作者选择的这个框数是100,是一个固定的值。意味着不论是什么图片最后都会预测出来100个框,那现在问题来了出的这100个框怎么去和 Ground Truth 做匹配? 然后去算 loss ?
  • 第4步是文章最重要的一个贡献,文章把这个问题看成是一个集合预测的问题。最后用二分图匹配的方法去算这个 loss,比如这里 Ground Truth 其实就只有两个框,在训练的时候通过算这100个预测的框和这两个 Ground Truth框之间的这种 matching loss,从而决定出在这100个预测中哪两个框是独一无二的。一旦决定好这个匹配关系之后,就像普通的目标检测一样去算一个分类的 loss,再算一个 bounding boxloss。至于那些没有匹配到 Ground Truth 的框,也就是剩下的98个框,就会被标记成没有物体也就是所谓的背景类。

总结一下第一步用卷积神经网络抽特征、第二步用 Transformer encoder 去学全局特征帮助后面做检测、第三步
就是用 Transformer decoder去生成很多的预测框、第四步就是把预测框和 Ground Truth 的框做一个匹配,然后最后在匹配上的这些框里面去算目标检测的 loss

这样整个模型就能训练起来了,那推理的时候 DETR 是怎么做的呢?同样的道理,前三步都是一致的,只有第四步不一样。因为训练的时候,需要去算这个二分图匹配的 loss,但是在做推理的时候 loss 是不需要的,直接在你在最后的输出上用一个阈值去卡一下输出的置信度。文章中置信度大于0.7的预测就会被保留下来,也就是所谓的前景物体。那剩下所有的那些置信度小于0.7的就被当成背景物体。可以看到 DETR 不论是在训练的时候还是在做推理的时候,都没有 anchor 生成的这一步而且也都没有用到 nms


在这里插入图片描述
介绍完了模型架构,作者在引言最后说了下结果,而且还顺带提了几个细节:

  • 第一个结果呢就是在 COCO 这个数据集上,DETR 取得了跟之前一个 Faster RCNN 的这个基线网络匹配的结果。就是不论从 AP 性能上还是从模型大小和速度上都差不多。
  • 而且尤其值得一提的是虽然这个 AP 结果差不多,但是大物体AP 和小物体的 AP 差的还是非常远的,比如说 DETR,就对大物体表现特别的好。这个应该归功于使用了 Transformer,能做这种全局的建模。不论物体有多大,应该都能检测出来。而不像原来一样,如果使用 Anchor 的话就会受限于 Anchor 的大小,但是同时 DETR 也有缺陷,比如在小物体上效果就不怎么样。但作者觉得这个还好,毕竟 DETR 是一个新的框架,也需要时间去进化。像之前的目标检测器也都是通过了多年的进化才达到现在这个水平,比如说 YOLO-v1, v2, v3, v3, v4, v5,还有 RCNN,Fast RCNN,Faster RCNN,Mask RCNN,Fpn RCNN,Cascade RCNN

作者说接下来肯定是会有后续工作来提高这一点的,就像几年前 FPNFaster rcnn 做的一样,通过使用多尺度 特征,能够提升这个小物体的检测。事实上确实如此,只不过这次不是像之前一样,用了一年半的时间才从 Fast RCNNFPN,这次只用不到半年的时间 Deformable DETR 就出来了。不仅很好的通过多尺度的特征解决了小物体检测问题,同时也解决了作者接下来提到的问题,就是DETR训练太慢

DETR 确实训练特别慢,想要达到很好的效果作者训练了500个 epoch。对于 COCO 来说,一般就训练几十个 epoch。所以500个 epoch 相当于是十倍于之前的训练时长。这里也是很值得我们学习的一点,就是当你改变了训练 setting,使你这个方法跟之前的方法都没法去做公平对比的时候,怎样做才能让审稿人相信你的说法,才能让审稿人放过你。我们可以看一看 DETR 是怎么解决的。

最后作者强调了 DETR 不光是做检测的一个方法,它其实是一个框架可以拓展到很多别的任务上。作者说 DETR 的设计理念是为了能够适用于更多的复杂的任务,从而让这些复杂任务都变得简单,而且甚至有可能用一个统一的框架去解决所有的问题。事实上作者也确实做到了,不光是在这篇论文里能验证出 DETR 对全景分割有用,而接下来在很多别的后续工作里也验证了 DETR 的有效性。很快就把 DETR 拓展到了目标追踪、视频里的姿态预测、视频里的语义分割等等各种任务。所以 DETR 真的是遍地开花,也难怪那么多人觉得 DETR 有拿最佳论文的潜质。


2. 相关工作

相关工作这一节作者讲了三个部分:

  • 作者先讲了下集合预测这个问题,以及之前大家一般都是用什么方法去解决这种集合预测的问题。因为视觉用集合预测去解决问题的不多,所以作者觉得有必要来科普铺垫一下。
  • 然后第二部分作者就介绍了下 Transformer,以及 parallel decoding。就是如何不像之前的那些 Transformer decoder 那样去做自回归的预测,而是一股脑一口气把预测全都给你返回回来。
  • 然后第三部分就是介绍了下目标检测之前的一些相关工作,这里就着重讲一下第三部分。

在这里插入图片描述
2.3节作者说现在的大部分的目标检测器都是根据已有的一些初始的猜测然后去做预测。比如说对于 two-stage 的目标检测方法来说初始猜测就是中间的 proposal;对于 single-stage 的目标检测方法来说初始猜测就是 anchor 或者说是物体的中心点。最近的一篇论文做了详细的比较,发现之前方法的性能跟刚开始的初始猜测非常相关,就是怎么去做后处理,得到最后的预测其实对最后的性能的影响是至关重要的

作者这里就从两个方面来阐述了这件事情:

  • 第一个就是用集合的思想来做,就是 set-based loss,之前的可学习的 NMS方法或者说关系型网络都可以利用类似于自注意力的方法去处理物体之间的这种联系。从而导致最后能得出独一无二的预测,这样就不需要任何的后处理步骤了。但是这些方法的性能往往都比较低,那为了跟当时那些比较好的方法性能对齐,这些方法往往又用了一些人工干预。比如这里说的用手工设计的场景特征,去帮助模型进行学习但是 DETR 的目标是想让目标检测做的尽可能的简单。所以不希望这个过程特别复杂,也不希望用到过多的人工先验的知识,这就是 DETR 和之前的方法的区别。
  • 第二个作者想讲的就是 Recurrent detector,就是之前有没有类似的工作用 encoder-decoder 的形式去做目标检测。也是有的不光是有做目标检测,而且要做实例分割的工作还是蛮多的。但是这些工作全都是15、16年的时候的工作,那个时候大家去做 recurrent detector 全都用的是 RNN,因为用了 RNN 所以说肯定是自回归的模型。因此这个时效性就会比较差,而且性能也会比较差。

DETR 我们可以看到,不光是利用了 Transformers Encoder 以后能得到更全局的信息,从而目标检测更容易做了。而且用了 Transformers不带掩码机制的 decoderDETR 最后能够一起把目标框全都输出来,从而达到 Parallel Decoding,所以实效性大大增强了。

但其实当我们看了相关工作之后,我们发现其实让 DETR 工作的最主要的原因还是因为使用了 Transformers 。因为之前大家也试过基于集合的这种目标函数,也利用匈牙利算法去做过这个二分图匹配,但是因为 backbone 出来的特征不够强,所以最后的性能不好。还得依赖一些先验知识或者人工的干预,从而达到更好的性能。那第二个方向也是一样,之前也有人已经用 RNN 去做过这种 encoder-decoder 方式,只不过因为没有用 Transformers,所以说结果不够好,比不过当时的别的基线模型。 所以说白了,DETR 的成功还是 Transformers 的成功。


3. DETR


4. 实验


5. 总结


6. DETR预训练demo

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>