Dynamic Head Unifying Object Detection Heads with Attentions论文阅读笔记
- 这是微软在CVPR2021发表的文章,在coco数据集上取得了目前为止最高的AP。
- 目标检测网络大致可以分为两个组分——feature extractor和detection head。一个好的detection head期待有三个感知能力:scale-aware、spatial-aware、task-aware。现有的detection head通常只关注提升其中之一,而本方法提出了一个统一(unify)的head同时关注了这三个方面。本方法分别在feature level、spatial、channel 上应用注意力机制,从而提升这三种能力。(之所以说channel上是task-aware,是因为不同的channel负责不同的task,比如有的负责分类有的负责定位)
- 输入的多个feature pyramid会被resize到中间尺度的大小,这样一来输入的尺度就变为 L × H × W × C L\times H \times W\times C L×H×W×C,然后将 H × W H\times W H×W拉直成 S ,就变成了 L × S × C L\times S\times C L×S×C
- 自注意力机制可以用下面公式描述 :
- 然而对
L
×
S
×
C
L\times S\times C
L×S×C算注意力,计算复杂度太大了,如果可以对每个维度分别算注意力就好了,也就是下面这个公式:
- 其中,最里面的,也就是首先对scale level进行注意力:
- 然后是spatial aware attention,是通过类似3D deformable convolution实现的,也就是说在feature level 通道上也进行了卷积,卷积核大小即通道数L,又有点类似加权平均。这个公式其实并不复杂,如果还不太懂,也可以看这篇文章:”Deformable DETR: Deformable Transformers for End-to-End Object Detection“
- 最后是task aware attention,是通过下面的形式实现的:
- 将上面三个attention堆到一起就是一个block,将多个block堆到一起,可以提升效果 。将Dyhead可以应用到网络的末尾,比如2阶段检测ROI pooling前后,或者一阶段的最后,也可以直接用来替代最后的全连接分类和回归等。
- 论文可视化了这三个注意力的处理过程特征图的变化情况,可以看到确实是有效果的。
- 其实想法倒是没那么花里胡哨,但是结果惊人的好,在用Swin-L作为backbone,并增加额外数据进行训练后,居然达到了惊人的60.6%的AP,要知道mask-RCNN这种元老才到了40%,近几年出来比较有名的,YOLOv4也才56%,居然一下子就突破到60%