写在前面
什么是One-stream和Two-stream,参考文章
Two-stream pipeline
如图所示,search和template分支是独立两根流线,提取特征后计算互相关信息,也是最常用的,缺点是提取的特征缺乏目标的感知性,对目标-背景的区分能力有限,两个patch之间信息交互度较差
One-stream pipeline
如图所示,单流程的pipeline在特征完成提取前,就进行了信息交互,然后再进行各种互信息的计算,通用的是template与所有计算search的互信息之前,与search所有部分进行交互。有点是对前景和背景的区分能力强,两个patch间的交互程度高。
作者的做法
数据采样
作者在一个序列中采样了
“一张
S
e
a
r
c
h
”和“两张
T
e
m
p
l
a
t
e
”,
“一张Search”和“两张Template”,
“一张Search”和“两张Template”,
经过NestedTensor打包, 送入backbone,之后生成的特征拼接成维度为
[
B
a
t
c
h
,
H
×
W
+
2
×
h
×
w
,
C
]
[Batch, H \times W + 2 \times h \times w, C]
[Batch,H×W+2×h×w,C]的矩阵,用于输送到Encoder-Decoder中。
作者在数据采样中,除了利用增强和将图片处理成相同尺寸之外,还利用crop后的patch和bbox生成了用于输入到Encoder-Decoder的’‘attn_mask’',具体操作如图:
第一张图是未处理的图片的patch,第二张图是经过crop的patch,外面一圈黑色代表pad=0,第三张图就是attn_mask,中间目标部分是黑色代表0, 外面一圈pad部分是白色代表1 。
之所以使用两张模板,原因有二:
- 作者要用动态模板去更新初始模板
- 变化的模板有助于捕捉目标的外表变化
注意,这里的模板更新是用于训练的,在eval和test中是不需要模板更新的
网络结构
作者给定了多种backbone,但是代码中有几处错误需要修改,不然会报错
# Stark-main/lib/models/stark/backbone_X.py中的61行处
# 这里没有给deit的代码接口,要么注释掉,要么自己把deit补全
model = deit(img_sz, pretrained=is_main_process(), model_name=model_name, ckpt_name=ckpt_name)
第二个是
# Stark-main/lib/models/stark/backbone_X.py中的99行处
# 作者没有给出build_subnet函数接口,注释掉
self.body = build_subnet(path_backbone, ops)
数据:一张Search和两张Template经过backbone后,格式为一张
[
B
a
t
c
h
,
H
×
W
,
C
]
[Batch, H \times W , C]
[Batch,H×W,C]和两张
[
B
a
t
c
h
,
h
×
w
,
C
]
[Batch, h \times w, C]
[Batch,h×w,C] ,在
d
i
m
=
1
dim=1
dim=1上拼接成:
[
B
a
t
c
h
,
H
×
W
+
2
×
h
×
w
,
C
]
[Batch, H \times W + 2 \times h \times w, C]
[Batch,H×W+2×h×w,C] 然后送入6层Encoder和6层Decoder。
Encoder和Decoder经过上图运算后,送入CornerHead
选择CornerHead和"L1与GIOU损失"的原因:
As pointed out by recent works [7, 43], jointly learning of localization and classification may cause sub-optimal solutions for both tasks, and it is helpful to decouple localization and classification.
论文7、43指出,位置和分类在一起学会导致两个任务都是次优的,且是有助于解耦定位和分类的
因此,作者在用了CornerHead输出predict_box后,用Giou和L1两种损失分别对“predict_box”和“gt_box”计算两种损失,然后按照权重求和。
[7] Bowen Cheng, Yunchao Wei, Honghui Shi, Rogerio Feris, Jinjun Xiong, and Thomas Huang. Revisiting rcnn: On awakening the classification power of faster rcnn. In ECCV, 2018.
[43] Guanglu Song, Yu Liu, and Xiaogang Wang. Revisiting the sibling head in object detector. In CVPR, 2020.
代码及网络结构细分图
仔细看,很细的哦
由于图片尺寸受限,这里只能发缩略的了,点击获取高清矢量图