写在前面
OSTrack和ODTrack代码结构和内容基本一致,主要是采样方法有所区别
问题在哪?
- Two-Stream框架提取的特征,对目标的敏感度不高。其提取的特征是在离线训练后确定的,因此Template和Search区域之间没有交互。同时,由于Target是在不断变化的,所以Two-Stream对前景和背景的区分能力是有限的。
- Two-Stream大致就是Template和Search的Feature Map经过特征融合等操作之后,送入Head,这样的过程会浪费算力。
作者贡献
- 修改ViT作为Backbone,实现One-Stream的框架;
- 提出Candidate-Elimination模块,在Embedding中筛选Topk的值,消除无信息的背景信息,加强有信息的前景信息;
- 在Patch-Embedding阶段进行特征早融合;
具体方法
sample和ce_template_mask生成方法
Search、Template和ce_template_mask各采样一张,这里没什么难度的。
主要是ce_template_mask生成,在OSTrack中,作者使用的是
C
T
R
_
P
O
I
N
T
CTR\_POINT
CTR_POINT模式,说人话就是,如果以template的Feature为size生成的
12
×
12
12 \times 12
12×12mask为全0矩阵,而中心点处
2
×
2
2 \times 2
2×2的位置为1,如图所示
不同于ODTrack,用的是
G
T
_
B
O
X
GT\_BOX
GT_BOX模式,如上上张图中的第一个mask那般。
ce_keep_rate
ce_keep_rate在代码中有两个名字,另一个是keep_ratio_search,作用是在token的注意力中,将生成的embedding抽取topk,然后生成一个
[
B
a
t
c
h
,
H
×
W
×
c
e
_
k
e
e
p
_
r
a
t
e
,
C
]
[Batch, H \times W \times ce \_ keep \_ rate, C]
[Batch,H×W×ce_keep_rate,C]的embedding
从这里可以看出, ce_keep_rate的作用就是把search的嵌入向量截断,只选取最大的一部分
什么是CE?
代码中使用了很多CE的前缀,比如,vit_ce、ce_block等,这就是单纯的使用了candidate_elimination模块,所以会加一个ce前缀
pipeline
如图,看起来和ODTrack几乎一样,但是确实一样,就是Template和Search的数量不同。
作者使用的是ViT作为backbone和CornerHead作为检测头
由于CSDN的图片尺寸限制,这里是压缩图,将就看一下,如果需要无损的svg图,点击下载