科研视野

分享IDEA研究院的科研趋势观察与工作随笔

本文来分享一下我们 ICLR 2022 的文章 DAB-DETR,我们将在这里介绍文章的主要内容,以及对目标检测问题的思考。

1 前言

文章链接:

这篇文章在知乎上已有不少很棒的解读,非常详细和有启发性,大家也可以一同食用:

非常感谢上面两位知乎作者的详细解读。

我们的代码已经开源:

原始 repo:
https://github.com/IDEA-Research/DAB-DETR

另外我们提供了官方的基于 Transformer 检测工具包 detrex,这一工具包包含了 DETR,DeformableDETR,ConditionalDETR,DAB-DETR,DN-DETR,以及在 COCO 获得了 63.3AP 的 DINO,并将进一步支持更多的 DETR 类模型:
https://github.com/IDEA-research/detrex

2 TL;DR

DAB-DETR 提出了一种新的建模 DETR 中 query 的方式,使用 4 维的 anchor box,这一建模方式不仅使得 DETR query 有了可解释性,同时作为位置先验可以加速模型收敛,以及利用 box 的尺度信息调制注意力图。

这一建模方式也将 DETR 类模型和传统的 two-stage 模型如 Faster RCNN 联系了起来。decoder 中 cross-attention 的作用类似于 ROI pooling 或者 ROI align,我们称之为 soft-ROI pooling。

模型性能

我们的 formulation 可以使用在原始 DETR 或者 Deformable DETR 上,都能相比于原始模型带来很大的增益。另外,基于我们新的算法库 detrex 的模型带来了更好的结果。

3 文章内容简述

3.1 动机和分析
DETR 作为首个使用 Transformer 做目标检测的模型,非常具有创新性。他将目标检测建模成集合预测的任务,即输入一组(如 100 个)learnable 的 query,然后输入对应数量(如 100 个)的物体预测结果。在训练过程中,使用二分图匹配预测和标签进行训练,而测试时不需要后处理(如 nms)即可产生所有结果。

尽管很简单、优雅,但是 DETR 存在两个问题,一是 query 含义并不清楚,不可解释,二是模型收敛慢。本来这应该是两个独立问题,不过后来我们发现,DETR 收敛慢很大程度上来自于 query 含义的不明。

DETR 中的 query

在原始的 DETR 文章中的 object query 画的比较简单,可能会让人觉得 query 就是一组向量:

原始 DETR 中的框图
然而实际上 object query 应该有两部分组成,我们称之为 content query 和 positional query (这里感谢 conditional detr,这两个名字由他们提出。)我们这里画出来了 encoder 和 decoder 中的 attention 的组成部分。
encoder 和 decoder 的 attention 部分

可以看到,encoder 和 decoder 里 attention 和 query 和 key 都是由两部分组成的,比如 encoder 里的 query 分别来自于图像特征(包含语义信息)和位置编码(包含位置信息),因此这两部分分别称为 content query(对应图像特征)和 positional query(对应位置编码)。key 和 query 完全相同。value 只有图像特征这一语义部分。

再看 decoder,decoder 的 key 和 value 与 encoder 的组成完全相同,但是 query 则不同。query 的语义部分来自于 decoder embeddings,对应上层的输入,是由图像特征组合来的。而位置部分则来自于 learnable queries,这是与我们看 DETR 的框架图后的第一反应不同的。因此 decoder 的 learnable query 实际指代的是位置信息。

3.2 Cross-attention 的作用与 soft-ROI pooling

接下来我们想来说明一下 cross-attention 在做什么,以及与传统的 Faster RCNN 之间的关系。

attention & soft ROI pooling

我们看到,在 attention 模块中,query 和 key 计算相似度,同时考虑了 content 信息和 positional 信息,计算出一个注意力图,然后使用这个注意力图从原始图片特征中提取特征。

这个步骤非常类似于传统两阶段检测器中的 ROI pooling(或者 ROI align)。但是由于注意力图是由 query 和 key 共同决定的,并不局限于物体框内信息,我们称之为 Soft ROI pooling

