DAB-DETR 论文笔记

DAB-DETR提出使用动态锚点框作为Transformer解码器的查询,通过考虑对象的尺度信息来调节注意力图,加速训练收敛。这种方法解决了DETR中查询多模式的问题,通过位置和内容信息的结合,为每个查询提供了更好的位置先验,从而提高了检测精度。
摘要由CSDN通过智能技术生成

DAB是dynamic anchor boxes的缩写


本文提出了一种新的使用动态anchor的查询公式,并对DETR中查询的作用提供了更深入的理解
这个新的公式直接使用box坐标作为Transformer 解码器的查询,并动态更新它们

使用box坐标不仅有助于使用显式的位置先验来提高查询特征的相似性,消除DETR中缓慢的训练收敛问题,而且还允许我们使用box的宽度和高度信息来调制位置注意图


虽然以前的大多数尝试使DETR中的每个查询更明确地与一个特定的空间位置而不是多个位置相关联,但技术解决方案有很大的不同。

例如:

  1. Conditional DETR通过调整基于其内容特征的查询来学习条件空间查询,以更好地匹配图像特征
  2. Anchor DETR将查询定义为2D Anchor,将每个查询与特定的空间位置关联起来
  3. Deformable DETR直接将二维参考点视为查询,并在每个参考点上执行可变形的交叉注意操作

但以上这些都只是利用了二维位置作为锚点,而没有考虑对象的尺度

在这些研究的启发下,DAB-DETR提出使用Anchor box,即4D盒坐标(x,y,w,h)作为DETR中的查询,并逐层更新它们。

这种新的查询公式通过考虑每个锚盒的位置和大小,为交叉注意模块引入了更好的空间先验,这也导致了一个更简单的实现和对DETR中查询的作用的更深入的理解

这个公式背后的关键见解是,DETR中的每个查询都由两部分组成:

  1. 一个内容部分(解码器自我注意输出)
  2. 一个位置部分(例如,DETR中的 learnable queries)

交叉注意权重是通过比较一个查询和一组键来计算的,这些键包括两个部分,一个内容部分(encoded的图像特征)和一个位置部分(位置嵌入)

因此,Transformer解码器中的查询可以解释为 在特征图上通过基于考虑了内容和位置信息的query和feature的相似性测量进行特征池化

内容相似性是用于汇集语义相关的特征,而位置相似性是为了为汇集查询位置周围的特征提供一个位置约束

DAB-DETR使用锚盒的中心位置(x,y)来集中中心周围的特征,并使用锚盒的大小(w,h)来调节交叉注意图,使其适应锚盒的大小。
此外,由于使用坐标作为查询,因此可以分层动态地更新锚定框。通过这种方式,DETR中的查询可以实现为以级联的方式逐层执行软ROI池化。

通过使用锚盒大小来调节交叉注意,我们为池化特性提供了一个更好的位置先验

由于交叉注意可以从整个特征图中汇集特征,因此为每个查询提供适当的位置先验,使交叉注意模块集中于目标对象对应的局部区域是至关重要的

它还可以促进加速DETR的训练收敛速度

之前的大多数工作通过将每个查询与特定位置关联来改进DETR,但它们假设了一个固定大小的各向同性高斯位置先验,这不适用于不同尺度的对象

利用每个查询锚定框中可用的大小信息(w,h),我们可以将高斯位置先验调制为一个椭圆形

更具体地说,我们分别将其x部分和y部分的宽度和高度与交叉注意权重(在softmax之前)分开,这有助于高斯分布在更好地匹配不同尺度的对象之前

为了进一步改进位置先验,我们还引入了一个温度参数来调整位置注意的平整度,这在之前的所有工作中都被忽略了

请添加图片描述


大多数经典探测器都是基于Anchor的,使用Anchor box或Anchor point。
相比之下,DETR是一个完全无锚点的检测器,使用一组可学习的向量作为查询。

请添加图片描述


Why a positional prior could speedup training?

为什么位置先验信息可以加速网络训练

请添加图片描述
encoder中的每个查询由图像特征(内容信息)和位置嵌入(位置信息)组成
decoder中的每个查询由decoder嵌入(内容信息)和可学习的查询(位置信息)组成

