文章目录[隐藏]
paper link:https://arxiv.org/pdf/2106.08322v1.pdf
Introduction
文章提出了一个动态的head架构,通过attention机制将多种不同表示形式(corner,center,anchor box)的目标检测方法统一为一个。通过
特征层间的self-attention能够识别不同尺度物体(scale-awareness),空间位置间的self-attention能够帮助识别不同形状物体(spatial-awareness),输出的通道间的self-attention能够用于关注特定的任务(task-awareness)。通过结合这三种self-attention,作者在不引入计算cost的情况下极大地提高了目标检测头的表示能力。使用SOTA backbone Swin-L时,将COCO的结果记录刷到了60.6AP!
上文提到的scale-aware是指一张图片中有不同尺度的物体需要识别;spatial-aware是指同一类物体有不同形状、朝向和不同视角;task-aware是指物体可以选用不用的表示方式,如边框、中心点、corner点等,不同的表示方式有不同的学习目标。而本文则是要设计一个同时满足这三种需求的unified head——dynamic head。
如何做到整合scale-awareness, spatial-awareness,和 task-awareness呢?
如果将backbone的输出视为一个3维的tensor,即 level × space ×channel,这个unified head就可以被看作一个attention学习问题。一个直观的方案是在此tensor之上构造一个full self-attention机制,然而,优化问题难以解决并且计算cost 难以承受。
而作者提出在分别在level-wise,spatial-wise,和channel-wise等每个独特的特征维度上分别地应用attention 机制。scale-aware attention只应用在level dimension,对于一个物体,scale-aware attention会根据其scale来学习各种语义level上的相关重要性来增强相应于其scale 的level上的特征。同理spatial-aware attention学习空间位置上的关联表示。 task-aware attention作用于channel,根据物体返回的不同卷积核响应,让不同的channel响应不用的任务。通过这种方式实现了一个作用域detection head的unified attention机制。
Approach
将L层的特征图通过上采样或者下采样来resize到一个中间层,然后concatenate起来得到特征图
F
i
n
=
{
F
i
}
i
=
1
L
F_{in} = \left\{F_i\right\}_{i=1}^L
Fin={Fi}i=1L,这个特征图的尺寸可被视为一个4维的tensor
F
∈
R
L
×
H
×
W
×
C
F \in R^{L×H×W×C}
F∈RL×H×W×C,其中L表示的是金字塔中的level数量,H、W、C分辨是特征图的高、宽、和通道数。令S=H×W将上述4维tensor reshape成一个3维的tensor
F
∈
R
L
×
S
×
C
F \in R^{L×S×C}
F∈RL×S×C。
Dynamic Head: Unifying with Attention
给定
F
∈
R
L
×
S
×
C
F \in R^{L×S×C}
F∈RL×S×C这样的一个tensor,self-attention的通用公式为:
W
(
F
)
=
π
(
F
)
⋅
F
W(F) = π(F) · F
W(F)=π(F)⋅F
其中π(·) 是一个 attention function.一种很简单的attention实现方式是使用全连接,但是全连接从所以维度上学习,由于我们的维度很大,计算代价太大,不可取。
所以这里将attention function转为3个序列化的attentions,每个都只聚焦于一个角度:
W
(
F
)
=
π
C
(
π
S
(
π
L
(
F
)
⋅
F
)
⋅
F
)
⋅
F
W(F)=\pi _C(\pi_S(\pi_L(F)·F)·F)·F
W(F)=πC(πS(πL(F)⋅F)⋅F)⋅F
其中πL(·), πS(·), 和πC (·)分别是三个不同的attention function,分别应用在不同的维度L,S,C。
Scale-aware Attention πL
我们首先引入了一种尺度感知注意力,基于他们的语义重要性来动态融合不同尺度的特征。
这里 f(·) is a linear function approximated by a 1 × 1 convolutional layer, and σ(x) = max(0, min(1,(x+1)/2)) is a hard-sigmoid function.
Spatial-aware Attention πS
考虑到S是高维度,将这个模块分为两步:第一步使用可变形卷积(deconv)让注意力学习稀疏,然后aggregating 不同level上相同spatial location的特征。
这里K是稀疏采样的位置数量,
p
k
+
Δ
p
k
是
用
自
己
学
习
到
的
s
p
a
t
i
a
l
o
f
f
s
e
t
Δ
p
k
s
h
i
f
t
e
d
之
后
的
位
置
p_k+\Delta_{pk}是用自己学习到的spatial offset \Delta_{pk}shifted之后的位置
pk+Δpk是用自己学习到的spatialoffsetΔpkshifted之后的位置.
Δ
m
k
\Delta m_{k}
Δmk则是学习到的位置pk处的重要性标量。二者都由F的中间层特征图学习得到。
Task-aware Attention πC .
为了实现关联的学习和泛化到不同的物体表示方法,最后应用了一个task-aware attention。它动态地开启或关闭特征图的channels来适应不同的tasks:
Fc是指第c个 channel的特征切片,
[
α
1
,
α
2
,
β
1
,
β
2
]
T
=
θ
(
⋅
)
[α ^1 , α^2 , β^1 , β^2 ]^ T = θ(·)
[α1,α2,β1,β2]T=θ(⋅) 是一个超函数,用于学习控制激活的阈值。θ(·)和dynamic relu实现一样,首先在L×S维度上执行了一个global average pooling来降维,然后使用两个全连接和一个normalization layer,最后应用一个shifted sigmoid 函数来normalize 输出到[−1, 1].
最后,上面的三个attention机制sequentially的应用,而且可以重复嵌套多次来堆叠多个块到一起。我们的dynamic head block的详细配置见图2(a)。
总结,加上提出的dynamic head之后的整个目标检测的范式如图1所示,所以类型的backbone都能用于提取特征金字塔,特征金字塔进一步resize到相同的scale,然后形成一个3维的tensor
F
∈
R
L
×
S
×
C
F \in R^{L×S×C}
F∈RL×S×C,然后作为输入送到dynamic head中。接着,多个包含scale-aware,spatial-aware和task-aware attentions的DyHead bocks被sequentially的堆叠应用。最后dynamic head 的输出可以被用于不同的tasks和不同represention的目标检测。
Generalizing to Existing Detectors
One-stage Detector
一般的one-stage检测器由一个backbone提取dense features,然后多个task-specific的子网络分支分别地处理不同任务(分类、回归)。
这里只在backbone后跟一个unified 分支,而不是多分支。由于采用了多个attention机制,这个unified 分支能够同时处理多个任务。这样网络架构就简化了,同时也更加高效。
Two-stage Detector
首先在特征金字塔上应用scale-aware attention和spatial-aware attention,然后ROI-pooling layer之后开始使用task-aware attention来替代原来的全连接层,如图2c所示。
和其它attention机制的对比
Deformable:引入sparse sample,只建立了S子维度的表示。在backbone使用deformable能够和dynamic head互补。
Non-local。Non-local Networks是一个利用attention模块来增强目标检测器性能的先驱工作,然而,它使用简单的”点乘“公式,通过融合其它不同空间位置的像素特征来增强一个像素特征。之间莫了L×S子维度的表示。
Transformer。只建模了S×C子维度的表示。
Conclusion
文章整合了三个注意力到一个框架中,提出了在目标检测头应用attention的新观点,而且提出的dynamic head 容易插入,能够灵活地整合到任何地现存目标检测器框架中来促进其性能。该工作也表明在目标检测头应用attentions值得进一步地学习。作者提出两个改进点:如何使full attention module更容易学习、更有效计算(这里作者是分开计算各个维度的attention,所以在level × space ×channel的tensor上尝试直接同时计算多个维度attention值得研究);如何系统地加入更多的attention范式到head中得到更好的性能。
还没有开源~
版权声明:本文为CSDN博主「yanghaoplus」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanghao201607030101/article/details/118222149
暂无评论