视觉大模型--DeformableDETR

文章详细介绍了DETR中多尺度可变形注意力的设计,包括其公式解释,如何通过减少query与所有key的计算来降低计算量,以及单尺度和多尺度特征融合的过程。
摘要由CSDN通过智能技术生成

原理大家可以参考这篇文章,我这边主要介绍几个公式和整体源码理解。

  1. 提出了多尺度可变形注意力(Multi-scale Deformable Attention, MSDA).基于此设计了 DETR 特有的利用多尺度特征检测的流程,对之后的很多工作有指导意义。
  2. 提出了两阶段 DETR 的思路,利用编码器输出特征来初始化解码器的 query及其对应的位置。
  3. 最早提出在解码器层之间优化 query对应位置的思路(iterative box refinement)

公式理解

 其实大家看到最多的注意力公式是第一个,第一个是针对一句话或者一个通道或者一张图片而言,即Q代表所有的query,K代表所有的键key,V代表所有的value,但是对于DeformableDETR他们的公式也是类似的,只是他针对的是一个query进行描述了注意力机制,这是从单个query的角度进行描述,通过计算输入的query和整张特征图关系进行计算注意力。把所有的query和在一起就是我们大家都熟悉的第一个公式了,这里大家需要明确的是,自注意力机制的qkv都是来源一个特征图,每个q都会和所有的可以计算然后乘上v得出结果,大家看到常见的公式其实是所有的q组成的矩阵,DeformableDETR只是拿出了一个q进行定义,下面就仔细分析DeformableDETR的针对一个query是怎么描述注意力机制的。

第二个公式的输出是MultiHeadAttn 这个是代表多头注意力机制的公式,大家可以观察蓝色的注释,可以发现z_q就是需要计算得到query特征而下标就是query的索引即第几个query,x就是特征图可以理解为key和value,当然query也在x中的,\sum_{k\varepsilon \Omega_k}^{}A_{mqk} w_m x_k中的k代表x特征的索引,x_k就是取出第k个的x特征而w_m就是代表可以训练的权重,此时w_mx_k可以看做是value即value_kA_{mqk}可以看到公式其实就是QK的计算了,uv是对应的权重,结果和value_k相乘就是注意力值了,至于m和w_m其实就多头的意思,因此整个公式代表代表了一个query特征的计算,因为根据注意力机制我么你知道每个query都会和所有的key进行点积,然后再和value计算出最后的值

 

 上面的公式在MultiHeadAttn公式的基础上怎么了p_q\Delta p _{mqk}然后得到了DeformAttn(z_q,p_q,x),而这个公式就是DeformableDETR的核心,我们仔细看看,首先大家需要理解DeformableDETR的初衷是为了解决attention的计算量大的问题,计算量大主要是因为每个query都需要和整个特征图的key进行计算,计算量和特征图的平方成正比,因此DeformableDETR的降低计算量的策略是觉得query并不需要和所有的key进行计算,query只和特征图的几个key有关,其他的相关性不大,因此DeformableDETR设计者认为模型只需要自适应的选择几个更有利学习特征的key即可,因此上面的公式也是这个从发点,p_q计算位置参考点,该值其实就是query的在特征图的位置, \Delta p _{mqk}就是相对于参考位置的偏移,因此p_q+\Delta _{mqk}就是对应的特征索引,此时的K就是选择相对于参考位置的几个特征图的key进行计算,DeformAttn(z_q,p_q,x)就是这样的过程,至于怎么选择这个参考点p_q\Delta p _{mqk},简单来说p_q参考位置是来源于query的在特征所得位置,\Delta p _{mqk} 是预测相对于参考位置的偏移量,后续在仔细解释。

从上图可以发现z_q是从input feature Map x 获取的一个特征,参考点就是 z_q的位置,大家需要仔细理解和观察。上面是单尺度的可变性注意力机制,简单来说就是通过参考位置让模型自己寻找关键的位置去聚合有用的信息,这样就可以降低大量的计算量。

 上面的公式是在DeformAttn(z_q,p_q,x)单尺度基础上增加了多尺度的特征融合,因为通过resnet50的特征图可以多尺度的,而DeformAttn(z_q,p_q,x)是在一个尺度的特征平面进行计算了,为了利用不同尺度的特征信息,DeformableDETR采用了多尺度的特征聚合方法,但是因为每个尺度的特征大小不同,对应的特征位置不同,因此模型有个对齐的操作,体现在上面的公式是\Phi _l的函数上,后续根据代码解释。

我简单看了一下代码,还挺麻烦,我自己看完了,但是还有基础无法理解,代码后续再补,

  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值