PS:好久没写csdn了,比较懒,临近过年了提前祝各位读者新年快乐。 (新年玩嗨了,都忘续写了,惭愧惭愧),新年已过,祝各位龙年吉祥。
偶然碰到了这篇论文,觉得是一种很新颖的架构,所以拿过来分享下。
(上一个觉得很新颖的架构是SeqTrack,但又觉得只是把输入和输出变一变又太普通了,所以没有写相关论文精读笔记,如有需要可以留言)
今天分享的论文是ARTrack:Autoregressive Visual Tracking (自回归视觉跟踪),字越少,论文越“狠”。
GitHub网址:https://github.com/MIV-XJTU/ARTrack
单目标跟踪的相关背景就不详细展开。
目录
文章最主要的创新点
将跟踪视为坐标序列解释任务,通过学习一个简单的端到端模型对轨迹序列变化进行建模,以保持对目标的跨帧跟踪
以往传统的SOT的想法:通常将跟踪视为每帧模板匹配问题,进而忽略了视频帧之间的时序依赖性。
前言/概述
ARTrack将跟踪视为一项坐标序列解释任务,逐步估计物体轨迹,其中当前估计是由先前的状态引起的,进而影响子序列。
这种时间自回归方法对轨迹的顺序演化进行建模,以保持跨帧跟踪对象,使其优于现有的仅考虑每帧定位精度的基于模板匹配的跟踪器。ARTrack简单直接,省去了后处理。
图片分析:
-
template和search(t时刻) 与之前的操作步骤是一样的,变为patch embedding送入编码器,提取特征,特征交互。
-
search图片中多个虚影表示先前的状态,t时刻表示当前状态。先前的状态经过一些处理作为command token 进入到自回归的解码器,影响当前状态(t随时间增加以此往复)。
-
输出方面,和seqTrack一致, 直接回归目标框的两个点(左上右下)。
传统跟踪中的问题(未考虑帧关系)
- 传统的跟踪方法做的是每帧的模板匹配,从而忽略了帧之间的连续性。
- 某些算法中涉及的模板更新和后处理技术过于复杂,可能需要单独的训练(e.g. mixformer中的模板更新)和推理,这会损害简单的端到端框架。
- 和1问题差不多,目标跟踪强调在整个序列中保持定位精度,而传统的跟踪方法旨在每帧中优先考虑即时定位精度,导致训练和推理之间的客观不匹配。(作者认为我们更应该看重整个跟踪的流程、序列。而不是过于关注每帧的定位。全局最优≠每时刻最优)
本文的改进
把视觉跟踪作为一个连续的坐标解释任务,以条件概率的形式表述:
在t时,通过前N个时刻, command token , Z ,X_t 来预测t时刻结果的概率。
作者简称这个公式为AR(N)
C:图片里的command token
Z: template 模板Z也可以在每个时间步长使用更新机制[13,56]进行更新,或者简单地作为初始机制[40,64]
X_t : t时刻的search
Y_t t时刻预测的结果
特别 的 AR(0) =
此时不以先前的状态为条件
最重要的三大组成
Sequence Construction from Object Trajectory
Tokenization(标志化)
t时刻的预测包含4个值 。 tokenization的思想是,将这些值缩放到 [1,n_bins]范围内的整数(这里有点参照量化的思想,通过压缩的方法,减少计算量, 比如图片大小 256*256,要把结果压缩到[1,16] 就是把所有的像素位置压缩了16倍, 可想此时的的精确度会挺低的,因为原来(256)预测(0–15) 都对应[1,16]中的1。)。
Trajectory coordinate mapping(轨迹坐标映射)
主要讲了坐标映射的关系----------大多数跟踪器裁剪搜索区域以降低计算成本,导致了坐标的映射关系变得略微复杂,最终预测的位置是相对于裁剪的搜索区域的坐标,而非原图坐标。在本文的方法中,作者将前面的框坐标缓存在全局坐标系中𝑁 帧,并在裁剪搜索区域之后将它们映射到当前坐标系。特别的,如果我们使用全帧进行搜索,则不再需要此坐标映射步骤。
可以简单理解为:裁剪中检测到物体的相对坐标+ 裁剪位置的绝对坐标(绝对坐标作者在此进行了缓存)
个人感觉:这一步骤的意义不是很大,只是减少了一个操作步骤,对于预测的4个值尽量简化了后处理的复杂性
Representation range of vocabulary(词汇的表示范围)
表示范围可以对应于Tokenization中 [1, n_bins] 基于搜索区域的大小来设置词汇表的表示范围,但是由于对象的快速移动,先前的轨迹序列有时可能延伸到搜索区域的边界之外。为此,我们将表示范围扩展为搜索区域范围的倍数
(例如,如果搜索区域范围为[0.0,1.0],我们将其扩展为[-0.5,1.5])
图例:
分析图片:
- 裁剪搜索区域降低计算成本,发现这里裁剪的应该是白色的范围 对应词汇表应该是 0—400,即这里 n_bins是400。
- 根据representation range of vocabulary中所述,这里进行了搜索区域拓展, 拉伸到了-200 ,600(即绿色区域),而不在这些范围内的物体会被掩码(预测结果4个值中墨绿色背景的颜色)即丢弃(看t-3 t+2时刻,对于边界外的x坐标,则取对应的最大值和最小值)。
Network Architecture
下面来详细讲下里面的网络架构,可以发现包含Encoder 和Decoder
Encoder(编码器)
同OStrack中的VIT编码器进行视觉特征编码。模板和搜索图像首先被分割成补丁,进行平坦化和投影,以生成一系列标记嵌入。然后,我们添加带有位置和身份嵌入的模板和搜索标记,将它们连接并输入到普通的ViT主干中,以对视觉特征进行编码。
Decoder(解码器)笔者对于解耦的地方还是有点疑惑
编码器底部输入为历史坐标 token(时空提示) 和一个 cmd 命令token,侧边输入(红色Z和黄色X_t)图像编码特征进行交叉注意力操作。
:之前的坐标标记,用作时空提示,将前N帧的轨迹传播到后续帧中
C:命令标记,提供轨迹建议
Z:模板特征
X_t:搜索区域特征
命令标记C提供了一个轨迹建议,然后将模板特征 Z与搜索区域特征X_t相匹配,以获得更准确的坐标预测Y_t
解码器优点:
这种简单的解码方法消除了现代视觉跟踪器架构中的复杂性和定制,例如定位头和后处理,因为坐标可以立即从共享词汇中去除。
具体的:自注意(具有因果掩码)以传达时空信息。交叉注意力将运动线索与视觉线索相结合,从而做出最终预测。在每个解码器层中交替地执行这两个操作以混合这两种嵌入。
优化点:解耦编解码器
作者为了提高效率,进行如下步骤:将自我关注层和交叉关注层变为解耦(相互独立的),并分别堆叠。这样,可以并行地对视觉特征进行交叉关注,这是解码器中最耗时的计算。(这一小段对于笔者来说不是很懂,)
【左图:Masked Self-attention 和Cross-attention是一起执行的;; 右图:先执行Masked Sefl-attention 得到当前预测坐标值,再通过Cross-attention 修正当前预测坐标值】
Training and Inference
Training
再次,着重关注其损失函数
通过视频序列进行学习: 利用softmax交叉熵损失函数使令牌序列的对数似然最大。
在启动时(t≤N),缓存的时空提示 由初始的Y1填充。随着t的增加,得到新的Yt,并对缓存的时空提示进行循环替换,用新的预测再进行更新。
仅仅上面这一个损失函数显然不够,作者还引入了 SIoU 损失来更好地测量预测边界框和地面实况边界框之间的空间相关性。
Inference
从模型预测的结果进行argmax(选择最大可能性下标的像素点)采样。 (下面涉及NLP里面的知识,结束符令牌)不需要用额外的EOS令牌来结束序列预测,因为在我们的问题中序列长度是固定的。在获得离散的标记后,作者对结果进行去量化以获得连续的坐标。
效果
总结
-
本文的思想非常的好,收获最大的点/最创新的点:跟踪视为一项坐标序列解释任务,逐步估计物体轨迹。让模型开始总整体的角度去看待物体的轨迹。
-
真要复现还是很耗时的(图源于作者github的issue)
推理速度目前只开源了26fps, 45fps没开源(区别就在于解码器中的解耦的操作,具体不是很懂)。
额外补充
官方的复现log文件没有,本人通过邮箱与作者取得联系(作者邮箱:yfbai@stu.xjtu.edu.cn),得到了几个训练期间的log文件,有需要的可以留言。
有一篇大佬的博客讲ARTrack代码方面讲的很透彻,令我启发很大,在此也推荐下:https://blog.csdn.net/laizi_laizi/article/details/134260221
欢迎指正
因为本文主要是本人用来做的笔记,顺便进行知识巩固。如果本文对你有所帮助,那么本博客的目的就已经超额完成了。
本人英语水平、阅读论文能力、读写代码能力较为有限。有错误,恳请大佬指正,感谢。
欢迎交流
邮箱:refreshmentccoffee@gmail.com