STARK:Learning Spatio-Temporal Transformer for Visual Tracking论文及代码结构解读

论文地址
代码地址

写在前面

什么是One-stream和Two-stream,参考文章

Two-stream pipeline

如图所示,search和template分支是独立两根流线,提取特征后计算互相关信息,也是最常用的,缺点是提取的特征缺乏目标的感知性,对目标-背景的区分能力有限,两个patch之间信息交互度较差
two-stream

One-stream pipeline

如图所示,单流程的pipeline在特征完成提取前,就进行了信息交互,然后再进行各种互信息的计算,通用的是template与所有计算search的互信息之前,与search所有部分进行交互。有点是对前景和背景的区分能力强,两个patch间的交互程度高。
one-stream

作者的做法

数据采样

作者在一个序列中采样了
“一张 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中是不需要模板更新的

网络结构

frame作者给定了多种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.

代码及网络结构细分图

仔细看,很细的哦
在这里插入图片描述由于图片尺寸受限,这里只能发缩略的了,点击获取高清矢量图

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值