将编码器中的自注意模块与解码器中的交叉注意模块进行比较,我们发现它们输入的关键区别来自于查询,当解码器嵌入被初始化为0时,它们在第一个交叉注意模块后被投影到与图像特征相同的空间中。在此之后,它们将在解码器层中经历与编码器层中的图像特征相似的过程。因此,根本原因很可能是learnable queries

有两个可能原因导致交叉注意模块的训练收敛缓慢:

  1. 由于优化挑战,查询难以学习
  2. learned queries中的位置信息的编码方式与用于图像特征的正弦位置编码方式不相同

为了看看这是否是第一个原因,我们重训练DETR,其中query使用已经训练好的(保持它们固定),然后只训练其他模块。
下图表明,使用已经训练好的query在非常早期的时代中只略微提高了收敛性,例如前25个时代
因此,查询学习(或优化)很可能不是关键问题。

请添加图片描述
转向第二种可能性,并试图找出学习到的查询是否有一些不可取的属性

由于学习查询用于过滤特定区域内的对象,我们可视化了学习查询和图像特征的位置嵌入之间的一些位置注意映射

请添加图片描述
每个查询都可以看作是一个位置先验,然后让解码器关注一个感兴趣的区域。虽然它们作为一种位置约束,但它们也具有不受欢迎的属性:多种模式和几乎一致的注意权重

例如,图(a)顶部的两个注意图有两个或更多的集中中心,这使得当一个图像中存在多个物体时,很难定位物体
图4(a)的底部关注于太大或太小的区域,因此不能在特征提取过程中注入有用的位置信息

我们推测DETR中查询的多模式特性可能是其训练缓慢的根本原因,我们认为引入显式的位置先验来在局部区域上约束查询是训练中可取的

为了验证这一假设,我们将查询公式替换为动态锚框,它可以强制每个查询关注特定区域,并将该模型命名为DETR+DAB

请注意,DETR和DETR+DAB之间的唯一区别是查询的公式化,而没有引入其他技术,如300个查询或focal loss

结果表明,在解决了DETR查询的多模式问题后,我们可以实现更快的训练收敛速度和更高的检测精度。

Conditional DETR虽然明确的位置先验在训练中具有良好的表现,但它们忽略了物体的尺度信息

相比之下,我们提出的DAB-DETR明确地考虑了目标尺度信息来自适应地调整注意权重,如图©所示


DAB-DETR

请添加图片描述
给定一个图像,我们使用CNN主干来提取图像空间特征,然后使用transformer encoder来细化CNN特征。
然后,将双重查询,包括位置查询(锚点盒)和内容查询(解码器嵌入)输入到解码器中,以探测与锚点相对应的、并与内容查询具有类似模式的对象。
双查询被逐层更新,以逐渐接近目标的地面真实对象。利用最终解码器层的输出,通过预测头预测带有标签和盒子的对象,然后进行二部图匹配,如DETR中计算损失

为了说明我们的动态锚定盒的通用性,我们还设计了一个更强的DAB-Deformable-DETR

Learning Anchor Boxes Directly

在每个解码器层中都有两个注意模块,包括一个自注意模块和一个交叉注意模块,分别用于查询更新和特征探测

我们将 A q = ( x q , y q , w q , h q ) A_q=\left(x_q, y_q, w_q, h_q\right) Aq=(xq,yq,wq,hq) 表示为第q个锚点 x q , y q , w q , h q ∈ R x_q, y_q, w_q, h_q \in \mathbb{R} xq,yq,wq,hqR C q ∈ R D C_q \in \mathbb{R}^D CqRD P q ∈ R D P_q \in \mathbb{R}^D PqRD 作为其对应的内容查询和位置查询,其中D是解码器嵌入和位置查询的维数。

P q = MLP ⁡ ( PE ⁡ ( A q ) ) P_q=\operatorname{MLP}\left(\operatorname{PE}\left(A_q\right)\right) Pq=MLP(PE(Aq))

PE表示位置编码,MLP的参数在所有层中共享

