论文笔记-DETR and Deformable DETR

  • DETR: End-to-End Object Detection with Transformers
  • Deformable DETR: Deformable Transformer for End-to-End Object Detection

DETR: End-to-End Object Detection with Transformers

paper link: https://arxiv.org/abs/2005.12872 ### Motivation

传统的目标检测范式: - 使用CNN Backbone提取feature map;
- 使用 Region Proposal Network (RPN) 在feature map上枚举所有的windows,输出N个候选boxes
- 使用分类器对每个box进行分类

这样存在很多问题:

问题1:Enumerate candidate boxes in RPN - 枚举所有的pixel
- 对每个pixel,枚举出所有预定义大小的boxes
- 大部分的候选框都是无效的,因此 Inefficient, slow

问题2:Redundant boxes and NMS - RPN 输出大量的boxes
- Non-maximum suppression (NMS) merges/removes redundant boxes
- These hand-designed components have a few hyperparameters
- Model tuning is complex

Architecture of DETR

因此,作者提出了更为简单的end-to-end的目标检测模型:

Self-attention vs. Convolution in Vision

Transformer 已经非常熟悉了,就不详细介绍了。这里对比下 self-attention 和 CNN 在视觉领域的应用

  • 每个pixel可以看作是自然语言中的 token
  • convolution is used to integrate pixels
  • Recognize patterns within a small window of pixels
  • Difficult to integrate non-local pixels
  • Have to make network very deep to “see the big picture”
  • Self-attention (transformer) also integrates multiple pixels
  • Works when the correlated pixels are non-local
  • Trunk, tail, legs of an elephant to a whole elephant

Architecture

整个结构可以看作四部分: - CNN backbone
- Transformer Encoder
- Transformer Decoder
- bipartite matching loss

CNN backbone + Transformer Encoder

前两个好理解,需要注意的是 position encoding 与NLP中不同。考虑到输入是二维图像,对应的位置 (x,y) 也是二维的。

总结下和原始transformer编码器不同的地方:
- 输入编码器的位置编码需要考虑2-D空间位置。
- 位置编码向量需要加入到每个Encoder Layer中。
- 在编码器内部位置编码Positional Encoding仅仅作用于Query和Key,即只与Query和Key相加,Value不做任何处理。

Transformer Decoder

decoder与原始的transformer decoder的区别在于两点:
- 其输入是 Object queries. 是可学习的 nn.Embedding, 维度为 [100, bsz, 256]. 其实可以理解成可学习的位置编码。
- 非自回归的可并行解码。

bipartite matching loss

decoder 的输出张量的维度是 分类分支:[bsz, 100, class + 1] 和回归分支:[bsz, 100, 4]. 其中 class + 1 表示类别总数+背景。有物体的boxes计算回归任务;没有物体的背景框,则不用回归。

问题来了: 这100个候选框如何去与 不确定数量的 targets 进行匹配呢,预测框和真值是怎么一一对应的?换句话说:你怎么知道第47个预测框对应图片里的狗,第88个预测框对应图片里的车?等等。

相比Faster R-CNN等做法,DETR最大特点是将目标检测问题转化为无序集合预测问题(set prediction)。论文中特意指出Faster R-CNN这种设置一大堆anchor,然后基于anchor进行分类和回归其实属于代理做法即不是最直接做法,目标检测任务就是输出无序集合,而Faster R-CNN等算法通过各种操作,并结合复杂后处理最终才得到无序集合属于绕路了,而DETR就比较纯粹了。现在核心问题来了:输出的 [bsz, 100] 个检测结果是无序的,如何和 ground-truth bounding box 计算loss?这就需要用到经典的双边匹配算法了,也就是常说的 匈牙利算法,该算法广泛应用于最优分配问题。

整个loss function的计算分为两个步骤:
- 1. 依据匈牙利算法先找到最优的匹配
- 2. 根据找到的匹配,计算最终的loss

如何找到最优的匹配呢? 假设一张图片有3个目标:dog, cat, car. 那么我们可以得到一个 [100, 3] 的矩阵, 矩阵的值分别表示这100个候选token为其中某一目标的“损失”. 让这个损失最小的匹配就是我们要找的最优匹配。这个过程就是匈牙利算法。

再介绍匈牙利算法之前,我们要知道这个矩阵对应的损失值是啥呢?也就是怎么衡量这个候选token是某个目标的损失值?

假设 \(y_i\) 对应的预测是 \(\hat y_{\sigma_i}\),那么这个构成这个搭配的损失就是 \(\hat y_{\sigma_i}\) 对应的类别为 \(c_i\) 以及 box 的 mse 值。

