Detr Family for End-to-End Detection

June 27, 2022

Detr(Detection Transformer)是 facebook 在 2020 年提出的第一个端到端的目标检测模型, 它改变了现有基于 Fast-RCNN 和 YOLO 的目标检测范式,后续有许多工作,基于 Detr 提出了各种个样的改进。

Timeline #

  1. Detr (ECCV 2020): End-to-End Object Detection with Transformers
  2. Deformable Detr (ICLR 2021): Deformable DETR: Deformable Transformers for End-to-End Object Detection
  3. Conditional Detr (ICCV 2021): Conditional DETR for Fast Training Convergence
  4. Anchor Detr (AAAI 2021): Anchor DETR: Query Design for Transformer-Based Object Detection
  5. DAB Detr (ICLR 2022): DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR
  6. DN Detr (CVPR 2022): DN-DETR: Accelerate DETR Training by Introducing Query DeNoising

1. Detr #

Detr ( Citation: , & al., , , , , & (). End-to-End Object Detection with Transformers. Retrieved from http://arxiv.org/abs/2005.12872 ) 是第一个端到端的目标检测模型,它直接定义了 N1 个目标框的 slot,这里 Detr 称其为 object query。

在优化的时候,这 N 个 slot 将会通过 transformer 进行 self attention ,以及和输入图像进行 cross attention。 通过这个方式,每个 slot 将会逐步进化成可以预测目标框及其类别的一个特征向量。最终通过两个FFN,即可回归出目标框的位置和类别。

Detr总体结构

Detr总体结构

Encoder #

Transformer 的 Encoder 如果去掉的话,会掉点:

overall AP drops by 3.9 points, with a more significant drop of 6.0 AP on large objects.

一个解释是,transformer 的 self attention 可以提取全局特征。

  • 从可视化的 attention map 来看,一个物体上的某个点的 attention map 都聚集在这个物体的其他部分。
  • 但这其实很 trivial,attention map 本身是两个 token 的相似度,同一个物体不同区域的相似度自然大,对于这个示意图更是,同一个物体,具有明显相似的颜色和纹理特征。
  • 所以,这个 attention map 能这么明显的区分物体,有没有可能只是因为颜色相近呢?如果有两只很像的牛,距离也比较近,那么此时的 attention map 会是什么样呢?

进一步的,既然 encoder 的特征就已经很有区分度了,同一个物体的特征比较像了,那么我们能不能通过聚类的方式,提取出每个物体的特征,然后通过两个 FFN 预测 bbox 和 class 呢?

Position Embedding #

  1. 不难想到,detr 使用 transformer,如果不加 positional encoding 的话,feature 是不带位置信息的,这样应该是很难预测 bbox 的位置的。 论文实验结果也体现了这一点,去掉 encoder 和 decoder 的 positional encoding 直接掉了 7 个点。

  2. 但是,即便如此,还是能取得 30 多的 AP, 这说明只用 object query 我们也能学到位置信息。我们可以想象 object query 学到了关注某些特定区域, 即某些坐标区域,然后通过 cross attention 来判断,这个 slot 里有没有物体。然而,encoder feature 并没有任何位置信息,cross attention 怎么知道,这个 slot 对应的 feature 在哪呢? 因此,我们有理由怀疑,这里可能有隐藏的位置信息泄漏,每个 slot 可能会关注固定位置的 encoder feature token。

Object Query #

理解 Object Query 是理解 Detr 设计的核心。Object query 其实就是预设的检测框的一系列 slot,对于某个 slot,transformer decode 的过程,其实就相当于,我们用这个 slot 去查询 encoder feature,然后把与这个 slot 相关的 slot 提取出来,存到 decoder embedding 里。

Detr 的做法和这个 idea 类似,但是它每一步在优化的其实是 transformer 的 query,每次的 output value 仍然是 encoder feature 的加权。所以,我们能不能直接优化 value,每次的 output value 相当于是 value 的一个 residual refinement 呢?

关于 Object query,论文还做了一些可视化的分析,

  1. 首先,每个 object query 都会倾向于关注这个 query 负责物体的边界区域。
  2. 其次,object query 对于物体类别并没有特别的倾向性。
  3. 最后,object query 似乎对于不同位置的物体具有一定倾向性,这也是后续很多文章改进的基石。

为了证明【2】这一点,作者做了一个实验,作者合成了一张有 24 个长颈鹿的图,在数据集里, 没有一张图是有超过 24 只长颈鹿的,如果 object query 对物体类别有倾向性的话,那么就分不出来 24 个长颈鹿,因为训练数据不足以训练出 24 个对长颈鹿有偏好的 query。

Object query 的 attention, 倾向于关注物体边界

Object query 的 attention, 倾向于关注物体边界

Out of distribution Results

Out of distribution Results

不同 object query 预测检测框的分布

不同 object query 预测检测框的分布

Panoptic Segmentation #

Detr 这个架构可以扩展到 Panoptic Segmentation,思路是

  1. detr 会输出每个检测物体的 embedding,每个 object query 有一个。
  2. 回忆,encoder 那一节我们也提到了,其实 encoder 的结果就已经有一个聚类的效果了。 因此,我们可以通过一个 attention,把每个检测物体的覆盖区域,通过 attention map 大概估计出来。
  3. 对于每个检测物体,都有一个 attention map,然后我们结合 Resnet 的特征,过一个 CNN,然后过一个二分类 FFN,得到每个检测物体细化的二分类 segmentation 结果。
  4. 最后,每个物体的二分类结果,会通过 argmax 概率得到最终的 panoptic segmentation 的结果。

PS:这么做的话,应该是只能应用到 Panoptic Segmentation,因为每个像素 segmentation 的结果必须属于检测那一步的某个类别才行。

Illustration of the panoptic head. A binary mask is generated in parallel for each detected object, then the masks are merged using pixel-wise argmax.

Illustration of the panoptic head. A binary mask is generated in parallel for each detected object, then the masks are merged using pixel-wise argmax.

一些细节 #

  1. Transformer Encoder 的 Q,K 是带 Pos 的,但是 V 不带。
  2. Transformer Decoder 里 V 还是不带 Pos 【1】,Q 和 V 分别带不同的 Pos。
  3. 待补充

【1】: 那FFN的时候,位置信息到底从哪来的 🤨?

2. Deformable Detr #

Deformable Detr ( Citation: , & al., , , , , & (). Deformable DETR: Deformable Transformers for End-to-End Object Detection. Retrieved from http://arxiv.org/abs/2010.04159 ) 主要是提出了 Deformable Attention Module 用于改进 Detr 的两个问题:

  1. 收敛慢:作者 claim 这个点是来自于 Detr 所用的 attention 是个全局 attention,一开始都是平均的权重,但最后一般会收敛到比较 sparse 的权重。 这个学习的过程会比较慢。
  2. 计算复杂度大:还是因为是全局 attention,时间复杂度随图像大小平方增长。

Deformable Attention #

Deformable Attention 解决上述两个问题的方式,就是通过 Deformable 得到一个局部的 token list,然后只在这个 token list 内做 attention。

下面是 Deformable Attention 的示意图,一些要点

  1. Deformable Attention 需要一个 reference point,然后局部 token list 是通过计算以 reference point 为中心的 offset 得到的。
  2. 对于 encoder 来说,Q,K,V 都是 2D 图片,所以 reference point 就是 Q 里每个 token 的自身坐标(归一化到 0~1)。
  3. 对于 decodedr 的 cross attention,Q 是 object query,没有坐标,这里的 reference point 是通过一个 learnable linear projection followed by a sigmoid function 得到的。
  4. 最后的 bbox prediction head 预测的是 reference point 的 offset 和 bbox 的长和宽。
Deformable Attention 示意图

Deformable Attention 示意图

Multi-scale #

作者实际在用的时候,是使用的 Multi-scale Deformable Attention 。

  1. 这个多层级的版本,主要区别就是 deformable 的局部 token list 扩展到多个层级的 feature map 上。
  2. 为了区分不同 scale 的 query,作者还加入了一个可学习的 scale embedding 到 query 里面。

Additional Improvement #

Iterative Bounding Box Refinement #

每一层 Decoder layer 预测的 output embedding 都过一个 detection head 得到一个 bbox 预测结果。

  1. 然后将这个预测结果的中心点,作为下一层的 decoder layer 的 reference point
  2. 下一层预测的 deformable offset 也用预测结果的 w,h 调制一下。

Two-Stage Deformable DETR #

用 Transformer Encoder 输出的 feature map,对每个像素的特征都过一个 prediction head 得到一个粗的 bbox,类别只有前景和背景。用这些 proposed region 的中心点,作为下一步 object query 的 reference point。

3. Conditional Detr #

官方知乎专栏解读

Conditional Detr ( Citation: , & al., , , , , , , & (). Conditional DETR for Fast Training Convergence. https://doi.org/10.48550/arXiv.2108.06152 ) 的核心思想真的非常简单,就是把原始 Detr 中 cross attention 的 Q 和 K 换了一下。

Seperate Embedding #

具体来说,Q 和 K 都是由一个 content embedding 和 position (作者这里称为spatial) embedding,通过 add 得到,Conditional Detr 就是把 add 变成了 concate。

背后的原理,作者是这样解释的,使用 add 的方式,算 attention weight 是这样的:

$$ \begin{aligned} &\left(\mathbf{c}_{q}+\mathbf{p}_{q}\right)^{\top}\left(\mathbf{c}_{k}+\mathbf{p}_{k}\right) \\ =& \mathbf{c}_{q}^{\top} \mathbf{c}_{k}+\mathbf{c}_{q}^{\top} \mathbf{p}_{k}+\mathbf{p}_{q}^{\top} \mathbf{c}_{k}+\mathbf{p}_{q}^{\top} \mathbf{p}_{k} \end{aligned} $$

可以看到 content embedding 不仅要和 content embedding 做相似度匹配,还要和 spatial embedding 做相似度匹配。 这意味着 content embedding 不仅要包含 content 的信息,还需要包含一定的 spatial 的信息。这会使得训练难度加大

如果改成 concate 形式,那么 attention weight 的计算就变成了:

$$ \mathbf{c}_{q}^{\top} \mathbf{c}_{k}+\mathbf{p}_{q}^{\top} \mathbf{p}_{k} $$

这时候 content embedding 只和 content embedding 做匹配,spatial embedding 只和 spatial embedding 做匹配。 这样就降低了训练难度

事实上,单纯改成 concate 并不能提点,作者在知乎专栏回复了,Detr 改成 concate 还掉点了。

Reference Point #

类似 Deformable Detr ( Citation: , & al., , , , , & (). Deformable DETR: Deformable Transformers for End-to-End Object Detection. Retrieved from http://arxiv.org/abs/2010.04159 ) ,作者提出让 decoder 预测一个 reference point 的 offset,以及 bbox 的宽高。

$$ \mathbf{b}=\operatorname{sigmoid}\left(\operatorname{FFN}(\mathbf{f})+\left[\mathbf{s}^{\top} 000\right]^{\top}\right) $$

作者尝试了两种不同的计算 reference point 的方法,ablation 如下。

Method AP
不用 reference point, s=(0,0) 36.8
将 s 作为网络参数,进行优化 40.7
根据对应的 object query 预测而来 40.9

Conditional Spatial Query #

作者提出用 Conditional Spatial Query 替代 object query 。

Intuition 主要是,encoder 的 feature 里面包含了我们要预测的 bbox 的位置和类别信息,我们只需要通过 cross attention 把它有效的提取出来。 这里的 cross attention 其实就是通过 decoder embedding 和 encoder embedding 以及对应的 spatial embedding 直接的相似度进行的。 这里的相似度,可以看作是 object query 这个 slot 和 encoder 的 feature 的相似度。

在多层的 decoder layer 里,decoder embedding 不断在向目标框的 embedding 对齐,这样 cross attention 就能得到更准的 encoder feature。

但是原始的 Detr 的 spatial embedding 是单纯的 object query,和 encoder 的 spatial embedding 可能不在一个 space,这样做相似度计算可能不准。 作者似乎没比用原始 Detr 的 object query 做spatial embedding的结果

作者提出使用 reference point 的 sin embedding 做 spatial embedding,

$$ \mathbf{p}_{s}=\operatorname{sinusoidal}(\operatorname{sigmoid}(\mathbf{s})) $$

然后计算一个 transformation,将其和 decoder embedding 联系起来,做一个 offset,

$$ \mathbf{p}_{q}=\mathbf{T} \mathbf{p}_{s}=\boldsymbol{\lambda}_{q} \odot \mathbf{p}_{s} $$

其中 $\mathbf{T}=\operatorname{FFN}(\mathbf{f})$, $\boldsymbol{\lambda}_{q}$ 是个对角阵。

实验结果

  1. CSQ-P: 直接用 sin 过后的 positional embedding $p_s$
  2. CSQ-T: 直接用 transformation $\boldsymbol{\lambda}_{q}$
  3. CSQ-C: 用 decoder content embedding $f$
  4. CSQ-I: 用 f 经过 self attention 之后的 $c_q$ 预测的 transformation 乘上 $p_s$ 的结果。
理论上 Concate 这种做法,对于原始 Detr 也是可以直接用的,reference point 从 object query 得到,但是 positional embedding 直接就用 object query。 这样做效果如何?而且,既然 reference point 是从 object query 得到的,那么 object query 实际上就包含了 reference point 的信息。

4. Anchor Detr #

Anchor Detr ( Citation: , & al., , , & (). Anchor DETR: Query Design for Transformer-Based Object Detection. Retrieved from http://arxiv.org/abs/2109.07107 ) 和 Conditional Detr ( Citation: , & al., , , , , , , & (). Conditional DETR for Fast Training Convergence. https://doi.org/10.48550/arXiv.2108.06152 ) 是同期工作,后者稍微早一点。

Anchor as Object Query #

其实和 Conditional Detr 很像,都是 reference point 做 anchor 和 object query,然后 decoder 预测 offset。

Row-Column Decoupled Attention #

不太重要,暂时没写。

对比 #

对比 Deformable Detr ( Citation: , & al., , , , , & (). Deformable DETR: Deformable Transformers for End-to-End Object Detection. Retrieved from http://arxiv.org/abs/2010.04159 )

对比 Conditional Detr ( Citation: , & al., , , , , , , & (). Conditional DETR for Fast Training Convergence. https://doi.org/10.48550/arXiv.2108.06152 )

  1. 都用 reference point 转 embedding 作为 object query。
    1. Conditional Detr 的 reference point 是由 object query 通过 FFN 得到的。
    2. Anchor Detr 的 reference point 是可学习的参数(其实是 Conditional Detr 的另一种方案,他们的实验结果是这种为低 0.2)
  2. Anchor 通过 Pattern embedding 可以一个 anchor point 预测多个物体。
  3. 转 Position embedding 的方式不一样:conditional detr 用的是 sin,anchor detr 额外加了一个 FFN。

5. DAB Detr #

DAB Detr ( Citation: , & al., , , , , , , & (). DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR. Retrieved from http://arxiv.org/abs/2201.12329 ) , 前面的工作都是用 anchor point 做 object query,DAB Detr 也 follow 这个做法,然后通过一个 modulated attention 引入了 Width 和 Height。最后 output embedding 预测的不止是 x,y 的 offset 还有 h,w 的 offset。

6. DN Detr #

Denoising Detr ( Citation: , & al., , , , , & (). DN-DETR: Accelerate DETR Training by Introducing Query DeNoising. 11. )

引入一个额外的 Denoising task 作为辅助任务,具体的,将 GT object 的 noisy bbox 作为 DAB 的 object query 输入,然后目标是去噪回来。

参考文献 #

Wang, Zhang, Yang & Sun (2022)
, , & (). Anchor DETR: Query Design for Transformer-Based Object Detection. Retrieved from http://arxiv.org/abs/2109.07107
Meng, Chen, Fan, Zeng, Li, Yuan, Sun & Wang (2021)
, , , , , , & (). Conditional DETR for Fast Training Convergence. https://doi.org/10.48550/arXiv.2108.06152
Liu, Li, Zhang, Yang, Qi, Su, Zhu & Zhang (2022)
, , , , , , & (). DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR. Retrieved from http://arxiv.org/abs/2201.12329
Zhu, Su, Lu, Li, Wang & Dai (2021)
, , , , & (). Deformable DETR: Deformable Transformers for End-to-End Object Detection. Retrieved from http://arxiv.org/abs/2010.04159
Carion, Massa, Synnaeve, Usunier, Kirillov & Zagoruyko (2020)
, , , , & (). End-to-End Object Detection with Transformers. Retrieved from http://arxiv.org/abs/2005.12872
Li, Zhang, Liu, Guo, Ni & Zhang (2022)
, , , , & (). DN-DETR: Accelerate DETR Training by Introducing Query DeNoising. 11.

  1. 略大于一张图里最多能检测到的物体数 ↩︎