PE ⁡ ( A q ) = PE ⁡ ( x q , y q , w q , h q ) = Cat ⁡ ( P E ( x q ) , PE ⁡ ( y q ) , PE ⁡ ( w q ) , PE ⁡ ( h q ) ) \operatorname{PE}\left(A_q\right)=\operatorname{PE}\left(x_q, y_q, w_q, h_q\right)=\operatorname{Cat}\left(\mathrm{PE}\left(x_q\right), \operatorname{PE}\left(y_q\right), \operatorname{PE}\left(w_q\right), \operatorname{PE}\left(h_q\right)\right) PE(Aq)=PE(xq,yq,wq,hq)=Cat(PE(xq),PE(yq),PE(wq),PE(hq))

P E : R → R D / 2 \mathrm{PE}: \mathbb{R} \rightarrow \mathbb{R}^{D / 2} PE:RRD/2
MLP: R 2 D → R D \mathbb{R}^{2 D} \rightarrow \mathbb{R}^D R2DRD

 Self-Attn:  Q q = C q + P q , K q = C q + P q , V q = C q \text { Self-Attn: } \quad Q_q=C_q+P_q, \quad K_q=C_q+P_q, \quad V_q=C_q  Self-Attn: Qq=Cq+Pq,Kq=Cq+Pq,Vq=Cq

受Conditional DETR启发,在交叉注意模块中,我们将位置和内容信息连接在一起作为查询和键,这样我们就可以解耦内容和位置贡献对查询到特征相似度的贡献,计算为查询和键之间的点积

为了重新缩放位置嵌入,我们利用了条件空间查询

 Cross-Attn:  Q q = Cat ⁡ ( C q , P E ( x q , y q ) ⋅ MLP ⁡ ( c s q ) ( C q ) ) , K x , y = Cat ⁡ ( F x , y , PE ⁡ ( x , y ) ) , V x , y = F x , y , \begin{array}{ll} \text { Cross-Attn: } & Q_q=\operatorname{Cat}\left(C_q, \mathrm{PE}\left(x_q, y_q\right) \cdot \operatorname{MLP}^{(\mathrm{csq})}\left(C_q\right)\right), \\ & K_{x, y}=\operatorname{Cat}\left(F_{x, y}, \operatorname{PE}(x, y)\right), \quad V_{x, y}=F_{x, y}, \end{array}  Cross-Attn: Qq=Cat(Cq,PE(xq,yq)MLP(csq)(Cq)),Kx,y=Cat(Fx,y,PE(x,y)),Vx,y=Fx,y,

Anchor Update

使用坐标作为学习的查询,这使得逐层更新它们成为可能

DETR或者Conditional DETR很难执行逐层的查询细化,因为不清楚如何将更新后的锚点转换为高维查询嵌入

DAB-DETR中不同层中的所有预测头都共享相同的参数

Width & Height-Modulated Gaussian Kernel

请添加图片描述

传统的位置注意映射被用作类高斯先验
但先验是简单地假设所有对象都是各向同性的和固定大小的,忽略了它们的比例信息(宽度和高度)

为了提高位置先验,我们提出将尺度信息注入到注意力图中

在原始的位置注意映射中的查询到键的相似度计算为两个坐标编码的点积之和

Attn ⁡ ( ( x , y ) , ( x r e f , y r e f ) ) = ( PE ⁡ ( x ) ⋅ PE ⁡ ( x r e f ) + PE ⁡ ( y ) ⋅ PE ⁡ ( y r e f ) ) / D \operatorname{Attn}\left((x, y),\left(x_{\mathrm{ref}}, y_{\mathrm{ref}}\right)\right)=\left(\operatorname{PE}(x) \cdot \operatorname{PE}\left(x_{\mathrm{ref}}\right)+\operatorname{PE}(y) \cdot \operatorname{PE}\left(y_{\mathrm{ref}}\right)\right) / \sqrt{D} Attn((x,y),(xref,yref))=(PE(x)PE(xref)+PE(y)PE(yref))/D

我们通过将相对锚点的宽度和高度分别从其x部分和y部分分开来调制位置注意图(在softmax之前),以平滑在更好地匹配不同尺度的对象之前的高斯分布

