论文链接:SMCA: Fast Convergence of DETR with Spatially Modulated Co-Attention
代码链接:https://github.com/gaopengcuhk/SMCA-DETR
一、背景
DETR 作为首个使用 Transformer 实现目标检测的方法,获得了和基于 CNN 的检测方法相媲美的检测效果,如 Faster-RCNN 等,而且不需要手工设计的 anchor 和 NMS,但是 DETR 的收敛速度很慢,大概需要 500 个 epochs 才能收敛。
二、动机
DETR 中,有一系列的 query vector 来负责检测不同位置的目标,每个 object query 和 CNN 得到的空间位置特征进行交互,然后使用 co-attention 自适应地从这些空间信息中选择主要特征,估计位置和类别。但在 decoder 中,co-attended 为每个 object query 关注的区域可能和 query 预测的 box 没有联系起来。所以 DETR 的 decoder 需要较大的训练轮次来正确的 co-attended 区域来准确的识别出对应的目标。
基于此,作者提出了一个即插即用的 Spatially Modulated Co-attention (SMCA) 模块来代替 DETR 中的 co-attention 模块,来实现快速收敛并提高效果。
三、方法
3.1 SMCA 概述
本文提出的 SMCA 能够动态的预测每个 object query 对应的 box 的初始中心和尺寸,并且生成一个 2D gaussian-like weight map,该 weight map 和 object query 的 co-attention feature map 进行逐点相乘,以便更有效地从视觉特征图中聚合 query 的相关信息。
这样一来,spatial weight map 有效地调节了每个 object query 的 co-attention 搜索范围,能够让搜索范围更好的趋向于目标对象的中心和尺度。使用该高斯分布先验之后, SMCA 能够明显的加速 DETR 的训练。
虽然 SMCA 能够加速 DETR 的训练,但效果有些下降(41.0 mAP at 50 epochs, 42.7 at 108 epochs vs. 43.3 mAP at 500 epochs)。受到多头注意力[38]和多尺度特征[22]的启发,SMCA 在 encoder 里边使用了多尺度特征,在decoder 里边使用了多头注意力。


3.2 Spatially Modulated Co-Attention
SMCA 的主要想法是将学习到的 co-attention maps 和手工设计的 query spatial 特征进行结合,其结构为图 2 橘色部分。
1、Dynamic spatial weight maps
Gaussian-like spatial weight map 的生成:每个 object query 首先动态预测其对应的目标的中心和尺度,这个预测的中心和尺度被用来生成 Gaussian-like spatial weight map。
Gaussian-like 分布的中心:初始化为标准坐标 [ 0 , 1 ] × [ 1 , 0 ] [0,1] \times [1,0] [0,1]×[1,0]
对于 object query O q O_q Oq,Gaussian-like 分布的中心位置 c h n o r m , c w n o r m c_h^{norm}, c_w^{norm} chnorm,cwnorm 和尺度 s h , s w s_h, s_w sh,sw 的初次预测为:

- O q O_q Oq 被使用 2 层 MLP 投影得到 normalied 的二维预测结果 c h n o r m , c w n o r m c_h^{norm}, c_w^{norm} chnorm,cwnorm,然后被 unnormalized 来得到原图中的中心位置 c h , c w c_h, c_w ch,cw
- O q O_q Oq 也被使用 FC 来得到目标的尺度 s h , s w s_h, s_w sh,sw
实际中的目标尺度是很多变的,所以使用了独立的 s h s_h sh 和 s w s_w sw 来预测宽和高,这样有利于适应不同的目标。
对于不同大小的目标,SMCA 能够自适应的产生不同的 s h s_h sh 和 s w s_w sw,所以使用 spatial weight map G G G 修正后的 co-attention map 能够为大目标聚合所有部位,能够为小目标抑制背景的影响。
预测了目标的中心和尺度知乎, SMCA 能够生成如下的 gaussian-like weight map:

- ( i , j ) ∈ [ 0 , W ] × [ 0 , H ] (i,j)\in[0, W] \times [0, H] (i,j)∈[0,W]×[0,H]
- β \beta β 是超参数,用来调整高斯核的宽度
- 这个高斯特征图给邻近中心的位置更多关注,远离中心的位置更少的关注,
2、Spatially-modulated co-attention
上面介绍了如何获得 G G G,然后就使用 G G G 来修正 co-attention maps C i C_i Ci (co-attention maps 是object query O q O_q Oq 和 self-attention encoded feature E E E 的 attention map)。
对于每个由公式 2 产生的 attention maps C i C_i Ci,都要使用 G G G 来对其进行修正。
① 在 base version 里边,所有 co-attention head 的 G G G 都是共享的:

经过公式5后, decoder co-attention 将会更关注于预测框的附近,缩小搜索范围,加速收敛。
② 作者也尝试了对不同的 co-attention head 进行不同的 co-attention 特征修正,也就是不同的 head 使用不同的 G G G。

3、SMCA with multi-scale visual features
目标检测任务中,由于不同目标的大小各异,所以使用多尺度特征尤为重要。给定一幅图像,CNN 能够抽取不同尺度的特征,如下采样 16,32,64 倍等。
在 encoder 中,多尺度自注意编码把不同尺度的所有位置的特征同等对待,这就会导致计算很复杂,计算量很大。为了解决这个问题,作者引入了 intra-scale 自注意编码,也就是仅仅在单个尺度特征图内进行attention,transformer block共享这些权重,并且实验也证明了使用共享的权重有利于模型泛化。
此外,SMCA 共使用了 5 个 blocks: 2 个 intra-scale block encoding + 1 个 multi-scale encoding + 2 个 intra-scale block encoding
给定 CNN 的多尺度输出:
① 一个简单的方法是将这个多尺度特征 rescale 和 concat,形成一个单一尺度的特征图,然后计算 object query 和 resulting map 的 co-attention。但一些 queries 其实不能对所有的尺度都有响应,比如小目标在下采样 64 倍的特征图上已经消失了。所以小目标只能从大分辨率特征图中得到。
② 基于此,本文作者提出了一种使用可学习的 scale-attention 来自动化的给每个 box 选择对应尺度的方法,每个 object query 会生成一个如下的 scale-attention weights:

-
α
16
\alpha 16
α16,
α
32
\alpha 32
α32,
α
64
\alpha 64
α64 分别对应下采样为 16,32,64 倍的特征图。

- C i , j C_{i, j} Ci,j 是第 j 个尺度特征和第 i 个 co-attention head 的 co-attention 特征
四、效果

1745

被折叠的 条评论
为什么被折叠?



