第十七章 原理篇:Deformable DETR

DeformableDETR是DETR的一种改进,通过引入可变形注意力模块解决了DETR的收敛速度慢和小物体检测效果差的问题。可变形卷积允许网络适应图像中复杂的几何变换,而DeformableAttentionModule则减少了计算量,提高了模型效率。Multi-scaleDeformableAttention进一步扩展了这一思想,使得模型能在不同尺度的特征图上高效工作。

参考教程:

论文:https://arxiv.org/pdf/2010.04159.pdf

源码:https://github.com/fundamentalvision/Deformable-DETR

Deformable Conv

首先来简单的介绍一下可变形卷积。

代码链接: torchvison.DeformConv2d

deformable conv 可变形卷积认为CNN固定的几何结构不能适应图像中复杂的物体。普通的卷积是在固定的、规则的网络点上进行数据采样,感受野的形状是受限的,网络对几何形变的适应力也是受限制的。

所以可变形卷积就给卷积核的每个采样点增加一个可学习的偏移量,让采样点不再受限于规则的网格上。
在这里插入图片描述
普通的卷积网络在处理一张图的不同位置时,感受野大小都是相同的,这不太合适。对编码了位置信息的神经网络来说,不同位置对应的应该是不同的元素或形变的物体。它不应该是固定的一个框。

在上图中举了几个可变形卷积的例子。第一个是我们标准的方方正正的普通卷积。第二个是deformed 卷积,可以看到它的采样点都有着不同方向和距离的偏移。第三个图比较规整,它更像是我们常说的空洞卷积。第四个图是角度的旋转。
在这里插入图片描述
上面这个图是比较直白的deformable convolution的原理图。regular的卷积是某个位置上的值是通过输入的对应位置和卷积核的加权结合得到的。在deformable convolution中,它给每个位置 p n p_n pn增加了一个偏移量 Δ p n \Delta p_n Δpn。而这个偏移量则是由另一个卷积得到的。

也就是说deformable convolution其实是由两个卷积组成的,一个走正常的卷积,一个用于计算偏移量。

Deformable DETR

DETR作为一个省去了很多比如NMS这些处理工作的目标检测方法,不仅可以实现端到端的检测,检测的效果还非常好。

但是它也是有一些问题的。

  1. 首先它的收敛速度非常慢。这个问题之前VIT也有说过,算是基于self-attention训练的常见问题。它相当于自己学习感受野和元素间的关系,更加flexible,所以收敛时间也就更长。
  2. 它检测小物体的效果比较差。因为他是基于backbone得到的feature map做的检测,所以也受到feature map的resolution的限制。假如你想用high-resolution的featuremap来做预测,那么使用DETR的计算复杂度也太高了,是不可接受的。

作者在论文中说,上面这两个问题归根到底都是transformer自身的缺陷。在初始化的时候,这个attention module对feature map上的每一个像素施加了均匀的注意力权重,所以需要长时间的寻来你来关注到稀疏的有意义的位置。

deformable convolution呢,则是一个非常有效的关注稀疏空间位置的方法,它天然地能避免上面这个问题,但是它呢缺乏元素相对关系的建模,而这又是transformer能给它的。所以才会想把两者结合起来。

计算量

之前我们有计算过MSA的计算量,这里来复习一下。

  1. C代表token的维度,假设我们的输入大小是 A h ∗ w , C A^{h*w,C} Ahw,C。在进行Q\K\V计算时唯独没有发生变化,那么进行三次矩阵乘法 A h ∗ w , C ∗ W C , C A^{h*w,C}*W^{C,C} Ahw,CWC,C,每次计算量是 h w C 2 hwC^2 hwC2,计算了三次,总的计算量是 3 h w C 2 3hwC^2 3hwC2
  2. 然后计算 Q h ∗ w , C Q^{h*w,C} Qhw,C K h ∗ w , C K^{h*w,C} Khw,C的内积,计算结果为 X h ∗ w , h ∗ w X^{h*w,h*w} Xhw,hw,内积计算需要点对点进行计算,所以计算量是 h 2 w 2 C h^2w^2C h2w2C
  3. 再下一步计算 X h ∗ w , h ∗ w ∗ V h ∗ w , C X^{h*w,h*w}*V^{h*w,C} Xhw,hwVhw,C,计算量为 h 2 w 2 C h^2w^2C h2w2C
  4. 因为是多头自注意力,所以还需要增加一步 B h ∗ w , C ∗ W C , C B^{h*w,C}*W^{C,C} Bhw,CWC,C,计算量为 h w C 2 hwC^2 hwC2
  5. 加起来的总的计算量是:
    4 h w C 2 + 2 h 2 w 2 C 4hwC^2 + 2h^2w^2C 4hwC2+2h2w2C

假设我们以backbone的最后一层featuremap为输出,送入encoder中进行MSA。假如你的输入图像大小为480*480*3,那么经过backbone后得到的featuremap大小为15*15*2048,2048的通道数还需要经过1*1卷积降维变成C,直接代入数字:
4 h w C 2 + 2 h 2 w 2 C = 4 × 15 × 15 × C 2 + 2 × 1 5 2 × 1 5 2 × C = 900 C 2 + 101250 C \begin{align} &4hwC^2 + 2h^2w^2C \\ = &4\times15\times15\times C^2+ 2\times15^2\times15^2\times C\\ =&900C^2 + 101250C \end{align} ==4hwC2+2h2w2C4×15×15×C2+2×152×152×C900C2+101250C

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值