论文笔记-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. 依据匈牙利算法先找到最优的匹配
    1. 根据找到的匹配,计算最终的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编码是可训练的。

作者

Xie Pan

发布于

2021-04-12

更新于

2021-07-11

许可协议

评论