\[L_{match}(y_i, \hat y_{\sigma(i)})=-\mathbb{1}_{c_i\ne \varnothing}\hat p_{\sigma(i)}(c_i) + 1_{c_i\ne \varnothing}L_{box}(b_i, \hat b_{\sigma_i})\]

\(L_{match}\) 就是矩阵中的元素。然后通过匈牙利算法找到对应的匹配。

找到匹配之后计算最终的loss

Deformable DETR

DETR 的优缺点: - 优点 1. 纯端到端,不需要手工设计的NMS之类 - DETR 缺点: 1. 小目标检测的低精度,高精度的feature map的复杂度是DETR所不能忍受的。 1. 这是因为 attention 机制的原因,复杂度是 O(L^2) 2. 收敛速度慢,slow convergence。原因是 pattern 是稀疏的,很难快速学到吧 1. when \(N_k\) is large, it will lead \(N_k\) to ambiguous gradients for input features. Thus, long training schedules are required so that the attention weights can focus on specific keys.

Deformable DETR 的设计初衷: 1. motivation: mitigates the slow convergence and high complexity issues of DETR - 具体设计方法 1. 融合Deformable conv的空间稀疏采样和transformer的关系建模的优势 combines the best of the sparse spatial sampling of deformable convo- lution, and the relation modeling capability of Transformers - deformable attention modules: 代替Transformer attention module

Multi-Head Attention in Transformers

常规的 attention:

  • \(A_{mqk}\) 是attention matrix.
  • \(z_q\in R^C\) 是query feature.
  • \(x_k\in R^C\) 是key/value feature. \(\Omega_k\) 是key index的集合.
  • \(m\) 是attention head index.

总的计算量是: \(O(N_qC^2) + 2O(N_kC^2) + 2O(N_qN_kC^2)\)

复杂度:\(O(N_qC^2 + N_kC^2 + N_qN_kC)\)

在长文本,或者image patched之后,\(N_q=N_k >> C\). 所以复杂度取决于 \(O(N_qN_kC)\)

Deformable attention module

相比常规的attention, 需要考虑所有的key features,也就是 HW 个。 deformable attention只考虑K个keys. 如下面两个公式所示 \(\sum_{k\in \Omega_k} \rightarrow \sum_{k=1}^K\). 因此复杂度会大大降低,收敛速度也会加快。

其中:
- m 表示attention head index
- \(z_q\) 表示query feature
- \(K << HW\) 表示sampling number
- \(p_q\) 表示 \(z_q\) 对应的参考2D点
- \(\Delta p_{mqk}\) 表示相对参考点的sampling offset
- \(A_{mqk}\) 则是对应采样点的weights, \(\sum_{k=1}^{K}A_{mqk}=1\)

现在的问题在于,这K个keys是怎么选择的呢?也就是 offset \(\Delta p_{mqk}\) 是怎么来的?文中是这么解释的:

这个过程如图2所示:
- 通过 linear projection 得到 2D 实数值 \(\Delta p_{mqk}\), 然后通过线性插值得到 \(p_q + \Delta p_{mqk}\).
- 对应的权重 \(A_{mqk}\) 也是通过linear projection得到的。

这样 deformable attention 的复杂度:\(N_qC^2 + O(N_qKC)\).

Multi-scale Deformable Attention Module

Deformable attention 可以很自然的拓展到multi-scale情况下。

  • m 表示 attention head index
  • l 表示 input feature level
  • k 表示 sampling index
  • \(A_{mlqk}\) 表示 \(k^{th}\) sampling point在 \(m^{th}\) head和 \(l^{th}\) level的权重, \(\sum_{l=1}^{L}\sum_{k=1}^{K}A_{mlqk}=1\).
  • \(\Delta p_{mlqk}\) 表示sampling offset

为了确保multi-scale中 point的对应关系,作者用 normalized coordinates \(\hat p_q\in [0,1]^2\) 来表示参考点。 \((0,0), (1,1)\) 表示top-left和bottom-right. \(\phi_l(\hat p_q)\) 表示将归一化之后的 \(\hat p_q\) rescale 到 \(l^{th}\) level feature中。

Deformable Transformer Encoder

从 resnet \(C_3\)\(C_5\) 抽取multi-scale特征图. 其中 \(C_l\) 表示分辨率是输入图像的 \(\dfrac{1}{2^l}\). 这样就有3层feature map了,然后最后一层feature map是通过 kernel=\(3\times 3\), stride=\(3\) 的卷积在 \(C_5\) 上得到的。 总共4 levels feature map.

key和query来自feature map中的pixels. 对于每一个query pixel, 其reference point是其本身。除了位置编码之外,作者还加入了level编码 \(e_l\),用来表示在哪一层level. 位置编码是固定的,level编码是可训练的。