LabHub

博客

SOTA 实时视频分析 — 追踪、理解、高效推理

한국어English日本語中文

引言

理解一张静态图像,和理解随时间展开的视频,是两个不同的问题。视频多了一条时间轴,物体会移动、被遮挡、再重新出现。要实时回答「现在正在发生什么」「这个物体在下一帧去了哪里」,不仅要考虑准确度,还必须同时考虑延迟。

本文围绕架构原理,梳理实时视频分析的代表性任务与方法。由于视频的 SOTA 变化也很快,本文不对具体模型的排名或数值下定论,而是聚焦于概念与系列的走向。不确定的最新规格会以泛化的方式处理。

内容大致分四条主线。第一,视频理解可以拆解成哪些任务。第二,解决这些任务的视频模型的架构走向。第三,统一分割与追踪的 SAM 2 系列视角,以及多目标追踪。第四,让实时成为可能的优化与部署的现实情况。这几条主线最终都会收敛到同一个问题上——「在准确度与延迟之间站在哪个位置」。

视频理解的主要任务

视频理解依目标不同分为若干任务,代表性的整理如下。

   视频理解任务地图(概念)

  分类轴:「发生了什么」    --> 行动识别
  时间轴:「何时发生」      --> 时间定位
  追踪轴:「物体去了哪里」  --> 物体追踪 (MOT/SOT)
  像素轴:「边界在哪里」    --> 视频分割
  语言轴:「用语言描述/问答」--> 视频-语言模型

这些任务彼此并不独立。例如在自动驾驶中,追踪、分割与行动预测会在同一个流水线中相互咬合运转。

还有一点值得强调:视频理解不是简单地「把图像理解重复做很多次」。帧与帧之间的关系,也就是时间一致性,才是核心。如果同一个物体在每一帧都被看作不同的东西,追踪就会崩溃;如果掩码在帧间抖动,分割就失去了用处。因此视频模型不仅被要求「准确」,还被同时要求「在时间上保持稳定」。

视频模型的架构走向

从 3D 卷积到时空注意力

早期的视频模型使用3D 卷积,把图像的 2D 卷积扩展到时间轴上,通过同时扫描空间与时间来捕捉运动模式。此后,随着 Transformer 成功应用于图像(视觉 Transformer),时空注意力(spatio-temporal attention)也被引入视频领域。

        视频 Transformer(概念)

  视频 = 帧的序列
    |
  把每一帧切成图块 (空间)
    |
  把帧沿时间拼接 (时间)
    |
  [时空注意力]
     - 空间注意力:单帧内的关系
     - 时间注意力:帧与帧之间的关系
    |
  分类/检测/分割头

时空注意力的难题是计算量。帧数与每帧图块数相乘,注意力的开销会随之增大。用于应对这一点的代表性折中方案如下。

这些折中都是在准确度与速度的取舍之上做出的选择,「最好的」组合会随任务与延迟要求而变化。

时空注意力之所以强大,是因为它能直接学习「相距很远的帧之间的关系」。比如某个行动的起点和终点即便相隔数秒,注意力也能把这两个时刻联系起来看待。这与 3D 卷积主要擅长相邻帧的局部运动形成对比。不过,这种表达力的代价就是计算量,实时系统正是靠前面提到的折中来管理这个代价。这正是视频架构设计的核心张力所在。

视频分割与追踪:SAM 2 系列的视角

如果说 Segment Anything(SAM)在图像分割领域开启了可提示分割(promptable segmentation),那么把这种思路延伸到视频就是很自然的走向。SAM 2 系列可以理解为把「图像的可提示分割」拓展为「视频的可提示分割与追踪」这样一个概念。

其核心思想如下。

     视频提示分割与追踪(概念)

  帧 t=0:用提示(点/框)指定目标 --> 掩码
       |
       v  (把目标表征存入记忆)
  帧 t=1..N:参照记忆传播掩码
       |
  遮挡/再出现:借助记忆重新连接同一目标
       |
  结果:目标掩码在全部帧中保持一致

这里重要的一点是「追踪与分割被绑定为一体」。传统上追踪处理的是框,分割处理的是掩码,而这一系列则以统一的方式提供掩码级别的追踪。不过实时性能、长视频中的稳定性、复杂遮挡情形仍是难题,具体表现会因实现与设置而异。

