Deformable DETR
Deformable DETR: Deformable Transformers for end-to-end object detection
DETR消除了目标检测中许多手工设计的组件,同时又有良好的性能
但由于Transformer Attention模块在处理图像特征图时的限制,具有收敛速度慢,特征空间分辨率有限的问题
为了缓解这些问题,提出了Deformable DETR,它的注意力模块只关注一个目标周围的一小部分关键采样点
Deformable DETR可以获得比DETR(特别是在小物体上)更好的性能,仅使用十分之一的epochs
因此训练速度有了十倍的速度提升
现代的目标检测器使用了许多手工制作的组件,例如,anchor生成、基于特定规则的GT目标分配、非最大抑制(NMS)的后处理
最近提出的DETR,消除了此类手工制作组件的需要,并建立了第一个完全端到端对象检测器,实现了非常具竞争力的性能
DETR利用了一个简单的结构,结合了卷积神经网络(CNNs)和Transformer的编码器-解码器
他们利用Transformer在适当设计的训练信号下的通用和强大的关系建模能力来取代手工制作的规则
尽管DETR有趣的设计和良好的性能,但它也有自己的问题:
- 它需要比现有的目标探测器更长的训练周期来收敛
- 如在coco数据集上,DETR需要500个epoch,比Faster R-CNN慢了10-20倍
- DETR在检测小物体方面的性能相对较低
- 现代物体探测器通常利用多尺度特征,即从高分辨率特征图中检测到小物体
- 同时,高分辨率的特征图导致了DETR不可接受的复杂性
在初始化时,Attention模块对特征图中的所有像素施加了几乎一致的注意权重
长时间的训练周期是学习注意力权重的必要条件,用以关注到稀疏的有意义的位置
另一方面,Transformer编码器中的注意权值计算是像素数量的平方级。因此,处理高分辨率的特征映射具有非常高的计算和内存复杂性。
在图像领域,可变形卷积是一种可以关注到稀疏空间位置的机制
它很自然地避免了上述问题。而它缺乏元素关系建模机制,这也是DETR可以成功的关键。
Deformable DETR,缓解了DETR的缓慢收敛和高复杂性的问题
它结合了可变形卷积的稀疏空间采样和Transformer的关系建模能力
我们提出了可变形的注意模块,它关注一个小型的采样位置
这也算是作为所有特征图像素中突出的关键元素的预滤波器
该模块可以很自然地扩展到聚合多尺度特性,而不需要FPN的帮助
在Deformable DETR中,我们利用(多尺度的)可变形的注意模块来代替Transformer的注意模块来处理特征图
Deformable DETR为我们利用端到端对象检测器的变体提供了可能性,这要归功于它的快速收敛性、计算量和内存效率
这里是说因为Deformable DETR可以进行快速的训练,那么就会有助于开发其他类型的DETR变体
因为更快的训练速度也会对进行网络设计实验有益处
- Deformable DETR 探索了一种简单而有效的迭代边界盒细化机制来提高检测性能
- 还尝试了一个两阶段的Deformable DETR,其中region proposal 也由一个Deformable DETR生成,并进一步输入解码器进行迭代边界盒细化
在COCO基准上进行的大量实验证明了方法的有效性。
与DETR相比,Deformable DETR可以在缩小训练周期10×倍的情况下获得更好的性能(特别是在小物体上)。
并且提出的Deformable DETR变体可以进一步提高性能
Transformer有两种注意力机制,自我注意以及交叉注意机制
Transformer最广为人知的问题之一是在大量key元素数下的高时间和内存复杂性,这在许多情况下阻碍了模型的可伸缩性
最近,人们为解决这个问题做出了许多努力,在实践中可以大致分为三类
第一类是在key上使用预定义的稀疏注意模式
最直接的范例是将注意力模式限制为固定的本地窗口
虽然将注意力模式限制在一个局部邻域可以降低复杂性,但它会丢失全局信息
第二类是学习与数据相关的稀疏注意
第三类是探索自我注意中的低等级性质
另一方面,存在卷积的变种,如可变形卷积和动态卷积,也可以视为自我注意机制。
特别是,可变形卷积在图像识别上比变压器自注意更有效。但是它也缺乏元素关系建模机制。
可变形注意力模块是受到可变形卷积的启发,属于第二类。
它只关注从查询元素的特征预测的一小组固定的采样点。
在相同的流量下,可变形的注意只是比传统的卷积稍慢
目标检测的多尺度特征表示
目标检测的主要困难之一是要在非常不同的尺度上有效地表示目标
现代的目标检测器通常利用多尺度的特性来适应这一点
多尺度可变形注意模块可以通过注意机制自然地聚合多尺度特征图,而无需借助这些特征金字塔网络的帮助
Revisiting Transformers and DETR
Multi-head Attention in Transformers
给定一个查询元素(例如输出句子中的目标词)和一组key元素(例如输入句子中的源词),多头注意模块根据衡量query-key对的兼容性的注意权重自适应地聚合key内容
为了使模型聚焦于来自不同表示子空间和不同位置的内容,将不同注意头的输出与可学习的权值线性聚合
MultiHeadAttn ( z q , x ) = ∑ m = 1 M W m [ ∑ k ∈ Ω k A m q k ⋅ W m ′ x k ] \operatorname{MultiHeadAttn}\left(\boldsymbol{z}_q, \boldsymbol{x}\right)=\sum_{m=1}^M \boldsymbol{W}_m\left[\sum_{k \in \Omega_k} A_{m q k} \cdot \boldsymbol{W}_m^{\prime} \boldsymbol{x}_k\right] MultiHeadAttn(zq,x)=m=1∑MWm[k∈Ωk∑Amqk⋅Wm′xk]
m表示多头机制的head数量
W是可学习的权重矩阵
关于Transformer,有两个已知的问题。一是在收敛之前需要很长时间的训练计划
因此,需要较长的训练计划,以便注意力权重可以集中在特定的键上
时间复杂度:
O
(
N
q
C
2
+
N
k
C
2
+
N
q
N
k
C
)
O\left(N_q C^2+N_k C^2+N_q N_k C\right)
O(NqC2+NkC2+NqNkC)
N q = N k ≫ C N_q=N_k \gg C Nq=Nk≫C
因此 时间复杂度: O ( N q N k C ) O\left(N_q N_k C\right) O(NqNkC)
DETR
DETR建立在Transformer 编码器-解码器架构上,结合基于集合的匈牙利损失
通过二部匹配强制对每个GT Box进行唯一的预测
DETR利用了一个标准的Transformer 编码器-解码器架构,将输入的特征映射转换为一组对象查询的特征
在对象查询特征(由解码器产生)的基础上,添加了一个3层的前馈神经网络(FFN)和一个线性投影作为检测头。
FFN作为回归分支来预测bbox的坐标, 编码标准化的框中心坐标、框高度和宽度(相对于图像大小)
线性投影作为分类分支,产生分类结果
对于DETR中的Transformer 编码器,query和key都是特征图中的像素。
输入的是ResNet特征映射(具有编码的位置嵌入)
对于DETR中的Transformer 解码器,输入包括来自编码器的特征映射,以及N个由可学习的位置嵌入表示的对象查询(例如,N个= 100)
在解码器中有两种类型的注意模块,即交叉注意模块和自我注意模块
在交叉注意模块中,对象查询从特征映射中提取特征
查询元素是object query,key是来自编码器的输出特性映射
在自注意模块中,object query相互交互,从而捕获它们之间的关系
query和key都是object query
DETR在检测小物体方面的性能相对较低。现代的物体探测器使用高分辨率的特征图来更好地检测小物体。然而,高分辨率的特征图会导致DETR的Transformer编码器中的自注意模块具有不可接受的复杂性,它与输入特征图的空间大小具有二次复杂度
与现代目标探测器相比,DETR需要更多的训练时代来收敛。
这主要是因为处理图像特征的注意模块难以训练。例如,在初始化时,交叉注意模块在整个特征图上几乎是平均注意力的
而在训练结束时,注意力地图变得非常稀疏,只关注物体端点
DETR似乎需要很长时间的训练计划来学习注意力地图中如此显著的变化
Method
Deformable Attention Module
在图像特征图上应用Transformer attention的核心问题是,它将查看所有可能的空间位置
而可变形的注意模块,无论特征图的空间大小如何,都只关注参考点周围的一小部分关键采样点
通过为每个查询只分配少量固定数量的键,可以缓解收敛性和特征空间分辨率的问题
DeformAttn ( z q , p q , x ) = ∑ m = 1 M W m [ ∑ k = 1 K A m q k ⋅ W m ′ x ( p q + Δ p m q k ) ] \operatorname{DeformAttn}\left(\boldsymbol{z}_q, \boldsymbol{p}_q, \boldsymbol{x}\right)=\sum_{m=1}^M \boldsymbol{W}_m\left[\sum_{k=1}^K A_{m q k} \cdot \boldsymbol{W}_m^{\prime} \boldsymbol{x}\left(\boldsymbol{p}_q+\Delta \boldsymbol{p}_{m q k}\right)\right] DeformAttn(zq,pq,x)=m=1∑MWm[k=1∑KAmqk⋅Wm′x(pq+Δpmqk)]
K表示采样点的数量,K << HW
这里的
A
m
q
k
A_{m q k}
Amqk以及
Δ
p
m
q
k
\Delta \boldsymbol{p}_{m q k}
Δpmqk采样点在实际的是代码现实中
由
z
q
z_q
zq 经过两个linear projection获得,一个获得是采样点偏移量,一个获得是权重值
可变形注意模块旨在处理卷积特征图作为关键元素
当采样点穿过所有可能的位置时,所提出的注意模块等同于Transformer attention
Multi-scale Deformable Attention Module
MSDeformAttn ( z q , p ^ q , { x l } l = 1 L ) = ∑ m = 1 M W m [ ∑ l = 1 L ∑ k = 1 K A m l q k ⋅ W m ′ x l ( ϕ l ( p ^ q ) + Δ p m l q k ) ] \operatorname{MSDeformAttn}\left(\boldsymbol{z}_q, \hat{\boldsymbol{p}}_q,\left\{\boldsymbol{x}^l\right\}_{l=1}^L\right)=\sum_{m=1}^M \boldsymbol{W}_m\left[\sum_{l=1}^L \sum_{k=1}^K A_{m l q k} \cdot \boldsymbol{W}_m^{\prime} \boldsymbol{x}^l\left(\phi_l\left(\hat{\boldsymbol{p}}_q\right)+\Delta \boldsymbol{p}_{m l q k}\right)\right] MSDeformAttn(zq,p^q,{xl}l=1L)=m=1∑MWm[l=1∑Lk=1∑KAmlqk⋅Wm′xl(ϕl(p^q)+Δpmlqk)]
可变形卷积是为单尺度输入设计的,只关注每个注意头的一个采样点
然而,我们的多尺度可变形关注从多尺度输入中观察多个采样点
多尺度可变形注意模块也可以被认为是Transformer注意的一种有效变体,其中由可变形采样位置引入了预滤波机制
Deformable Transformer Encoder
我们将所提出的多尺度可变形Attention模块代替DETR中的Transformer Attention模块处理特征映射
该编码器的输入和输出都是具有相同分辨率的多尺度特征图
所有的多尺度特征图都是C = 256通道
Deformable DETR没有使用在FPN中的自上而下的结构,因为提出的多尺度可变形注意力本身可以在多尺度特征图之间交换信息。
实验表明,添加FPN并不会提高性能
在编码器中应用多尺度可变形注意模块时,输出结果为与输入端具有相同分辨率的多尺度特征映射。
key和query都是来自多尺度特征图的像素
对于每个查询像素,参考点是其本身
为了识别每个查询像素所在的特征级别,除了位置嵌入外,我们还在特征表示中添加了一个尺度级嵌入
在代码实现中是level_embed相关的内容
与具有固定编码的位置嵌入不同,尺度级嵌入被随机初始化并与网络联合训练
Deformable Transformer Decoder
解码器中存在交叉注意和自我注意模块
这两种类型的注意模块的查询元素都是object query
在交叉注意模块中,对象查询从特征映射中提取特征,其中的key是来自编码器的输出特征映射
在自注意模块中,对象查询相互交互,其中key是对象查询 (key value的来源一般都是同一个)
由于我们提出的变形注意模块是将卷积特征图作为关键元素设计的,
我们只将每个交叉注意模块替换为多尺度变形注意模块,而保持自注意模块不变
因为交叉注意模块使用了encoder的输出,encoder的输入是特征图
因此只需要修改交叉注意模块就可以了
由于多尺度可变形注意模块提取参考点周围的图像特征,我们让检测头预测边界盒关于参考点的相对偏移可进一步降低优化难度
参考点被用作盒子中心的初始猜测。检测头预测关于参考点的相对偏移量
这样,学习到的解码器注意与预测的边界框有很强的相关性,这也加快了训练的收敛速度
其他的改进方式
Iterative Bounding Box Refinement
受光流估计中迭代改进的启发
建立了一种简单有效的迭代边界盒细化机制,以提高检测性能
在这里,每个解码器层根据上一层的预测来细化边界框
在标准的DETR中,最终box的预测仅来至于最后一层,并且aux_loss的计算也仅是在各自layer的输出后计算loss,层与层之间并无交互
如果没有使用refine机制,那么各个decoder layer输入的参考点是相同的,各个layer使用一份相同的参考点 计算输出
使用refine机制时,decoder layer的输出结果 会经过box_embed得到预测结果,然后进行一些计算,会得到新的参考点,这个参考点会传给下一层使用
这也就是说每层使用的参考点信息来源是上一层预测的box
Two-Stage Deformable DETR
在原始的DETR中,解码器中的对象查询与当前图像无关
object query初始信息中并无当前的image信息
受两阶段目标探测器的启发,我们探索了Deformable DETR的一种变体,用于生成region proposals作为第一阶段。
生成的proposals将被输入解码器作为对象查询以进一步细化,形成一个两阶段Deformable DETR
在第一阶段,为了实现高召回率的建议,多尺度特征图中的每个像素都将作为一个对象查询。然而,直接将对象查询设置为像素会给解码器中的自注意模块带来不可接受的计算和内存成本,其复杂度随着查询的数量呈二次增长
为了避免这个问题,我们去掉了解码器,并形成了一个仅限编码器的Deformable DETR,用于proposal的生成
在它中,每个像素被分配为一个对象查询,它直接预测一个边界框。得分最高的边界框被选为区域提案
在将区域提案提交到第二阶段之前,不应用NMS
我们在COCO 2017数据集上进行了实验
我们的模型在训练集上进行训练,并在val集和test-dev上进行评估
- 使用ResNet-50 backbone
- 多尺度特征图的提取没有FPN
- M = 8 K=4
默认情况下,模型被训练为50个epoch,并且学习率在第40个epoch衰减 因子为0.1
用于预测对象查询参考点和采样偏移量的线性投影的学习率乘以0.1
从图中可以看出以下信息:
- DETR的500轮训练时间真的很长
- DETR如果使用与Deformable DETR相同的50 epoch,那么效果很差,比Faster R-CNN也差很多
- Deformable DETR在大目标检测上性能下降
- 可能是因为可变性Attention比较难以大幅度,并且可能采样点数量少的原因,难以对大目标进行应用
- Deformable DETR在小目标检测上性能提升
- 可变形Attention相比DETR可以更好的关注局部,DETR的全局注意力在Local上学习吃力
- MS inputs 是多尺度输入
- MS attention 是多尺度变形attention
- 添加FPN并不会提高性能
与SOTA方法的比较
- 表中的Deformable DETR模型都使用了迭代边界箱细化和两阶段机制
- TTA表示测试时数据增强,包括了水平翻转和多尺度测试
visualization of multi-scale deformable attention
我们在编码器和解码器中可视化了最后一层的采样点和注意权值
为了便于阅读,我们将来自不同分辨率的特征图中的采样点和注意力权重合并到一张图片中
与DETR类似,这些实例已经在可变形DETR的编码器中分离。
而在解码器中,我们的模型关注于整个前景实例,而不是在DETR中观察到的极端点
我们可以猜测,原因是我们的可变形DETR不仅需要极端点,还需要内部点来确定对象类别
可视化结果还表明,所提出的多尺度可变形注意模块可以根据前景物体的不同尺度和形状来调整其采样点和注意权重
what deformable detr looks at?
为了研究Deformable DETR的最终检测结果,我们绘制了最终预测中每个对象的梯度范数(即对象中心的x/y坐标、对象边界框的宽度/高度、该对象的类别得分)
根据泰勒定理,梯度范数可以反映输出相对于像素扰动的变化程度,从而可以向我们展示模型在预测每个项目时主要依靠哪些像素来预测每个项目
可视化表明,可变形的DETR通过查看对象的极端点来确定其边界框,这与DETR中的观察结果相似
更具体地说,可变形的DETR关注对象的x坐标和宽度的左右边界,以及y坐标和高度的上/底边界。
与此同时,与DETR不同,Deformable DETR也通过观察对象内部的像素来预测其类别