论文链接:Deformable DETR: Deformable Transformers for End-to-End Object Detection
代码链接:https://github.com/fundamentalvision/Deformable-DETR
出处:ICLR2021 Oral
一、背景和动机
DETR 的提出,改善了之前的方法需要大量手工设计操作的局面(如 anchor 和 NMS),并且首次建立了一个完整的端到端的检测器。
但 DETR 有两个明显的问题:收敛慢、对小目标效果不好
- 相比之前的方法,DETR 收敛的很慢,DETR 在 coco 数据集上需要约 500 个epoch 才能收敛,比 Faster RCNN 慢了 10 到 20 倍,作者认为主要有两个原因:
- 在初始化 object queries 的时候,被初始化成相同的值(DETR 中全部初始化为 0),也就意味着这些 object queries 对特征图中的所有像素的注意力权重是相同的,所以需要大的 epoch 训练来找到需要关注的那几个稀疏的位置,
- 此外,注意力的计算复杂度是随着特征图大小而平方增大的,计算复杂度也很高,计算所需的时间会较长
- DETR 在小目标上表现不好,现有的方法大多使用多尺度特征中的大分辨率特征来解决小目标问题,但如果使用大分辨率特征的话,DETR 的复杂度会很高。但这种缺点也是源于 Transformer 这种结构(当时还没有像 Swin 这种多尺度提取特征的 Transformer 网络)。
Deformable DETR 的出发点:
- 卷积神经网络中有一种卷积叫 “可变形卷积”,可以高效的抽取稀疏空间位置的信息,作者受此启发建立了 deformable DETR。
Deformable DETR 的贡献:
- 对收敛慢的问题:
- 提出了 deformable attention module 来代替 Transformer attention module 来处理 feature map,只选择 query 附近的几个点来参与计算,能降低复杂度
- deformable attention module 是会从 feature map 中选择一小部分特征点来进行特征的提取
- 对小目标问题:
- 引入了多尺度 deformable attention module
Deformable DETR 的优势:
- 缓解 DETR 收敛慢和计算复杂度高的问题
二、方法
在这里我们先看一看可变形卷积:
就是在基础卷积的基础上,给每个位置学习一个偏差,也就是每个位置都增加了一个偏移量,能够让网络聚焦于感兴趣的位置
可变形卷积这种形变不是发生在卷积核,而是发生在原图产生了 offset 偏移,在经过正常卷积就达到可变卷积的效果,也就是特征偏移+正常卷积。
1、Deformable Attention Module
一般来说,使用 Transformer attention 能够看到整个特征图中的所有特征(因为每个位置都会和其他所有位置求取注意力特征),这样计算量自然就会很大。
受启发与可变形卷积,deformable attention module 如图 2 所示,无论原始的特征图多大,deformable attention module 都只会关注 reference point (橘色小框)附近的少数位置。
所以对于每个 query,只会分配少数的 key,那么下面这两个问题就可以解决:
- 问题1)由于分辨率导致的计算量增大
- 问题 2)收敛慢
Deformable Attention Feature 如下:
- 输入特征图 x ∈ R C × H × W x \in R^{C\times H \times W} x∈RC×H×W
- q q q 为 query ,其元素包括为常数 z q z_q zq 和 2 维位置信息 p q p_q pq
- m m m 是 attention head 的索引, k k k 是 sampled keys 的索引, K K K 是 sample keys 的总数( K < < H W K<<HW K<<HW)
- Δ p m q k \Delta p_{mqk} Δpmqk 和 A m q k A _{mqk} Amqk 是第 m 个 attention head 的第 k 个 sampling point 的 sampling offset 和 attention weight
2、Multi-scale Deformable Attention Module:
- l l l 表示输入特征的 level 索引
- Δ p m l q k \Delta p_{mlqk} Δpmlqk 和 A m l q k A _{mlqk} Amlqk 是第 l l l 个level 的特征图的 m 个 attention head 的第 k 个 sampling point 的 sampling offset 和 attention weight
3、Deformable Transformer Encoder:
作者使用上面提出的多尺度 attention 模块代替了 DETR 中的 attention 模块,encoder 的输入和输出是具有相同分辨率的多尺度特征图 { x l } l = 1 L − 1 ( L = 4 ) \{x^l\}_{l=1}^{L-1}(L=4) {xl}l=1L−1(L=4)。encoder 中,作者从抽取了 Resnet 中从 C 3 C_3 C3到 C 5 C_5 C5 stage 的输出特征图,其中 C l C_l Cl 的分辨率比输入特征低 2 l 2^l 2l。
encoder 的输出是和输入分辨率相同的特征,query 和 key 都是从这些多尺度特征图中抽取的,并且作者增加了一个 scale-level embedding e l e_l el 来区分 query pixel 所来自的尺度,且该 scale-level embedding { e l } l = 1 L \{e_l\}_{l=1}^{L} {el}l=1L 是随机初始化并且参与训练的。
4、Deformable Transformer Decoder:
在 decoder 中,同时存在 cross-attention 和 self-attention。
- cross-attention:key 是 encoder 的输出,query 是 object queries
- self-attention:key 和 query 都是 object queries, object queries 中的元素各自进行 attention
因为 deformable attention 模块是为了将卷积特征图看做 key elements 一样处理,所以作者只替换了 cross-attention 模块为 deformable attention,
三、效果
四、可视化
为了了解 deformable detr 是通过关注哪里而得到的检测结果,作者绘制了最后一层预测结果中的每个元素的梯度绝对值(包括中心点,宽高,类别)如图5。
根据 Taylor 理论,梯度绝对值可以反应输出会有多大改变,即可以说明模型主要依赖哪些像素来预测每个项目。
从可视化可以看出,deformable detr 会关注在目标的末端区域,类似于 detr。
此外,deformable detr 在 x 轴方向和 w 上关注左右两边的边界,在 y 轴方向和 h 上关注上下的边界,且 deformable detr 同时会关注目标的内部来预测其类别。
2、多尺度 deformable attention 可视化
为了更好的理解多尺度形变 attention 学习到了什么,作者可视化了encoder 和 decoder 最后一层的采样点和 attention 权重,如图 6 所示。
类似于 detr 中的观点,在 encoder 中已经能够区分每个实例了。但在 decoder 中,本文的模型更关注于全部的前景目标,而非 detr 中的末端区域。
结合图5,作者猜测原因在于 deformable detr 需要末端点和内部点来确定目标的类别,同时说明 deformable detr attention 模块能够根据不同 scale 和前景的shape来调整 sampling points 和 attention weights。
从蓝色到红色,表示 attention weight 从小到大