- 引言
- 视频理解的主要任务
- 视频模型的架构走向
- 视频分割与追踪:SAM 2 系列的视角
- 多目标追踪(MOT)
- 行动识别的视角
- 视频与语言的结合
- 时间建模的方法
- 数据与标注的难点
- 实时推理优化
- 应用领域
- 实务中常遇到的问题
- 硬件与部署的视角
- 如何读基准测试
- 优劣势小结
- 结语
- 参考资料
- 测验
引言
理解一张静态图像,和理解随时间展开的视频,是两个不同的问题。视频多了一条时间轴,物体会移动、被遮挡、再重新出现。要实时回答「现在正在发生什么」「这个物体在下一帧去了哪里」,不仅要考虑准确度,还必须同时考虑延迟。
本文围绕架构原理,梳理实时视频分析的代表性任务与方法。由于视频的 SOTA 变化也很快,本文不对具体模型的排名或数值下定论,而是聚焦于概念与系列的走向。不确定的最新规格会以泛化的方式处理。
内容大致分四条主线。第一,视频理解可以拆解成哪些任务。第二,解决这些任务的视频模型的架构走向。第三,统一分割与追踪的 SAM 2 系列视角,以及多目标追踪。第四,让实时成为可能的优化与部署的现实情况。这几条主线最终都会收敛到同一个问题上——「在准确度与延迟之间站在哪个位置」。
视频理解的主要任务
视频理解依目标不同分为若干任务,代表性的整理如下。
- 行动识别(action recognition):在短片段或流中分类「发生了什么行动」,赋予走路、跑步、拿取物品之类的标签。
- 时间行动定位(temporal action localization):在长视频中,以区间形式找出「某个行动从何时开始到何时结束」。
- 物体追踪(object tracking):跨帧持续跟随特定物体,分为单目标追踪与多目标追踪。
- 时间/视频分割(video segmentation):让物体的像素掩码在多帧之间保持一致,是图像分割在时间轴上的延伸。
- 视频问答与字幕生成:用语言描述视频内容或回答相关问题,属于多模态模型的领域。
视频理解任务地图(概念)
分类轴:「发生了什么」 --> 行动识别
时间轴:「何时发生」 --> 时间定位
追踪轴:「物体去了哪里」 --> 物体追踪 (MOT/SOT)
像素轴:「边界在哪里」 --> 视频分割
语言轴:「用语言描述/问答」--> 视频-语言模型
这些任务彼此并不独立。例如在自动驾驶中,追踪、分割与行动预测会在同一个流水线中相互咬合运转。
还有一点值得强调:视频理解不是简单地「把图像理解重复做很多次」。帧与帧之间的关系,也就是时间一致性,才是核心。如果同一个物体在每一帧都被看作不同的东西,追踪就会崩溃;如果掩码在帧间抖动,分割就失去了用处。因此视频模型不仅被要求「准确」,还被同时要求「在时间上保持稳定」。
视频模型的架构走向
从 3D 卷积到时空注意力
早期的视频模型使用3D 卷积,把图像的 2D 卷积扩展到时间轴上,通过同时扫描空间与时间来捕捉运动模式。此后,随着 Transformer 成功应用于图像(视觉 Transformer),时空注意力(spatio-temporal attention)也被引入视频领域。
视频 Transformer(概念)
视频 = 帧的序列
|
把每一帧切成图块 (空间)
|
把帧沿时间拼接 (时间)
|
[时空注意力]
- 空间注意力:单帧内的关系
- 时间注意力:帧与帧之间的关系
|
分类/检测/分割头
时空注意力的难题是计算量。帧数与每帧图块数相乘,注意力的开销会随之增大。用于应对这一点的代表性折中方案如下。
- 分解注意力(factorized attention):把空间注意力与时间注意力分开计算,把乘法级的开销降为加法级。
- 令牌缩减与采样:减少不重要的令牌,或对帧进行稀疏采样。
- 窗口/局部注意力:把注意力限制在局部范围内,而非全局。
这些折中都是在准确度与速度的取舍之上做出的选择,「最好的」组合会随任务与延迟要求而变化。
时空注意力之所以强大,是因为它能直接学习「相距很远的帧之间的关系」。比如某个行动的起点和终点即便相隔数秒,注意力也能把这两个时刻联系起来看待。这与 3D 卷积主要擅长相邻帧的局部运动形成对比。不过,这种表达力的代价就是计算量,实时系统正是靠前面提到的折中来管理这个代价。这正是视频架构设计的核心张力所在。
视频分割与追踪:SAM 2 系列的视角
如果说 Segment Anything(SAM)在图像分割领域开启了可提示分割(promptable segmentation),那么把这种思路延伸到视频就是很自然的走向。SAM 2 系列可以理解为把「图像的可提示分割」拓展为「视频的可提示分割与追踪」这样一个概念。
其核心思想如下。
- 在某一帧中用点、框之类的提示指定目标后,模型会把该目标的掩码在后续帧中传播(propagate)。
- 在帧与帧之间设置携带过去信息的记忆(memory)结构,使物体即便短暂被遮挡后再次出现,也能被连接为同一目标。
- 以流式方式依次处理帧,力求能够处理长视频的结构。
视频提示分割与追踪(概念)
帧 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,随时间追踪
- 位置预测:用卡尔曼滤波之类的运动模型预测下一帧的位置,缩小候选范围。
- 连接(association):把预测位置与检测到的框配对,常用匈牙利算法之类的分配方法。
- 重识别(re-ID):比较外观特征,把短暂遮挡后再出现的物体接续为相同 ID。
顺带一提,追踪按目标数量可以分类。单目标追踪(SOT)是跟随用户在第一帧指定的一个目标直到结束的任务,事先不需要知道目标是什么。多目标追踪(MOT)同时处理多个目标,通常会检测并追踪预先定义好的类别(人、车等)中的所有物体。这两个任务的目标与难点不同,本文所讨论的检测式追踪主要是 MOT 的方式。
MOT 的难题是ID 切换(遮挡或交叉时 ID 被错配)与密集场景。良好的检测器、鲁棒的运动模型、具有判别力的重识别特征这三者的组合决定了性能。何种方法「最好」取决于场景密度、相机运动、延迟要求,因此以泛化的方式理解会更稳妥。
MOT 评价指标
与检测不同,MOT 的性能还需要衡量「跟了多久、跟得有多一致」。把代表性指标在概念层面整理如下。
- 准确的定位/检测:每一帧是否很好地找到物体并确定其位置。
- ID 一致性:是否长期为同一物体维持相同 ID,ID 切换越少越好。
- 关联质量:是否很好地跨帧配对了预测轨迹与真实轨迹。
存在一些试图把这几个方面合并成一个数值的综合指标,但没有哪个指标是万能的。像监控这样「不能漏掉」很重要的场景,和像统计这样 ID 一致性很重要的场景,需要关注的指标权重是不同的。
追踪范式的两条分支
追踪大致可以分为两种方式。
- 检测式追踪(tracking-by-detection):前面说明过的方式,先逐帧检测再连接。高度依赖检测器性能,容易模块化。
- 联合检测与追踪(joint detection and tracking):把检测与追踪作为一个模型一起训练。有的方法直接在帧间传播特征,也有用 Transformer 的查询来表示轨迹的方法。
基于 Transformer 的追踪可以看作是把 DETR 的集合预测思路延伸到时间轴上的一条走向。它试图以「把上一帧的轨迹查询带入下一帧并更新」这样的方式,把检测与连接绑定为一个统一学习的过程。不过哪种方式更优取决于场景与延迟要求,以系列层面来理解会更稳妥。
行动识别的视角
行动识别是随时间判断「正在发生什么」的任务。与静态图像分类不同,运动本身就是信息。例如「坐下」和「站起来」只看一帧很难区分,但看时间的流动就会变得清晰。
- 运动线索:一并使用光流(optical flow)之类的运动表征,能更好地区分行动。早期模型有的会把外观和运动作为独立的流分别处理。
- 时间跨度:短动作(挥手)与长动作(做饭)所需的时间窗口不同,模型必须能够处理各种不同的时间尺度。
- 基于骨架的行动识别:也有提取人体关节(骨架)并根据其运动来分类行动的方法,优点是对背景、光照变化不那么敏感。
行动识别的信息来源(概念)
外观(看到了什么) --> 物体·场景线索
运动(如何运动) --> 光流、帧差
骨架(关节如何运动) --> 骨架序列
|
结合这些信息,随时间判断「是什么行动」
行动识别被用于监控、体育、康复、人机交互等领域。不过由于真实环境的多样性(相机角度、遮挡、个体差异),基准测试的性能往往不能直接转化为实际场景中的性能。
此外,行动识别常常与前面提到的追踪、分割相结合。做法是先对人进行追踪与分割,得到每个人的区域,再在该区域内识别行动。这样一来,即便在有多个人的场景中,也能分别判断「谁在做什么」。这是一个很好的例子,展示了视频理解的各个部件是如何组装成流水线的。
视频与语言的结合
近期走向的一条主线是把视频与语言连接起来。多模态模型通过对视频编码并与语言模型结合,使得针对视频提问并得到回答这样的交互成为可能。
- 视频字幕生成:用句子描述视频内容。
- 视频问答:回答「视频中的人拿起了什么?」这类问题。
- 时间定位(temporal grounding):用语言找出「扔球的那一瞬间」这样的特定时刻。
- 行动预测与理由推理:也有一些尝试去推理接下来会发生什么、为什么做出了那样的行动,不过这仍然是非常困难的任务。
- 长视频摘要:把数十分钟以上的视频提炼成要点摘要,维持时间上下文是关键所在。
这些能力使得海量视频无需人工逐一观看,也能被检索、摘要与分析。不过视频帧数多、计算量大,维持长视频的时间上下文也很困难。实务中会用帧采样、关键片段筛选、分层摘要之类的技巧来减轻这一负担。
时间建模的方法
视频理解的核心在于「如何把时间放进模型」。把代表性方式整理如下。
- 帧独立 + 后聚合:分别处理每一帧,再把结果在时间上汇总。简单,但可能错过帧间的细微运动。
- 3D 卷积:同时扫描空间与时间,直接捕捉局部运动,对长时间依赖相对较弱。
- 循环(recurrent)结构:逐帧更新状态,延续时间信息。对流式处理很自然,但很长的依赖关系较难处理。
- 时间注意力:用注意力直接学习帧与帧之间的关系,对长期依赖较强,但计算量大。
时间建模方式的谱系(概念)
简单/轻量 <--------------------> 表达力/重量级
| |
帧独立+聚合 时间注意力
3D 卷积(局部) 循环(流式)
实务:依任务的时间尺度与延迟预算来选择
没有哪种方式无条件占优。短片段的行动分类与长视频的事件理解所需的时间尺度不同,实时流式处理与离线批处理的延迟约束也不同。方式的选择是这些需求的函数。
数据与标注的难点
视频模型的性能高度依赖数据,而视频标注远比图像昂贵。
- 帧数膨胀:1 秒钟就有几十帧,即便是短视频,需要标注的帧数也非常多。
- 时间标签的模糊性:「行动从何时开始、何时结束」的边界,不同的人判断会不同。
- 追踪标签的劳动密集性:为每个物体跨帧维持 ID 与掩码来标注,非常耗费人力。
正因如此,自监督/弱监督学习、合成数据,以及由模型先起草标签、再由人工审核的迭代方式被广泛使用。SAM 系列的可提示分割之所以也作为视频标注工具受到关注,原因就在这里——人只需给出几个提示,模型就能补全其余帧的掩码,从而大幅降低标注成本。
归根结底,数据问题不仅包括「如何训练模型」,还包括「如何高效地制作标签」。好的视频系统往往始于好的标注流水线,而这条流水线本身,也会出现模型(可提示分割、追踪)作为部件嵌入其中的循环结构。
实时推理优化
由于视频每秒会涌入多帧,吞吐量与延迟和准确度同样重要。吞吐量(throughput)是「每秒能处理多少帧」,延迟(latency)是「从一帧输入到结果输出所需的时间」,二者不同。加大批处理规模会提高吞吐量,但可能增加单帧的延迟。在实时应用中,这两者之间的平衡很关键。下面整理确保实时性的代表性策略。
降低计算量
- 轻量骨干网络:用计算量更小的骨干网络与高效的特征融合,降低每帧的开销。
- 帧采样:不对所有帧都做重处理,只对关键帧做重处理,中间帧用轻量方式估计或插值。
- 感兴趣区域处理:不处理整幅画面,而是把计算集中在可能存在物体的区域。
- 级联处理:先用轻量模型快速筛选,只在可疑情况下才调用重模型,以降低平均开销。
表征与精度优化
- 量化(quantization):降低权重、激活值的精度,提升吞吐量并减少内存占用。
- 知识蒸馏(distillation):把大模型的知识迁移到小模型,使小模型能发挥更好的性能。
- 剪枝(pruning):去除重要性较低的连接与通道,让模型更轻量。
流式处理与状态复用
- 因果处理(causal processing):不等待未来帧,只用过去与当前信息输出,以降低延迟。
- 状态复用:把前一帧的特征、记忆复用到下一帧的计算中,避免重复运算。
这三条轴线(降低计算量、表征/精度优化、流式处理/状态复用)并不互斥,而是会一起使用。比如用轻量骨干网络降低计算量、用量化降低精度、用状态复用消除冗余,通过叠加多种技巧来确保实时性。不过每种技巧都可能小幅削减准确度,能容忍到什么程度由应用的需求决定。优化从来不是「免费」的,总是要用某样东西去交换。
实时流水线的取舍(概念)
准确度 <-----------------------> 速度
| |
重骨干网络 轻量骨干网络
逐帧全处理 关键帧+插值
高分辨率 低分辨率
全局注意力 局部/分解注意力
高精度 量化
实务:依目标延迟/准确度组合这些轴线
关键在于没有唯一的正确答案。监控摄像头的实时报警与离线体育分析所要求的延迟与准确度不同,因此最优组合也不同。
应用领域
- 监控与安保:实时入侵检测、异常行为检测、人员车辆计数。延迟要短,误报管理很重要,同时处理多路摄像头的规模问题也不小。
- 体育分析:球员、球的追踪,战术分析,自动生成精彩集锦。密集、快速运动、遮挡是难点,尤其是同一队服球员之间 ID 的维持格外棘手。
- 自动驾驶与机器人:对周围物体的追踪与未来轨迹预测直接关系到安全,实时性与鲁棒性是必需的,即便在罕见(异常)场景下也不能崩溃。
- 媒体与编辑:从视频中把特定物体抠成掩码用于编辑或替换背景,会用到可提示分割与追踪,这里精度与一致性优先于实时性。
- 医疗与行为分析:康复动作评估、手术视频分析等需要细致的时间性行动理解,准确性与可解释性很重要。
不同应用对延迟、准确度、鲁棒性的优先级不同,而这种优先级左右着架构与优化的选择。比如自动驾驶对延迟与鲁棒性都要求到极致,而媒体编辑即便耗费时间也希望得到精密的掩码。即便同样叫作「视频分析」,需求也会分化到这种程度。
实务中常遇到的问题
真正运行实时视频系统时,会出现理论上不太显现的问题。
- 遮挡与再出现:物体消失在另一物体后面又出现时,追踪很容易中断,记忆与重识别能缓解,但并不能彻底解决。
- 运动模糊与低照度:在快速运动或昏暗环境中,检测与追踪的质量会急剧下降。
- 相机移动:移动的相机(无人机、车辆)会让背景本身也在流动,使运动模型变得困难。
- 密集与相似外观:相似外观的物体很多时(人群、相同队服),ID 切换会频繁发生。
- 漂移:误差会跨帧累积,追踪会逐渐偏移,需要周期性地重新检测来校正。
实时追踪的失败模式(概念)
遮挡 -----> 轨迹中断 -----> 尝试用重识别重新连接
模糊 -----> 检测失败 -----> 用跳帧/插值撑过去
相机移动 -> 运动预测错误 -> 需要背景校正
密集 -----> ID 切换 -----> 用强外观特征缓解
这些问题与其说是「彻底解决」,不如说是「能缓解到什么程度」的问题。因此实务系统也会同时配备检测并从失败中恢复的逻辑(重新检测触发、基于置信度的丢弃等)。
硬件与部署的视角
实时性不只是模型本身的问题,而是与部署环境一起被决定的。
- 边缘 vs 服务器:在相机附近(边缘)处理,延迟与带宽上更有利,但计算资源有限;送到服务器可以使用更强的模型,但会产生传输延迟。
- 加速器的利用:针对 GPU、专用加速器所做的优化(算子融合、批处理、精度调节)会大幅改变吞吐量。
- 流水线并行化:把解码、预处理、推理、后处理以流水线方式重叠,提高吞吐量。
- 输入流管理:同时处理多路摄像头时,需要丢帧与优先级策略。
如果无视部署层面的考量只提升准确度,实际上很容易因为跟不上帧速而变得毫无用处。「准确但慢」的结果与「不那么准确但及时」的结果,哪个更好由应用来决定。
如何读基准测试
阅读视频分析论文数值时,有一些要注意的地方。
- 要同时看延迟:不能只看「准确度 X%」就下判断,那个准确度是在什么帧率、分辨率、硬件下得到的,直接决定了实时性。
- 数据集特性:要确认基准测试所设定的场景(城市道路、室内、体育等)与自己的应用有多相似。
- 评价条件:是在线(流式)评价还是离线(看完整段视频后)评价,难度会不同。能看到未来帧的话,通常会更容易。
如果忽略这些背景,只比较表格里的数字,很容易得出错误的结论。应当始终追问「这个数字是在什么条件下测得的」。
尤其是,「实时」这个表述本身就是相对的。有的应用每秒 5 帧就足够,而另一些应用需要 30 帧以上。而且即便帧率相同,如果处理延迟不断累积,结果也会落后于实际情况。因此当一篇论文声称「实时」时,确认它的标准是否与自己应用的标准一致,是很重要的。
优劣势小结
| 方式 | 优势 | 局限 |
|---|---|---|
| 3D 卷积 | 擅长捕捉局部运动 | 对长时间依赖相对较弱 |
| 时空 Transformer | 全局关系、长期依赖 | 计算量大(需要取舍) |
| 检测式 MOT | 模块化、灵活 | 易受 ID 切换、密集场景影响 |
| 提示分割/追踪 | 掩码级的统一追踪 | 实时性与长视频稳定性是难题 |
| 轻量化/量化 | 确保实时性 | 可能损失准确度 |
结语
实时视频分析不能只用「准确度」这一个维度来解释。随着时间轴的加入,追踪的一致性、遮挡处理,尤其是延迟时间都会一并牵涉进来。架构靠时空注意力获得表达力,优化靠轻量化与流式处理换取速度,而实务系统正是在这两者之间的取舍中被造出来的。
SAM 2 系列展现出的「用提示指定、在帧间传播」这种思路,正在模糊分割与追踪的边界,重新编排视频理解的各个部件。即便新模型不断涌现,只要理解了任务的结构与取舍的原理,就能更从容地跟上变化。
给实务工作者留下的建议是这样的:设计视频系统时,与其先去寻找「最准确的模型」,不如先确定「我们能容忍多少延迟,又能容忍多少失败(遮挡、模糊、ID 切换)」。这个约束一旦确定,在此之上组合时间建模方式、优化技巧、部署位置的工作就会清晰得多。视频理解的困难大多来自时间与资源的约束,诚实地面对这些约束,才是构建一个好系统的起点。
参考资料
- Segment Anything 论文(图像 SAM):arxiv.org/abs/2304.02643
- Segment Anything 官方页面:segment-anything.com
- Attention Is All You Need(Transformer):arxiv.org/abs/1706.03762
- ViT(视觉 Transformer)论文:arxiv.org/abs/2010.11929
- DETR(集合预测检测)论文:arxiv.org/abs/2005.12872
- I3D(视频 3D 卷积)论文:arxiv.org/abs/1705.07750
- SORT(在线多目标追踪)论文:arxiv.org/abs/1602.00763
- Segment Anything 代码:github.com/facebookresearch/segment-anything
测验
Q1: 行动识别与时间行动定位的区别是什么?
行动识别是在片段或流中分类「是什么行动」。时间定位则进一步在长视频中以区间形式找出该行动「从何时到何时」发生。
Q2: 为什么时空注意力中计算量会成为问题?
因为帧数与每帧的图块数相乘,会使注意力开销增大。为缓解这一点,可以分解空间与时间注意力、减少令牌数,或使用局部注意力。
Q3: SAM 2 系列在视频方面新增的核心概念是什么?
把某一帧中由提示指定的目标掩码传播到后续帧,并用记忆结构在遮挡与再出现的情况下依然连接同一目标。它在掩码层面统一了分割与追踪。
Q4: 检测式追踪(tracking-by-detection)的基本流程是什么?
每一帧用检测器获取框,再通过位置预测(运动模型)与外观匹配(重识别)与过去的轨迹相连接,为同一物体维持一致的 ID。
Q5: MOT 中的 ID 切换是什么?
指在遮挡或物体交叉的情况下,原本轨迹的 ID 被错配给另一个物体的问题,在密集场景与相似外观下尤其容易发生。
Q6: 举出两种为了实时性而降低计算量的方法。
使用轻量骨干网络;只对关键帧做重处理、中间帧轻量插值的帧采样;把计算集中在感兴趣区域等。
Q7: 为什么因果(causal)处理能降低延迟?
因为它不等待未来帧,只用过去与当前信息输出结果。在流式环境中需要即时响应时很有优势。
Q8: 为什么在视频分析中很难断言存在「最优组合」?
因为不同应用对延迟、准确度、鲁棒性的优先级各不相同。监控报警与离线体育分析所要求的取舍不同,因此最优设置也不同。
Q9: 检测式追踪与联合检测·追踪的区别是什么?
检测式追踪是逐帧检测后再单独连接(易于模块化,依赖检测器)。联合检测与追踪则把检测与追踪作为一个模型一起训练,通过跨帧特征传播或轨迹查询把两个过程绑定在一起。
Q10: 为什么运动线索在行动识别中很重要?
因为像「坐下」和「站起来」这样的许多行动,仅看一帧很难区分。一并使用光流之类的运动表征,能捕捉随时间发生的变化,从而更好地区分行动。
Q11: 为什么在实时视频中「准确但慢」的结果会是问题?
因为帧会不断涌入,如果处理速度跟不上帧速率,滞后的结果指向的已经是过去的状况。在监控、自动驾驶这类需要即时性的应用中,及时得到的近似值可能更有用。
Q12: 边缘处理与服务器处理之间的取舍是什么?
边缘(相机附近)在传输延迟与带宽上更有利,但计算资源有限。服务器可以使用更强的模型,但会产生传输延迟。选择取决于应用的延迟要求与资源约束。
현재 단락 (1/195)
理解一张静态图像,和理解随时间展开的视频,是两个不同的问题。视频多了一条时间轴,物体会移动、被遮挡、再重新出现。要实时回答「现在正在发生什么」「这个物体在下一帧去了哪里」,不仅要考虑准确度,还必须同时...