(一) 本文需要解决的问题
DETR具有slow convergence以及limited feature spatial resolution
原始的DETR模型存在的问题:
- 训练时间长,需要500个epoch才能够收敛
- 对小目标检测能力相对较弱
- 在初始化时,Attention modules接近是均匀分布,需要长时间的训练才能将其转变为sparse meaningful locations
- attention weight这边的权重计算是二次复杂度的,对于高分辨率图来说是高计算和高内存消耗的。
Deformable DETR真的是一篇神作,给后面太多的改进方法带来了思路。
(二) 本文是怎么解决这些问题的
本文的主要工作有两个,首先第一个就是将deformable attention module替换Attention模块,从而实现sparse attention。接着第二个就是multi-scale deformable attention module来实现不同尺度特征的建模。
首先是Deformable Attention Module
给定一个输入feature map
x
∈
R
C
×
H
×
W
x \in \mathbb{R}^{C \times H \times W}
x∈RC×H×W,接着令
q
q
q表示带有content feature
z
q
z_q
zq?,以及一个2d的reference point
p
q
p_q
pq?的一个query,接着deformable attention feature能够通过一下的方式计算:
DeformAttn
?
(
z
q
,
p
q
,
x
)
=
∑
m
=
1
M
W
m
[
∑
k
=
1
K
A
m
q
k
?
W
m
′
x
(
p
q
+
Δ
p
m
q
k
)
]
\operatorname{DeformAttn}\left(\boldsymbol{z}_{q}, \boldsymbol{p}_{q}, \boldsymbol{x}\right)=\sum_{m=1}^{M} \boldsymbol{W}_{m}\left[\sum_{k=1}^{K} A_{m q k} \cdot \boldsymbol{W}_{m}^{\prime} \boldsymbol{x}\left(\boldsymbol{p}_{q}+\Delta \boldsymbol{p}_{m q k}\right)\right]
DeformAttn(zq?,pq?,x)=m=1∑M?Wm?[k=1∑K?Amqk??Wm′?x(pq?+Δpmqk?)] 其中,
m
m
m是表示multi-head的index,k表示采样的key,
K
K
K是总的key的数量
(
K
?
H
W
)
(K \ll H W)
(K?HW),此外
Δ
p
m
q
k
\Delta p_{m q k}
Δpmqk?以及
A
m
q
k
A_{m q k}
Amqk?分别表示采样的offset以及在第
m
m
m个head上的第
k
k
k个采样点的attention weights,
∑
k
=
1
K
A
m
q
k
=
1
\sum_{k=1}^{K} A_{m q k}=1
∑k=1K?Amqk?=1,
Δ
p
m
q
k
∈
R
2
\Delta \boldsymbol{p}_{m q k} \in \mathbb{R}^{2}
Δpmqk?∈R2,由于特征点
p
q
\boldsymbol{p}_{q}
pq?经过小数位移
Δ
p
m
q
k
\Delta \boldsymbol{p}_{m q k}
Δpmqk?之后,需要在特征图上进行插值得到对应特征,即
x
(
p
q
+
Δ
p
m
q
k
)
\boldsymbol{x}\left(\boldsymbol{p}_{q}+\Delta \boldsymbol{p}_{m q k}\right)
x(pq?+Δpmqk?),这里的
Δ
p
m
q
k
\Delta \boldsymbol{p}_{m q k}
Δpmqk?是通过query特征计算
z
q
z_q
zq??得到线性projection得到的。
这里Deformable Attention Module可以用到Encoder的self-attention以及Decoder的cross-attention中,在计算复杂度上有了改进,这个地方有时间可以仔细看看
接着是Multi-scale Deformable Attention Module
假定多尺度特征为:
{
x
l
}
l
=
1
L
\left\{x^{l}\right\}_{l=1}^{L}
{xl}l=1L?,对应的特征图size为$ x^{l} \in \mathbb{R}^{C \times H_{l} \times W_{l}}
,
此
外
,
,此外,
,此外,\hat{\boldsymbol{p}}_{q} \in[0,1]^{2}
表
示
对
于
每
一
个
q
u
e
r
y
元
素
表示对于每一个query元素
表示对于每一个query元素q$?的reference point的归一化坐标。接着多尺度的deformable attention模块可以表示为
MSDeformAttn
?
(
z
q
,
p
^
q
,
{
x
l
}
l
=
1
L
)
=
∑
m
=
1
M
W
m
[
∑
l
=
1
L
∑
k
=
1
K
A
m
l
q
k
?
W
m
′
x
l
(
?
l
(
p
^
q
)
+
Δ
p
m
l
q
k
)
]
\operatorname{MSDeformAttn}\left(\boldsymbol{z}_{q}, \hat{\boldsymbol{p}}_{q},\left\{\boldsymbol{x}^{l}\right\}_{l=1}^{L}\right)=\sum_{m=1}^{M} \boldsymbol{W}_{m}\left[\sum_{l=1}^{L} \sum_{k=1}^{K} A_{m l q k} \cdot \boldsymbol{W}_{m}^{\prime} \boldsymbol{x}^{l}\left(\phi_{l}\left(\hat{\boldsymbol{p}}_{q}\right)+\Delta p_{m l q k}\right)\right]
MSDeformAttn(zq?,p^?q?,{xl}l=1L?)=m=1∑M?Wm?[l=1∑L?k=1∑K?Amlqk??Wm′?xl(?l?(p^?q?)+Δpmlqk?)] 其中
m
m
m表示attention head 的index,
l
l
l表示输入特征图的index,
k
k
k表示key的index,然后
Δ
p
m
l
q
k
?and?
A
m
l
q
k
\Delta \boldsymbol{p}_{m l q k} \text { and } A_{m l q k}
Δpmlqk??and?Amlqk?分别表示第
m
m
m个attention head,第
l
l
l个feature map以及第
k
k
k个采样点的attention weights,并且有
∑
l
=
1
L
∑
k
=
1
K
A
m
l
q
k
=
1
\sum_{l=1}^{L} \sum_{k=1}^{K} A_{m l q k}=1
∑l=1L?∑k=1K?Amlqk?=1,
p
^
q
∈
[
0
,
1
]
2
\hat{\boldsymbol{p}}_{q} \in[0,1]^{2}
p^?q?∈[0,1]2表示归一化的坐标,
?
l
(
p
^
q
)
\phi_{l}\left(\hat{\boldsymbol{p}}_{q}\right)
?l?(p^?q?)表示将reference point rescale到对应的特征图上,这里已经归一化的坐标了,为什么还要rescale呢,这里实际上增加了采样点的选取区间,从多个尺度的特征图上选取采样点。
当
L
=
1
,
K
=
1
,
?and?
W
m
′
∈
R
C
v
×
C
′
L=1, K=1, \text { and } \boldsymbol{W}_{m}^{\prime} \in \mathbb{R}^{C_{v} \times C^{\prime}}
L=1,K=1,?and?Wm′?∈RCv?×C′时,注意力模块会退化成可变形卷积,相比于可变形卷积,仅仅关注single-level的特征,这里的multi-scale deformable attention 关注多尺度,并且相比于Transformer更加高效,可以同Transformer的attention等效。
最后就是Tranformer Encoder和Decorder的设计了
-
Encorder的设计 Encoder中使用multi-scale deformable attention module替换掉了DETR中的attention module,encoder的输入和输出都是具有相同分辨率的多尺度的特征图,将ResNet的
C
3
?
C
6
C_3-C_6
C3??C6?用过来,每一个多尺度特征都是256维度的,没有使用FPN。both query和key元素都是来自多尺度特征图上的pixels,对于每一个pixel,参考点是他自己。同时增加了一个scale-level embedding,记作
e
l
e_l
el???来区分特征level -
Decoder的设计 cross-attention 以及 self-attention 都有,在cross-attention中,key elements 是从encoder中输出的特征。在self-attention中,这里的key elements是从object query中来的,本文提出的deformable attention module是被用来将convolutional feature map看成keys来处理的,因此仅仅替换了decorder的cross-attention部分,decorder中的2维的reference point
p
^
q
\hat{\boldsymbol{p}}_{q}
p^?q??,是通过object querylinera projection之后再接一个sigmoid得到的。由于multi-scale deformable attention module提取的是参考点附近的feature,可以基于reference point预测一个offsets来进一步加快收敛,reference point可以看成是边界框中心点的一个预测。
一些其他的改进内容:
-
Iterative bounding box refinement,构建了一个simple并且effective iterative bounding box refinement机制来改善detection性能,利用之前的预测来调整和改善当前的预测。这块需要好好看看代码,确认是否需要针对旋转框做特殊处理 -
Two-Stage Deformable DETR,本文探索了DETR的变体,以产生region proposal作为第一阶段,生成的region proposal作为对象query输入到decorder进行进一步的refinement,形成一个两阶段的Deformable DETR。这里在第一阶段时,对应每一个特征点位置希望预测一个边界框,然而decorder承受不了这么大的计算量,这里去掉了decorder,构建了一个encorder-only的Deformable DETR用来进行Region Proposal generation,此时每一个pixel 被assigned 一个object query直接用来预测bounding box,得分最高的边界框作为候选区域,并将候选区域用于second stage。
(三) 实验结果
(四) 知识点Notes
关于解决Transformer Attention模块的时间和内存复杂性的方法:
- use pre-defined sparse attention patterns on keys,最直接的方式就是将注意力模式集中在固定的局部窗口,但是这样失去了global information。
- learn data-dependent sparse attention,基于locality sensitive hashing(LSH)将查询和key散列到不同的容器中
- 探索self-attention的low-rank 特性,通过减少key的数量来实现。
目前解决难训练问题的方法主要为:
- 使Attention变得稀疏
- 多尺度特征
- two stage,将region proposal提供到Transformer中,detection 任务应该更多地关注local的信息,
|