Modulate ⁡ Attn ⁡ ( ( x , y ) , ( x r e f , y r e f ) ) = ( PE ⁡ ( x ) ⋅ PE ⁡ ( x r e f ) w q , r e f w q + PE ⁡ ( y ) ⋅ PE ⁡ ( y r e f ) h q , r e f h q ) / D \operatorname{Modulate} \operatorname{Attn}\left((x, y),\left(x_{\mathrm{ref}}, y_{\mathrm{ref}}\right)\right)=\left(\operatorname{PE}(x) \cdot \operatorname{PE}\left(x_{\mathrm{ref}}\right) \frac{w_{q, \mathrm{ref}}}{w_q}+\operatorname{PE}(y) \cdot \operatorname{PE}\left(y_{\mathrm{ref}}\right) \frac{h_{q, \mathrm{ref}}}{h_q}\right) / \sqrt{D} ModulateAttn((x,y),(xref,yref))=(PE(x)PE(xref)wqwq,ref+PE(y)PE(yref)hqhq,ref)/D

其中,wq和hq为锚点Aq的宽度和高度,wq、ref和hq,ref为通过以下方法计算的参考宽度和高度:

w q , r e f , h q , r e f = σ ( MLP ⁡ ( C q ) ) w_{q, \mathrm{ref}}, h_{q, \mathrm{ref}}=\sigma\left(\operatorname{MLP}\left(C_q\right)\right) wq,ref,hq,ref=σ(MLP(Cq))

这种调制的位置注意帮助我们提取具有不同宽度和高度的物体的特征,调制的注意的可视化如图6所示

Temperature Tuning

PE ⁡ ( x ) 2 i = sin ⁡ ( x T 2 i / D ) , PE ⁡ ( x ) 2 i + 1 = cos ⁡ ( x T 2 i / D ) \operatorname{PE}(x)_{2 i}=\sin \left(\frac{x}{T^{2 i / D}}\right), \quad \operatorname{PE}(x)_{2 i+1}=\cos \left(\frac{x}{T^{2 i / D}}\right) PE(x)2i=sin(T2i/Dx),PE(x)2i+1=cos(T2i/Dx)

T越大,就会产生更平坦的注意图,反之亦然

请添加图片描述
T越大,就会产生更平坦的注意图,反之亦然
温度T在自然语言处理的Transformer中被硬编码为10000,其中x的值是表示每个单词在一个句子中的位置的整数

然而,在DETR中,x的值是介于在0到1之间的浮点数,表示边界框坐标。因此,视觉任务非常需要一个不同的温度。在这项工作中,我们在我们所有的模型中都根据经验选择了T = 20。


Experiments

请添加图片描述

Ablations

请添加图片描述


Appendix

请添加图片描述


comparison of DETR-like models

请添加图片描述
Anchor DETR通过引入二维锚点,逐步改进了DETR。
但它没有考虑对象尺度的信息,因此不能调节交叉注意力,使其适应不同尺度的对象。
此外,其框架中的位置查询是高维的,并在没有任何适应的情况下传递给所有层的自我注意模块。详见图8 (d)中的棕色部分。
这种设计可能是次优的,因为自注意模块不能利用不同层中的细化锚点

Deformable DETR引入了4D anchor boxes并分层进行更新,在论文中称为迭代边界盒细化。
该算法主要是基于可变形注意而开发的,需要参考点对注意点进行采样,同时利用盒子的宽度和高度来调节注意区域。
然而,由于迭代边界盒的细化与可变形注意的特殊设计紧密相关,因此将其应用于一般基于Transformer解码器的DETR模型是很重的。
这可能就是为什么Deformable DETR后很少有人采用这种想法的原因。此外,Deformable DETR中的位置查询在没有任何适应的情况下,被传递给各层的自注意模块和交叉注意模块
因此,它的自我注意模块和交叉注意模块都不能充分利用不同层的精细锚盒


请添加图片描述

请添加图片描述


Results with different temperatures

请添加图片描述


Results with less decoder layers

请添加图片描述


FIXED x, y FOR BETTER PERFORMANCE

我们都知道,所有的方框坐标x y h w都是从数据中学习到的。
当我们用固定的随机初始化的锚定盒的x,y时,模型的性能也会提高。

请注意,我们只在第一层固定了x,y,以防止它们从数据中学习信息。
但是x,y会在其他层中被更新。
我们推测fixed x y有助于避免过拟合,这可以解释这一现象。
请添加图片描述


COMPARISON OF RUNTIME

在Nvidia A100 GPU上进行的测试

请添加图片描述


COMPARISON OF MODEL CONVERGENCE

请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值