最近学习CV中的Transformer有感而发,网上关于Deformable DETR通俗的帖子不是很多,因此想分享一下最近学习的内容。第一次发帖经验不足,文章内可能有许多错误或不恰之处欢迎批评指正。
DETR消除了目标检任务中的手工设计痕迹
,但是存在收敛慢以及Transformer的自注意力造成的特征图分辨率不能太高的问题,这就导致了小目标检测性能很差。我们的Deformable DETR只在参考点附近采样少量的key来计算注意力,因此我们的方法收敛快并且可以用到多尺度特征。
传统目标检测任务有很多手工设计痕迹,所以不是端到端的网络。DETR运用到了Transformer强大的功能以及全局关系建模能力来取代目标检测中人工设计痕迹来达到端到端的目的。
DETR的两大缺点:
(1)收敛速度慢:因为全局像素之间计算注意力要收敛到几个稀疏的像素点需要消耗很长的时间。
(2)小目标检测差:目标检测基本都是在大分辨率的特征图上进行小目标的检测,但是Transformer中的Self Attention的计算复杂度是平方级别的,所以只能利用到最后一层特征图。
可变形卷积DCN是一种注意稀疏空间位置很好的机制,但是其缺乏元素之间关系的建模能力。
综上所述,Deformable Attention
模块结合了DCN稀疏采样能力和Transformer的全局关系建模能力。这个模块可以聚合多尺度特征,不需要FPN了,我们用这个模块替换了Transformer Encoder中的Multi-Head Self- Attention
模块和Transformer Decoder中的Cross Attention
模块。
Deformable DETR的提出可以帮助探索更多端到端目标检测的探索。提出了bbox迭代微调策略
和两阶段
方法,其中iterative bounding box refinement
类似Cascade R-CNN
方法,two stage
类似RPN
。
Transformer中包含了多头自注意力和交叉注意力机制,其中多头自注意力机制对key的数量很敏感,平方级别的复杂度导致不能有太多的key,解决方法主要可以分为三类。
(1)第一类解决方法为在key上使用预定义稀疏注意力模式,例如将注意力限制在一个固定的局部窗口上,这将导致失去了全局信息。
(2)第二类是通过数据学习到相关的稀疏注意力。
(3)第三类是寻找自注意力中低等级的属性,类似限制关键元素的尺寸大小。
图像领域的注意力方法大多数都局限于第一种设计方法,但是因为内存模式原因速度要比传统卷积慢3倍(相同的FLOPs下)。DCN可以看作是一种自注意力机制,它比自注意力机制更加高效有效,但是其缺少元素关系建模的机制。我们的可变形注意力模块来源于DCN,并且属于第二类注意力方法。它只关注从q特征预测得到的一小部分固定数量的采样点。
目标检测任务一个难点就是高效的表征不同尺度下的物体。现在有的方法比如FPN,PA-FPN,NAS-FPN,Auto-FPN,BiFPN等。我们的多尺度可变形注意力模块可以自然的融合基于注意力机制的多尺度特征图,不需要FPN了。
该模块计算复杂度为: ,其中 代表特征图维度, 和 均为图片中的像素(pixel),因此有。所以计算复杂度可以简化为 ,可以得出其与图片像素的数量成平方级别的计算复杂度。
DETR在目标检测领域中引入了Transformer结构并且取得了不错的效果。这套范式摒弃了传统目标检测中的anchor
和post processing
机制,而是先预先设定100个object queries然后进行二分图匹配计算loss。其具体流程图(pipeline)如下
图1. DETR Pipeline
1、输入图片3×800×1066
的一张图片,经过卷积神经网络提取特征,长宽32倍下采样
后得到2048×25×34
,然后通过一个1×1 Conv
进行降维最终得到输出shape为256×25×34
.
2、positional encoding
为绝对位置编码,为了和特征完全匹配形状也为256×25×34
,然后和特征进行元素级别的相加后输入到Transformer Encoder中。
3、输入到Encoder
的尺寸为(25×34)×256=850×256
,代表有850个token每个token的维度为256,Encoder不改变输入的Shape。
4、Encoder
的输出和object queries
输入到Decoder
中形成cross attention
,object queries
的维度设置为anchor数量×token数量
。
5、Decoder
输出到FFN
进行分类和框定位,其中FFN
是共享参数的。
tips: 虽然DETR没有anchor,但是object queries其实就是起到了anchor的作用。
真的是很多就是会影响的纷纷, 的评分法,的得分,好吃的很疯狂,的复合肥‘的判断【二分侧福晋】得分后方可,
DETR缺点在于:
(1)计算复杂度的限制导致不能利用大分辨率特征图,导致小目标性能差。
(2)注意力权重矩阵往往都很稀疏,DETR计算全部像素的注意力导致收敛速率慢。
图2. Deformable Attention Module
Deformable Attention Module主要思想是结合了DCN和自注意力,目的就是为了通过在输入特征图上的参考点(reference point)附近只采样少数点(deformable detr设置为3个点)来作为注意力的 。因此要解决的问题就是:(1)确定reference point。(2)确定每个reference point的偏移量(offset)。(3)确定注意力权重矩阵 。在Encoder和Decoder中实现方法不太一样,加下来详细叙述。
在Encoder部分,输入的Query Feature 为加入了位置编码的特征图(src+pos),的计算方法只使用了src而没有位置编码(value_proj函数)。
(1)reference point确定方法为用了torch.meshgrid方法,调用的函数如下(get_reference_points),有一个细节就是参考点归一化到0和1之间,因此取值的时候要用到