记忆结构的作用尤其值得强调。物体从画面中短暂消失又回来时,如果没有记忆,模型很容易把它误认为新物体。若记住了过去帧中的目标表征,就能把再次出现的物体重新连接为「当时的那个目标」。这与前面提到的 MOT 中的重识别目的相同,不同之处在于不设单独的重识别特征,而是用统一的记忆来处理。检测、追踪、分割各自发展出来的思路以这种方式在同一个框架内相遇,是近期走向中一个有趣的地方。

多目标追踪(MOT)

同时追踪多个物体的多目标追踪(Multi-Object Tracking, MOT)是实时视频分析的核心一环。MOT 的目标不只是「找到物体」,而是要为每个物体在时间上赋予一致的身份(ID)。第 12 帧中编号为 3 的人和第 400 帧中编号为 3 的人必须是同一个人,才有意义。广泛使用的方法是检测式追踪(tracking-by-detection)

        检测式追踪 (tracking-by-detection)

  每一帧经[检测器] --> 得到当前帧的框
       |
  把过去的轨迹与当前帧的框做[连接(association)]
       - 位置预测:用卡尔曼滤波等估计下一个位置
       - 外观匹配:用重识别(re-ID)特征判定是否同一物体
       |
  同一物体保持轨迹 ID,新物体赋予新 ID
       |
  结果:为每个物体附上一致的 ID,随时间追踪

顺带一提,追踪按目标数量可以分类。单目标追踪(SOT)是跟随用户在第一帧指定的一个目标直到结束的任务,事先不需要知道目标是什么。多目标追踪(MOT)同时处理多个目标,通常会检测并追踪预先定义好的类别(人、车等)中的所有物体。这两个任务的目标与难点不同,本文所讨论的检测式追踪主要是 MOT 的方式。

MOT 的难题是ID 切换(遮挡或交叉时 ID 被错配)与密集场景。良好的检测器、鲁棒的运动模型、具有判别力的重识别特征这三者的组合决定了性能。何种方法「最好」取决于场景密度、相机运动、延迟要求,因此以泛化的方式理解会更稳妥。

MOT 评价指标

与检测不同,MOT 的性能还需要衡量「跟了多久、跟得有多一致」。把代表性指标在概念层面整理如下。

存在一些试图把这几个方面合并成一个数值的综合指标,但没有哪个指标是万能的。像监控这样「不能漏掉」很重要的场景,和像统计这样 ID 一致性很重要的场景,需要关注的指标权重是不同的。

追踪范式的两条分支

追踪大致可以分为两种方式。

基于 Transformer 的追踪可以看作是把 DETR 的集合预测思路延伸到时间轴上的一条走向。它试图以「把上一帧的轨迹查询带入下一帧并更新」这样的方式,把检测与连接绑定为一个统一学习的过程。不过哪种方式更优取决于场景与延迟要求,以系列层面来理解会更稳妥。

行动识别的视角

行动识别是随时间判断「正在发生什么」的任务。与静态图像分类不同,运动本身就是信息。例如「坐下」和「站起来」只看一帧很难区分,但看时间的流动就会变得清晰。

   行动识别的信息来源(概念)

  外观(看到了什么)     --> 物体·场景线索
  运动(如何运动)        --> 光流、帧差
  骨架(关节如何运动)    --> 骨架序列
       |
  结合这些信息,随时间判断「是什么行动」

行动识别被用于监控、体育、康复、人机交互等领域。不过由于真实环境的多样性(相机角度、遮挡、个体差异),基准测试的性能往往不能直接转化为实际场景中的性能。

此外,行动识别常常与前面提到的追踪、分割相结合。做法是先对人进行追踪与分割,得到每个人的区域,再在该区域内识别行动。这样一来,即便在有多个人的场景中,也能分别判断「谁在做什么」。这是一个很好的例子,展示了视频理解的各个部件是如何组装成流水线的。

视频与语言的结合

近期走向的一条主线是把视频与语言连接起来。多模态模型通过对视频编码并与语言模型结合,使得针对视频提问并得到回答这样的交互成为可能。

这些能力使得海量视频无需人工逐一观看,也能被检索、摘要与分析。不过视频帧数多、计算量大,维持长视频的时间上下文也很困难。实务中会用帧采样、关键片段筛选、分层摘要之类的技巧来减轻这一负担。

时间建模的方法

