系列文章目录
目标跟踪算法个人理解-KeepTrack篇
目标跟踪算法个人理解-GRM篇
生成范式跟踪有两篇SeqTrack和ARTrack。ARTrack刚刚开源,后续也会总结一下这个工作。
文章全名:SeqTrack: Sequence to Sequence Learning for Visual Object Tracking
原文地址:https://arxiv.org/abs/2304.14394
代码地址:https://github.com/microsoft/videox
项目配置:同OSTrack配置基本一致
OSTrack基础上的改进算法,将视觉跟踪建模为一个序列生成问题,以自回归的方式预测目标边界框。抛弃了设计复杂的头网络,采用encoder-decoder transformer architecture,编码器用ViT提取视觉特征(≈OSTrack),而解码器用因果转换器自回归生成一个边界框值序列。
不讲废话了直接看第三章的方法。
不过相关方法那里作者把跟踪方法总结的很到位,也为自己做的生成式跟踪做了很好的铺垫和介绍。可以仔细读一下,把引到的一些文章学习一下。
SeqTrack的架构,a:左边编码器拿的ViT,右边解码器用的transformer里的。编码器提取视觉特征,解码器利用特征自回归生成边界框序列。b:解码器结构,最下层输入目标序列,先自注意力再与视觉特征做注意力,自回归输出生成目标序列。
Image Representation
编码器输入模板和搜索图像。现有的跟踪器中模板图像的分辨率通常小于搜索图像的分辨率,SeqTrack使用相同的尺寸,发现在模板中添加更多的背景有助于提高跟踪性能(为什么其他工作里使用小尺寸模板图像都解释的是为了减少背景干扰,这玩意感觉一人一个说法?)。 t p , s p ∈ R N × P 2 × 3 t_p, s_p\in\mathbb{R}^{N\times P^2\times3} tp,sp∈RN×P2×3
Sequence Representation
边界框转换为离散序列 [ x , y , w , h ] [ x , y , w , h] [x,y,w,h],将每个连续坐标统一离散为[ 1 , nbins]之间的整数。使用共享词汇表V(4000),V中的每个单词对应一个可学习的嵌入,在训练过程中进行优化。(transformer那篇文章里说的可能更详细)
最终使用一个带softmax的多层感知器,根据输出嵌入对V中的单词进行采样来将嵌入映射回单词。
照着架构提一下需要注意的地方:
3.1 编码器
self.bottleneck = nn.Linear(encoder.num_channels, hidden_dim)
代码中这里打个断点往上一级一级看就能明白具体解码过程(与OSTrack基本一致)
3.2 解码器
4.1 训练
损失函数:通过交叉熵损失最大化target tokens在前一个子序列和输入视频帧上的对数似然。
4.2 推理
引入在线模板更新和窗口惩罚,在推理过程中融合先验知识,进一步提高了模型精度和鲁棒性
TODO:推理部分还没捋完,后续更新