概述
之前的DETR使用Transformer成功地实现了目标检测,而Deformable DETR针对DETR的缺点提出了一些改进。DETR主要有以下两个缺点:
- 相比于其它的目标检测模型,DETR需要更多的epoch才能收敛
- DETR很难检测出小物体
对于第一个问题,作者认为这是Attention机制的锅,在初始化时,Attention的权重是均匀分布在图片的每个像素上的,因此需要大量的epoch才能让权重集中在稀少的区域上。对于第二个问题,其它的目标检测模型会使用多个不同大小的feature map预测,然而对于DETR来说这是不可行的,这是因为Transformer的Encoder的时间复杂度对于像素数量是平方级的。
为了解决这些问题,作者提出了Deformable Attention机制,让Attention只关注图片的部分像素,而不是全部像素,而关注哪些像素是模型自己学出来的,通过这种方式能够更快地收敛,并且由于时间复杂度的降低,还能够很容易地使用多尺寸的feature map预测而不需要使用FPN。最后,作者还提出了iterative bounding box refinement和two-stage Deformable DETR来进一步提高AP值。
模型
模型部分只有Transformer和DETR差别很大,其它部分差别很小或完全一样。
Transformer会接受4种尺寸的feature map输入,其中3个来自ResNet的C3,C4,C5,最后一个由C5经过3x3步长为2的卷积操作得到,如图1所示:
将feature map输入到Transformer之前,和DETR一样都需要加上位置编码,不过作者还给不同尺寸的feature map添加了不同的位置编码,同一尺寸内的所有点该位置编码相同,并且该位置编码是可学习的。 加上位置编码后就会输入到Deformable Attention中,Encoder的Attention全是MS-Self-Attention(MS代表多尺寸),Decoder的第一个Attention是SS-Self-Attention(SS代表单尺寸),Decoder的第二个Attention是MS-Cross-Attention,Deformable Attention流程图如图2所示:
Deformable Attention核心思想就是关注一组reference points附近的一些像素,并计算它们的权重。对于Encoder来说reference points就是feature map的每个点(做了一些处理),对于Decoder来说reference points是一组可以学习的query_embedding,这会让模型自己学习应该关注哪些点的附近。有了reference points了,那么应该关注哪些附近的点呢?这些附近的点也是学出来的,具体来说,它是query通过一个全连接层学习出来的偏移值,将这些偏移值和reference points相加就可以得到采样点。value经过一个全连接层之后得到V,将V和采样点做双线性插值(这里我没看懂),query经过一个全连接层和softmax得到Attention权重(论文和代码中都没用到key,这和原始的Transformer有很大的不同),再将该权重与插值之后的结果相乘,就可以得到输出。
经过Transformer之后的流程和DETR就一样了,这里就不再赘述了。
总结
Deformable DETR使用了Deformable Attention实现目标检测,加快了DETR的收敛速度,并且取得了更好的性能。
参考资料
Deformable DETR: Deformable Transformers for End-to-End Object Detection