3.3 将 query 建模成 anchor box

learnable query 不够好

既然了解了 attention 及 decoder 的作用,下面我们看原始的 detr 中 query 问题在哪。

我们发现,原始的 learnable query 学习到的特征并不够好,即不能提供 soft roi pooling 中所需的 roi 信息。

训练前后的位置注意力图

如图,训练前后的 learnable query 产生的位置注意力图仍然存在多模式、退化解等现象,并不能为 soft roi pooling 提供 roi 的信息。

那么很自然的,我们意识到,要为 cross attention 提供更好的位置先验,提供更好的 roi region。很自然的,传统两阶段检测器中的 anchor box 可以引入到模型中作为位置先验。

引入 anchor box 作为 query 提供位置先验

从 DETR 到 DAB-DETR

将 anchor box 引入之后的好处有:

anchor box 直接提供了 roi 区域用来做 soft roi pooling,因而这一描述也更加的自然。

模型改进简述

我们将我们的模型和 DETR & Conditional DETR 的对比列了出来。

我们的核心改进有:

3.4 DAB-Deformable-DETR

我们的建模方式也是通用的,我们将 anchor box 的建模方式用到 deformble DETR 里,依然能带来性能的提升。

3.5 DETR 类模型对比

我们在文章里做了很多对比,包括将 DAB-DETR 和之前的 DETR 系列做对比:

DETR 类模型的对比

4 DAB-DETR & Faster RCNN

这里其实更想和大家分享关于 DETR 和传统检测器进行对比。从我们的讨论中我们看到,DETR 中的 encoder 起到了特征增强的作用,类似于一个 non-local 的模块。

而更令人着迷的 decoder 则起到了类似于 two-stage 模型中 ROI head 的作用,通过 Soft ROI pooling 的方式不断从特征图中采集特征,进行 box 的回归。而多个 decoder layer 又起到了类似于 cascade RCNN,类似于级联的 ROI head 的效果。

那么现在来看除了结构上( Transformer 和卷积)以外,DAB-DETR 和 Faster RCNN 还有哪些区别:

一:是 box 产生的方式

Faster RCNN 来自于 RPN,而 DAB-DETR 来自于 learnable 的 anchor box(从这个意义上 DAB-DETR 更像是 Sparse RCNN)。那如果我们也将 DAB-DETR 的 anchor box 来自一个 RPN 或者 encoder 输出(Deformble DETR 已经做了),我们也可以构造一个 two stage 的 DAB-DETR,也会有更好的性能。

二:是标签分配的方式

DETR 类模型的匹配是匈牙利匹配,one-to-one,同时考虑 content 和 position,在 layer 之后;而 Faster RCNN 是 one-to-many (一个 gt 可能对应多个 anchor),只考虑 position,在 layer 之前。那么最理想的匹配方式是什么? 有没有更好的匹配方案? 也是一个值得研究的问题。这里推荐另一篇文章:《What Makes for End-to-End Obiect Detection》,也很有启发意义。

综上,DETR 结构也可以看做是一种 two stage 模型,只是用了不同的模型结构(Transformer)和标签分配方式(匈牙利匹配)。

那么从研究的角度出发,之前在 two stage models 领域的很多研究,或许都可以搬到 DETR/DAB-DETR 这么一个框架下来,欢迎大家能和我们一起探索这一领域。

5 写到最后

我们后续又提出了 DN-DETR,DINO 等工作,如有兴趣可通过以下链接查看:

也欢迎大家试用我们的 detrex 工具包:https://github.com/IDEA-Research/detrex

我们充分相信 Transformer-based / DETR 类模型将会为目标检测带来更广泛的影响,希望更多人来一同推动这一领域的发展。

DAB-DETR:将Anchor box重新引入DETR,提供query可解释性并加速收敛!

作者:刘世隆 日期:2022-12-20
  • 分享:
DETR的query含义终于搞清楚了!

本文来分享一下我们 ICLR 2022 的文章 DAB-DETR,我们将在这里介绍文章的主要内容,以及对目标检测问题的思考。

1 前言