视频理解的核心在于「如何把时间放进模型」。把代表性方式整理如下。

   时间建模方式的谱系(概念)

  简单/轻量 <--------------------> 表达力/重量级
     |                                 |
  帧独立+聚合                        时间注意力
  3D 卷积(局部)                      循环(流式)

  实务:依任务的时间尺度与延迟预算来选择

没有哪种方式无条件占优。短片段的行动分类与长视频的事件理解所需的时间尺度不同,实时流式处理与离线批处理的延迟约束也不同。方式的选择是这些需求的函数。

数据与标注的难点

视频模型的性能高度依赖数据,而视频标注远比图像昂贵。

正因如此,自监督/弱监督学习、合成数据,以及由模型先起草标签、再由人工审核的迭代方式被广泛使用。SAM 系列的可提示分割之所以也作为视频标注工具受到关注,原因就在这里——人只需给出几个提示,模型就能补全其余帧的掩码,从而大幅降低标注成本。

归根结底,数据问题不仅包括「如何训练模型」,还包括「如何高效地制作标签」。好的视频系统往往始于好的标注流水线,而这条流水线本身,也会出现模型(可提示分割、追踪)作为部件嵌入其中的循环结构。

实时推理优化

由于视频每秒会涌入多帧,吞吐量与延迟和准确度同样重要。吞吐量(throughput)是「每秒能处理多少帧」,延迟(latency)是「从一帧输入到结果输出所需的时间」,二者不同。加大批处理规模会提高吞吐量,但可能增加单帧的延迟。在实时应用中,这两者之间的平衡很关键。下面整理确保实时性的代表性策略。

降低计算量

表征与精度优化

流式处理与状态复用

这三条轴线(降低计算量、表征/精度优化、流式处理/状态复用)并不互斥,而是会一起使用。比如用轻量骨干网络降低计算量、用量化降低精度、用状态复用消除冗余,通过叠加多种技巧来确保实时性。不过每种技巧都可能小幅削减准确度,能容忍到什么程度由应用的需求决定。优化从来不是「免费」的,总是要用某样东西去交换。

     实时流水线的取舍(概念)

  准确度  <----------------------->  速度
     |                                 |
  重骨干网络                        轻量骨干网络
  逐帧全处理                        关键帧+插值
  高分辨率                          低分辨率
  全局注意力                        局部/分解注意力
  高精度                            量化

  实务:依目标延迟/准确度组合这些轴线

关键在于没有唯一的正确答案。监控摄像头的实时报警与离线体育分析所要求的延迟与准确度不同,因此最优组合也不同。

应用领域

不同应用对延迟、准确度、鲁棒性的优先级不同,而这种优先级左右着架构与优化的选择。比如自动驾驶对延迟与鲁棒性都要求到极致,而媒体编辑即便耗费时间也希望得到精密的掩码。即便同样叫作「视频分析」,需求也会分化到这种程度。

实务中常遇到的问题

真正运行实时视频系统时,会出现理论上不太显现的问题。

   实时追踪的失败模式(概念)

  遮挡 -----> 轨迹中断 -----> 尝试用重识别重新连接
  模糊 -----> 检测失败 -----> 用跳帧/插值撑过去
  相机移动 -> 运动预测错误 -> 需要背景校正
  密集 -----> ID 切换 -----> 用强外观特征缓解

这些问题与其说是「彻底解决」,不如说是「能缓解到什么程度」的问题。因此实务系统也会同时配备检测并从失败中恢复的逻辑(重新检测触发、基于置信度的丢弃等)。

硬件与部署的视角

实时性不只是模型本身的问题,而是与部署环境一起被决定的。

如果无视部署层面的考量只提升准确度,实际上很容易因为跟不上帧速而变得毫无用处。「准确但慢」的结果与「不那么准确但及时」的结果,哪个更好由应用来决定。

如何读基准测试

阅读视频分析论文数值时,有一些要注意的地方。

如果忽略这些背景,只比较表格里的数字,很容易得出错误的结论。应当始终追问「这个数字是在什么条件下测得的」。

尤其是,「实时」这个表述本身就是相对的。有的应用每秒 5 帧就足够,而另一些应用需要 30 帧以上。而且即便帧率相同,如果处理延迟不断累积,结果也会落后于实际情况。因此当一篇论文声称「实时」时,确认它的标准是否与自己应用的标准一致,是很重要的。

