Dynamic Head: Unifying Object Detection Heads with Attentions

文章目录[隐藏]

Dynamic Head

论文标题:Dynamic Head: Unifying Object Detection Heads with Attentions
论文地址:https://arxiv.org/pdf/2106.08322v1.pdf
论文源码:https://github.com/microsoft/DynamicHead

微软

Motivation

​ 文章提出了一个动态的head架构,通过attention机制将多种不同表示形式(corner,center,anchor box)的目标检测方法统一为一个。

  • scale-awareness:特征层间的self-attention能够识别不同尺度物体(一张图片中有不同尺度的物体需要识别).
  • spatial-awareness:空间位置间的self-attention能够帮助识别不同形状物体.(指同一类物体有不同形状、朝向和不同视角)
  • task-awareness:输出的通道间的self-attention能够用于关注特定的任务.(指物体可以选用不用的表示方式,如边框、中心点、corner点等)

​ 通过结合这三种self-attention,作者在不引入计算cost的情况下极大地提高了目标检测头的表示能力。使用SOTA backbone Swin-L时,将COCO的结果记录刷到了60.6AP!

Approach

​ 如果将backbone的输出视为一个3维的tensor,即

l

e

v

e

l

×

s

p

a

c

e

×

c

h

a

n

n

e

l

level\times space\times channel

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机制。

Dynamic Head: Unifying with Attentions

在这里插入图片描述

在这里插入图片描述

​ 将L层的特征图通过上采样或者下采样来resize到一个中间层,然后concatenate起来得到特征图

F

i

n

=

{

F

i

}

i

=

1

F_{in} = \left\{F_i\right\}_{i=1}

Fin={Fi}i=1,这个特征图的尺寸可被视为一个4维的tensor

F

R

L

×

H

×

W

×

C

F \in R^{L×H×W×C}

FRL×H×W×C,其中L表示的是金字塔中的level数量,

H

W

C

H、W、C

HWC分辨是特征图的高、宽、和通道数。令

S

=

H

×

W

S=H×W

S=H×W将上述4维tensor reshape成一个3维的tensor

F

R

L

×

S

×

C

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

FRL×S×C

​ 给定

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 W(F) = π(F) · F

W(F)=π(F)FW(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

(

)

πL(·), πS(·), 和πC (·)

πL(),πS(),πC()分别是三个不同的attention function,分别应用在不同的维度

L

,

S

,

C

L,S,C

L,S,C

Scale-aware Attention

π

L

π_L

πL

​ 目标检测中应对多尺度变换有很多方法,比如: image pyramid、 feature pyramid、SNIPER等。其中 feature pyramid用的比较多,对于feature pyramid的聚合也有很多方法,比如:PANET、ASFF等。Dynamic Head中的尺度attention其实就是一个feature pyramid一个attention操作,scale-attention函数如下所示:

π

L

(

F

)

F

=

σ

(

f

(

1

S

C

S

,

C

F

)

)

F

\pi_{L}(\mathcal {F})\cdot \mathcal {F}=\sigma(f(\frac {1}{SC}\sum_{S,C}\mathcal {F}))\cdot \mathcal{F}

πL(F)F=σ(f(SC1S,CF))F

σ

(

)

\sigma()

σ()为hard-sigmoid函数,

1

S

C

S

,

C

F

\frac {1}{SC}\sum_{S,C}\mathcal {F}

SC1S,CF就是一个avg-pooling操作。scale-attention就是对每一个尺寸对应的特征

F

l

R

H

×

W

×

C

\mathcal {F}_{l}\in R^{H\times W\times C}

FlRH×W×C做avg-pooling操作,在通过一个

1

×

1

1\times 1

1×1的卷积后进行hard-sigmoid输出一个attention值与

F

\mathcal{F}

F相乘。

Spatial-aware Attention

π

S

π_S

πS

​ 考虑到

S

S

S是高维度,将这个模块分为两步:第一步使用可变形卷积(deconv)让注意力学习稀疏,然后aggregating 不同level上相同spatial location的特征。

π

S

(

F

)

F

=

1

L

l

=

1

L

k

=

1

k

w

l

,

k

F

(

l

;

p

k

+

Δ

p

k

;

c

)

Δ

m

k

\pi_{S}(\mathcal{F})\cdot \mathcal{F}=\frac{1}{L}\sum_{l=1}^{L}\sum_{k=1}^{k}w_{l,k}\cdot \mathcal{F}(l;p_{k}+\Delta p_{k};c)\cdot\Delta m_{k}

πS(F)F=L1l=1Lk=1kwl,kF(l;pk+Δpk;c)Δmk
​ K是位置稀疏采样点数量,可以认为是DCN的采样数,

F

(

l

;

p

k

+

Δ

p

k

;

c

)

\mathcal{F}(l;p_{k}+\Delta p_{k};c)

F(l;pk+Δpk;c)就是deformable conv操作,

Δ

p

k

\Delta p_k

Δpk是学习到的偏置,

w

l

,

k

w_{l,k}

wl,k是deconv的参数,

F

(

l

;

p

k

+

Δ

p

k

;

c

)

\mathcal{F}(l;p_{k}+\Delta p_{k};c)

F(l;pk+Δpk;c)表示

F

\mathcal{F}

F

l

l

l层特征的第

c

c

c个通道的

p

k

+

Δ

p

k

p_{k}+\Delta p_{k}

pk+Δpk位置的值。

Task-aware Attention

π

C

π_C

πC.

​ 为了实现关联的学习和泛化到不同的物体表示方法,最后应用了一个task-aware attention。它动态地开启或关闭特征图的channels来适应不同的tasks:

π

C

(

F

)

F

=

max

(

α

1

(

F

)

F

c

+

β

1

(

F

)

,

α

2

(

F

)

F

c

+

β

2

(

F

)

)

\pi_{C}(\mathcal{F})\cdot \mathcal{F}=\max(\alpha^{1}(\mathcal{F})\cdot \mathcal{F}_{c}+\beta^{1}(\mathcal{F}),\alpha^{2}(\mathcal{F})\cdot\mathcal{F}_{c}+\beta^{2}(\mathcal{F}))

πC(F)F=max(α1(F)Fc+β1(F),α2(F)Fc+β2(F))
​ 通过对

F

\mathcal{F}

F中的

C

C

C个通道进行Dynamic relu来对不同的通道进行不同的激活达到attention操作。

F

c

\mathcal{F}_{c}

Fc是指第

c

c

c个channel的特征切片,

[

α

1

,

α

2

,

β

1

,

β

2

]

=

θ

(

)

[\alpha^{1},\alpha^{2},\beta^{1},\beta^{2}]=\theta(\cdot)

[α1,α2,β1,β2]=θ()是一个超参数,用来学习控制激活的阈值。首先在

L

×

S

L\times S

L×S维度上做global average pooling来降维,然后使用两个全连接和一个Noramlization layer,最后使用一个shifted sigmoid函数来normalize输出到

[

1

,

1

]

[-1,1]

[1,1]之间。

Ablation Study

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Experiment

在这里插入图片描述
在这里插入图片描述

版权声明:本文为CSDN博主「Fwenxuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42714574/article/details/123063292

Fwenxuan

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

暂无评论

发表评论

相关推荐

深度学习之目标检测YOLOv5

一.简介 YOLOV4出现之后不久,YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较与分析&#xff0