文章链接:

  • https://arxiv.org/abs/2201.12329
  • https://readpaper.com/paper/4588454363555438593

这篇文章在知乎上已有不少很棒的解读,非常详细和有启发性,大家也可以一同食用:

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

非常感谢上面两位知乎作者的详细解读。

我们的代码已经开源:

原始 repo:
https://github.com/IDEA-Research/DAB-DETR

另外我们提供了官方的基于 Transformer 检测工具包 detrex,这一工具包包含了 DETR,DeformableDETR,ConditionalDETR,DAB-DETR,DN-DETR,以及在 COCO 获得了 63.3AP 的 DINO,并将进一步支持更多的 DETR 类模型:
https://github.com/IDEA-research/detrex

2 TL;DR

DAB-DETR 提出了一种新的建模 DETR 中 query 的方式,使用 4 维的 anchor box,这一建模方式不仅使得 DETR query 有了可解释性,同时作为位置先验可以加速模型收敛,以及利用 box 的尺度信息调制注意力图。

这一建模方式也将 DETR 类模型和传统的 two-stage 模型如 Faster RCNN 联系了起来。decoder 中 cross-attention 的作用类似于 ROI pooling 或者 ROI align,我们称之为 soft-ROI pooling。

模型性能

我们的 formulation 可以使用在原始 DETR 或者 Deformable DETR 上,都能相比于原始模型带来很大的增益。另外,基于我们新的算法库 detrex 的模型带来了更好的结果。

3 文章内容简述

3.1 动机和分析
DETR 作为首个使用 Transformer 做目标检测的模型,非常具有创新性。他将目标检测建模成集合预测的任务,即输入一组(如 100 个)learnable 的 query,然后输入对应数量(如 100 个)的物体预测结果。在训练过程中,使用二分图匹配预测和标签进行训练,而测试时不需要后处理(如 nms)即可产生所有结果。

尽管很简单、优雅,但是 DETR 存在两个问题,一是 query 含义并不清楚,不可解释,二是模型收敛慢。本来这应该是两个独立问题,不过后来我们发现,DETR 收敛慢很大程度上来自于 query 含义的不明。

DETR 中的 query

在原始的 DETR 文章中的 object query 画的比较简单,可能会让人觉得 query 就是一组向量:

原始 DETR 中的框图
然而实际上 object query 应该有两部分组成,我们称之为 content query 和 positional query (这里感谢 conditional detr,这两个名字由他们提出。)我们这里画出来了 encoder 和 decoder 中的 attention 的组成部分。
encoder 和 decoder 的 attention 部分

可以看到,encoder 和 decoder 里 attention 和 query 和 key 都是由两部分组成的,比如 encoder 里的 query 分别来自于图像特征(包含语义信息)和位置编码(包含位置信息),因此这两部分分别称为 content query(对应图像特征)和 positional query(对应位置编码)。key 和 query 完全相同。value 只有图像特征这一语义部分。

再看 decoder,decoder 的 key 和 value 与 encoder 的组成完全相同,但是 query 则不同。query 的语义部分来自于 decoder embeddings,对应上层的输入,是由图像特征组合来的。而位置部分则来自于 learnable queries,这是与我们看 DETR 的框架图后的第一反应不同的。因此 decoder 的 learnable query 实际指代的是位置信息。

3.2 Cross-attention 的作用与 soft-ROI pooling

接下来我们想来说明一下 cross-attention 在做什么,以及与传统的 Faster RCNN 之间的关系。

attention & soft ROI pooling

我们看到,在 attention 模块中,query 和 key 计算相似度,同时考虑了 content 信息和 positional 信息,计算出一个注意力图,然后使用这个注意力图从原始图片特征中提取特征。

这个步骤非常类似于传统两阶段检测器中的 ROI pooling(或者 ROI align)。但是由于注意力图是由 query 和 key 共同决定的,并不局限于物体框内信息,我们称之为 Soft ROI pooling

3.3 将 query 建模成 anchor box

learnable query 不够好

既然了解了 attention 及 decoder 的作用,下面我们看原始的 detr 中 query 问题在哪。

