写在前面
Two-stream pipeline
如图所示,search和template分支是独立两根流线,提取特征后计算互相关信息,也是最常用的,缺点是提取的特征缺乏目标的感知性,对目标-背景的区分能力有限,两个patch之间信息交互度较差
One-stream pipeline
如图所示,单流程的pipeline在特征完成提取前,就进行了信息交互,然后再进行各种互信息的计算,通用的是template与所有计算search的互信息之前,与search所有部分进行交互。有点是对前景和背景的区分能力强,两个patch间的交互程度高。
作者的做法
作者采用了one-stream pipeline的网络结构,在论文中描述道“inherits the merits of
both previous two-stream and one-stream pipelines”同时具有单双流程的结构优点。
其实作者的这幅图并不准确,可能会误导读者,会让读者完全不知道这是怎么做的。
Backbone
首先,我们要知道,作者使用了ViT作为backbone,首先将图片切分出一个个patch,如图
search和template分别经过相同的patch_embedding,分别生成
s
e
a
r
c
h
p
a
t
c
h
=
[
B
a
t
c
h
,
H
×
W
,
C
]
search_{patch} = [Batch, H \times W, C]
searchpatch=[Batch,H×W,C]和
t
e
m
p
l
a
t
e
p
a
t
c
h
=
[
B
a
t
c
h
,
h
×
w
,
C
]
template_{patch} = [Batch, h \times w, C]
templatepatch=[Batch,h×w,C],然后在
d
i
m
=
1
dim=1
dim=1上拼接成
x
=
[
B
a
t
c
h
,
H
×
W
+
h
×
w
,
C
]
x = [Batch, H \times W + h \times w, C]
x=[Batch,H×W+h×w,C], 这个
x
x
x就是送入ViT的
12
12
12层Block的输入,不再单独计算Search和Template了。
patch_size | Block层数 | hidden_dim | MLP size | 参数体量 | |
---|---|---|---|---|---|
vit_base | 16 × 16 16 \times 16 16×16 | 12 | 768 | 3072 | 86M |
vit_large | 16 × 16 16 \times 16 16×16 | 24 | 1024 | 4096 | 307M |
vit_huge | 14 × 14 14 \times 14 14×14 | 32 | 1280 | 5120 | 632M |
如图所示,按照上面调整参数,就是不同版本的ViT
Transformer的Block中的小修改
作者并没有动整体框架,只是从第二个Block开始,把 s o f t m a x ( q ⊗ k ) softmax(q \otimes k) softmax(q⊗k)换成 s o f t m a x _ w i t h _ p o l i c y ( q ⊗ k , p o l i c y ) softmax\_with\_policy(q \otimes k, policy) softmax_with_policy(q⊗k,policy),如图所示,就是把每个循环的输入 x = [ B a t c h , H × W + h × w , C ] x = [Batch, H \times W + h \times w, C] x=[Batch,H×W+h×w,C]进行如图操作,生成policy,然后进行softmax_with_policy。
注意,这里生成的
d
e
c
i
s
i
o
n
=
[
B
a
t
c
h
,
H
×
W
,
C
=
2
]
decision = [Batch, H \times W, C=2]
decision=[Batch,H×W,C=2]
经过两次拼接,形式如图所示的
p
o
l
i
c
y
=
[
B
a
t
c
h
,
H
×
W
+
h
×
w
,
C
=
3
]
policy = [Batch, H \times W + h \times w, C=3]
policy=[Batch,H×W+h×w,C=3],
注意,其中粉色为0,深蓝色为1,也就是decision对角处为1,其他为0.
Head
作者提供了两种head,分别是MLP和CenterHead,MLP不做解释了,CenterHead其实很简单的,就是对特征做三组nn.Sequential,分别产生Score_map_ctr用来做分类、size_map用来预测bbox尺寸 和 offset_map用来预测中心点的位移。
具体如图所示:
网络结构
作者提出的网络结构如图所示
老规矩,这个图给的啥都看不出来,直接上网络结构和代码结构图,大是大了点,但是我还是那么细
这里是无损SVG格式的结构图。