论文阅读|目标检测之Dynamic head

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}

FRL×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}

FRL×S×C

Dynamic Head: Unifying with Attention

给定

F

R

L

×

S

×

C

F \in R^{L×S×C}

FRL×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

我们首先引入了一种尺度感知注意力,基于他们的语义重要性来动态融合不同尺度的特征。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVvdjZ8O-1624606515645)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/16207dde-ab6c-4c3e-8342-97311b2ec65f/Untitled.png)]

这里 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的特征。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9X330w4Z-1624606515648)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/25cb4806-a832-4d98-aefd-a266a38347a3/Untitled.png)]

这里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+ΔpkspatialoffsetΔ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}

FRL×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

yanghaoplus

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