写在最前面
作者采用了One-Stream的框架,pipeline用的是OSTrack的,两者基本相同。
区别在于:
- 使用了3张Template构建Template_list与一张Search构建融合特征
- 使用了2张Search,每张分别进行一次上述过程
- 在Test和Eval中,保存历史预测Box,并根据这个Box裁剪出相应的历史Template,便于后续帧序列的Template采样3张
存在的问题
- search和template图像对之间的采样是稀疏的,不足以充分表达目标的动态变化
- 在test和eval中,search和template之间的匹配是离线的(就是template或者search没有更新),这阻碍了其中互信息的表达
解决方案
- 使用token sequence propagation paradigm(这里的说法让人困惑,操作是在ViT的第3、6、9层block中,把注意力的嵌入向量进行最大值筛选, 把这个筛选的标准当成了token)
- 引入两种token propagation attention mechanisms(token传播的注意力机制)
- 在test或eval中把预测过的bbox存起来,并根据这个裁剪出用于更新的template,存在内存中,便于后面构成template_list,用于更新,如下图
具体方法
sample和template mask生成方法
采样
如图所示,采样2张search和3张template,search是列表输入到网络中,每张search会轮流对应采样的三张template进行预测。
这里是跟OSTrack不同的地方
mask生成
有三种方式,如图所示,作者在代码中设置了三种,实际上只用了第一种
这里是跟OSTrack不同的地方
ce_keep_rate
ce_keep_rate在代码中有两个名字,另一个是keep_ratio_search,作用是在token的注意力中,将生成的embedding抽取topk,然后生成一个
[
B
a
t
c
h
,
H
×
W
×
k
e
e
p
_
r
a
t
i
o
_
s
e
a
r
c
h
,
C
]
[Batch, H\times W \times keep\_ratio\_search, C]
[Batch,H×W×keep_ratio_search,C]的embedding
从这里可以看出, ce_keep_rate的作用就是把search的嵌入向量截断,只选取最大的一部分
什么是CE?
代码中使用了很多CE的前缀,比如,vit_ce、ce_block等,这就是单纯的使用了candidate_elimination模块,所以会加一个ce前缀
pipeline
作者使用了ViT的backbone和CornerHead的预测头,简单地说就是ViT+CornerHead,不一样的地方就是在ViT的第3、6、9层Block中,把Multi-Head-Attention的输出进行了candidate-elimination操作,这里面就是作者提到的token propagation和token的Attention。上图说的就是这个,但是非常不直观,可以看下图
下面是详细pipeline,很细的哦
由于CSDN对图片的限制,只能发普通清晰度的,无损SVG点击这里下载