优劣势小结

方式优势局限
3D 卷积擅长捕捉局部运动对长时间依赖相对较弱
时空 Transformer全局关系、长期依赖计算量大(需要取舍)
检测式 MOT模块化、灵活易受 ID 切换、密集场景影响
提示分割/追踪掩码级的统一追踪实时性与长视频稳定性是难题
轻量化/量化确保实时性可能损失准确度

结语

实时视频分析不能只用「准确度」这一个维度来解释。随着时间轴的加入,追踪的一致性、遮挡处理,尤其是延迟时间都会一并牵涉进来。架构靠时空注意力获得表达力,优化靠轻量化与流式处理换取速度,而实务系统正是在这两者之间的取舍中被造出来的。

SAM 2 系列展现出的「用提示指定、在帧间传播」这种思路,正在模糊分割与追踪的边界,重新编排视频理解的各个部件。即便新模型不断涌现,只要理解了任务的结构与取舍的原理,就能更从容地跟上变化。

给实务工作者留下的建议是这样的:设计视频系统时,与其先去寻找「最准确的模型」,不如先确定「我们能容忍多少延迟,又能容忍多少失败(遮挡、模糊、ID 切换)」。这个约束一旦确定,在此之上组合时间建模方式、优化技巧、部署位置的工作就会清晰得多。视频理解的困难大多来自时间与资源的约束,诚实地面对这些约束,才是构建一个好系统的起点。

参考资料

测验

Q1: 行动识别与时间行动定位的区别是什么? 行动识别是在片段或流中分类「是什么行动」。时间定位则进一步在长视频中以区间形式找出该行动「从何时到何时」发生。

Q2: 为什么时空注意力中计算量会成为问题? 因为帧数与每帧的图块数相乘,会使注意力开销增大。为缓解这一点,可以分解空间与时间注意力、减少令牌数,或使用局部注意力。

Q3: SAM 2 系列在视频方面新增的核心概念是什么? 把某一帧中由提示指定的目标掩码传播到后续帧,并用记忆结构在遮挡与再出现的情况下依然连接同一目标。它在掩码层面统一了分割与追踪。

Q4: 检测式追踪(tracking-by-detection)的基本流程是什么? 每一帧用检测器获取框,再通过位置预测(运动模型)与外观匹配(重识别)与过去的轨迹相连接,为同一物体维持一致的 ID。

Q5: MOT 中的 ID 切换是什么? 指在遮挡或物体交叉的情况下,原本轨迹的 ID 被错配给另一个物体的问题,在密集场景与相似外观下尤其容易发生。

Q6: 举出两种为了实时性而降低计算量的方法。 使用轻量骨干网络;只对关键帧做重处理、中间帧轻量插值的帧采样;把计算集中在感兴趣区域等。

Q7: 为什么因果(causal)处理能降低延迟? 因为它不等待未来帧,只用过去与当前信息输出结果。在流式环境中需要即时响应时很有优势。

Q8: 为什么在视频分析中很难断言存在「最优组合」? 因为不同应用对延迟、准确度、鲁棒性的优先级各不相同。监控报警与离线体育分析所要求的取舍不同,因此最优设置也不同。

Q9: 检测式追踪与联合检测·追踪的区别是什么? 检测式追踪是逐帧检测后再单独连接(易于模块化,依赖检测器)。联合检测与追踪则把检测与追踪作为一个模型一起训练,通过跨帧特征传播或轨迹查询把两个过程绑定在一起。

Q10: 为什么运动线索在行动识别中很重要? 因为像「坐下」和「站起来」这样的许多行动,仅看一帧很难区分。一并使用光流之类的运动表征,能捕捉随时间发生的变化,从而更好地区分行动。

Q11: 为什么在实时视频中「准确但慢」的结果会是问题? 因为帧会不断涌入,如果处理速度跟不上帧速率,滞后的结果指向的已经是过去的状况。在监控、自动驾驶这类需要即时性的应用中,及时得到的近似值可能更有用。

Q12: 边缘处理与服务器处理之间的取舍是什么? 边缘(相机附近)在传输延迟与带宽上更有利,但计算资源有限。服务器可以使用更强的模型,但会产生传输延迟。选择取决于应用的延迟要求与资源约束。

评论

还没有评论。

登录后即可发表评论