视觉跟踪——短期跟踪与长期跟踪的相爱相杀
跟踪有什么难的不就是检测每一帧里的物体然后连起来吗——你要是这么想说明你还没被真实数据虐过。视觉跟踪的任务定义比检测和分割都要脏给你一段视频序列在第一帧里框出目标然后要求你在后续所有帧里持续定位这个目标。听起来简单那你试试目标被遮挡了 50 帧、从视野里完全消失又出现、尺度剧烈变化、外观因为光照和姿态改变而面目全非——这些情况在真实监控视频里每时每刻都在发生。跟踪这个领域分两大派系生成式跟踪和判别式跟踪。早期的生成式跟踪用模板匹配、光流估计、粒子滤波这些经典方法用目标的外观模型在整个图像里搜索最相似的位置。这种方法简单、快速但一旦目标外观变化超过模板的容忍范围立马丢失。2010 年代中后期基于 Siamese Network 的跟踪成了主流。核心思想是用一个孪生网络分别提取模板帧第一帧的目标和搜索帧当前帧的整张图的特征然后计算两者的互相关得到一张响应图响应最高的位置就是目标当前位置。SiamFC是最早的代表作后面SiamRPN引入了 RPN 结构来做更精准的框回归再往后SiamMask甚至把分割也做了不光跟踪框还输出掩膜。这一系列方法速度快、结构简单2018-2020 年间统治了 VOT 竞赛。但 Siamese 方法有个硬伤它只用第一帧作为模板后续帧的外观变化全靠模板和搜索帧的互相关来适应这个适应能力非常有限。如果目标在视频中途转了 90 度、从正面变成了侧面模板特征完全对不上跟踪器就懵了。于是基于 Transformer 的跟踪在 2021 年之后开始爆发。TransT和STARK这类工作直接用 Transformer 来做特征融合和交互让模板帧和搜索帧的特征充分对话而不是简单粗暴地做互相关。后来OSTrack更进一步用 ViT 做 backbone在一张图里同时编码模板和搜索区域通过自注意力机制让两者的信息在网络的每一层互相渗透。这种深度融合的方式确实比 Siamese 的浅层融合要强大得多性能有了明显的跃升。但 Transformer 的代价还是老问题——算力。Siamese 跟踪器能做到实时30 FPSTransformer 跟踪器能做到 10 FPS 就算不错了。在无人机、机器人这类需要高速响应的场景下你选哪个答案不言自明。说完短期跟踪Short-term Tracking目标一直在画面里再聊长期跟踪Long-term Tracking。这活儿更变态——目标可能从视野里消失几分钟甚至几个小时你再出现的时候必须重新找到它。传统的短期跟踪器一旦目标消失就彻底废了因为它在连续帧间失去关联后就没法重新初始化。长期跟踪的解决方案通常是跟踪器 检测器 重新检测模块的组合体。SiamRPN做了这方面的工作但真正把长期跟踪问题定义清楚的还是VOT-LT竞赛和GlobalTrack这类工作。GlobalTrack 直接在每一帧做全局搜索用检测器在全图范围内扫一遍跟上一帧的位置完全没有关系这样目标消失了多久都不影响——但计算量巨大每一帧都要做全图检测实时性就别想了。更聪明的做法是动态更新模板库。维护一个目标的历史外观特征库每一帧的跟踪结果如果置信度高就把当前帧的目标特征加进模板库如果置信度低就触发全局重新检测。这其实就是个记忆机制让模型知道目标在过去可能变成过什么样子。但模板库也有坑——你往里面加外观变化太大的样本模板库会变得模糊反而降低匹配精度加太少又覆盖不了目标的多样性。这里面有一套复杂的更新策略要设计跟搞数据库似的。说到工程落地跟踪最让人崩溃的是评价指标和实际体验严重脱节。论文里报告的 SOTA 精度是某个固定数据集上的平均重叠率但实际部署的时候用户根本不关心平均重叠率——他们只关心两种帧第一次丢失目标的帧和第二次跟踪错的帧。只要丢失一次或者跟错一次整个系统的可信度就崩塌了。跟踪系统不像分类或者检测错了可以单独处理跟踪的误差会累积一帧错后面全错。另外还有一个要命的问题跟踪目标的选择是任意的模型没见过怎么办你第一帧框一个穿蓝色羽绒服的人模型之前训练的时候可能见过成千上万个穿蓝衣服的人但如果框的是一个罕见的粉色吉祥物玩偶模型没见过这种外观那特征匹配就完全靠通用语义了性能大打折扣。这就是任意目标跟踪Generic Object Tracking的困难所在——你没法预知用户要跟踪什么东西。现在有两条技术路线在试图解决这个问题。一条是分割引导的跟踪先做目标分割得到精细的掩膜再基于掩膜区域提取特征让模型不依赖 bounding box 的粗糙信息。另一条是自然语言引导的跟踪用户不光框一个框还输入一句文字描述——那辆蓝色特斯拉后面跟着的黑色本田用多模态对齐来锁定目标比纯视觉要稳定。但这又回到了多模态的老问题推理速度如何保证文本描述和视觉特征对齐的鲁棒性如何最后的最后我要说一个跟踪界心照不宣的秘密——很多声称实时的跟踪器实际跑起来根本达不到宣称的 FPS。因为论文里的速度是在 800x600 的低分辨率视频上测的而真实监控视频是 2K、4K 分辨率的特征图大了好几倍计算量跟着指数级增长。而且很多跟踪器在论文里的速度只算推理时间不算特征提取时间或者后处理时间典型的报喜不报忧。我的结论很明确跟踪是视觉识别里最系统工程的任务之一单靠一个优雅的模型解决不了所有问题必须配合检测器、重检模块、模板更新策略、帧率控制、多尺度搜索等一整套组件才能稳定运行。如果你想入跟踪的坑别只盯着论文里的 SOTA多去看看开源工具里的工程实现那才是真的财富。