我们发现,原始的 learnable query 学习到的特征并不够好,即不能提供 soft roi pooling 中所需的 roi 信息。

训练前后的位置注意力图

如图,训练前后的 learnable query 产生的位置注意力图仍然存在多模式、退化解等现象,并不能为 soft roi pooling 提供 roi 的信息。

那么很自然的,我们意识到,要为 cross attention 提供更好的位置先验,提供更好的 roi region。很自然的,传统两阶段检测器中的 anchor box 可以引入到模型中作为位置先验。

引入 anchor box 作为 query 提供位置先验

从 DETR 到 DAB-DETR

将 anchor box 引入之后的好处有:

  • query 有了可解释性。
  • 为模型提供了位置先验,加速收敛。
  • anchor box 中的位置信息可以用来调制注意力图。
  • anchor box 可以层与层进行更新。

anchor box 直接提供了 roi 区域用来做 soft roi pooling,因而这一描述也更加的自然。

模型改进简述

我们将我们的模型和 DETR & Conditional DETR 的对比列了出来。

我们的核心改进有:

  • 直接学习 anchor box 作为 query
  • 使用正余弦编码后的 x,y 作为 positional query
  • 使用 w,h 调制注意力图
  • 层与层更新 anchor box

3.4 DAB-Deformable-DETR

我们的建模方式也是通用的,我们将 anchor box 的建模方式用到 deformble DETR 里,依然能带来性能的提升。

3.5 DETR 类模型对比

我们在文章里做了很多对比,包括将 DAB-DETR 和之前的 DETR 系列做对比:

DETR 类模型的对比

4 DAB-DETR & Faster RCNN

这里其实更想和大家分享关于 DETR 和传统检测器进行对比。从我们的讨论中我们看到,DETR 中的 encoder 起到了特征增强的作用,类似于一个 non-local 的模块。

而更令人着迷的 decoder 则起到了类似于 two-stage 模型中 ROI head 的作用,通过 Soft ROI pooling 的方式不断从特征图中采集特征,进行 box 的回归。而多个 decoder layer 又起到了类似于 cascade RCNN,类似于级联的 ROI head 的效果。

那么现在来看除了结构上( Transformer 和卷积)以外,DAB-DETR 和 Faster RCNN 还有哪些区别:

一:是 box 产生的方式

Faster RCNN 来自于 RPN,而 DAB-DETR 来自于 learnable 的 anchor box(从这个意义上 DAB-DETR 更像是 Sparse RCNN)。那如果我们也将 DAB-DETR 的 anchor box 来自一个 RPN 或者 encoder 输出(Deformble DETR 已经做了),我们也可以构造一个 two stage 的 DAB-DETR,也会有更好的性能。

二:是标签分配的方式

DETR 类模型的匹配是匈牙利匹配,one-to-one,同时考虑 content 和 position,在 layer 之后;而 Faster RCNN 是 one-to-many (一个 gt 可能对应多个 anchor),只考虑 position,在 layer 之前。那么最理想的匹配方式是什么? 有没有更好的匹配方案? 也是一个值得研究的问题。这里推荐另一篇文章:《What Makes for End-to-End Obiect Detection》,也很有启发意义。

综上,DETR 结构也可以看做是一种 two stage 模型,只是用了不同的模型结构(Transformer)和标签分配方式(匈牙利匹配)。

那么从研究的角度出发,之前在 two stage models 领域的很多研究,或许都可以搬到 DETR/DAB-DETR 这么一个框架下来,欢迎大家能和我们一起探索这一领域。

5 写到最后

我们后续又提出了 DN-DETR,DINO 等工作,如有兴趣可通过以下链接查看:

  • https://zhuanlan.zhihu.com/p/478079763
  • https://zhuanlan.zhihu.com/p/540786844

也欢迎大家试用我们的 detrex 工具包:https://github.com/IDEA-Research/detrex

我们充分相信 Transformer-based / DETR 类模型将会为目标检测带来更广泛的影响,希望更多人来一同推动这一领域的发展。