Video Understanding
视频理解是指 AI 解读视频随时间发生的内容:动作、事件及其顺序。介绍相关任务、模型系列和代码。
视频理解是计算机视觉的一个领域,旨在解读视频随时间发生的内容:画面中有哪些物体和人物、他们在做什么、事件何时开始和结束,以及一个事件如何引发另一个事件。图像识别会独立分析每一帧,而视频理解会对运动和时间顺序建模,许多问题都取决于这两点。一帧图像可能显示一个人正半坐在椅子上,只有查看前后帧才能判断此人是在坐下还是站起。这个领域涵盖从短片段标注到回答数小时视频内容的开放式问题。
核心任务#
- 动作识别: 为一段经过剪辑的短片段分配一个标签,例如“俯卧撑”或“摔倒”。
- 时间动作定位: 找出长篇未剪辑视频中每个动作的开始和结束时间;时空动作检测还会为每一帧中的每个动作执行者标注边界框。
- 目标跟踪: 通过持久 ID 跨帧跟踪每个物体,这是计数、速度测量和轨迹分析的基础。
- 视频分割: 为物体或场景区域生成像素掩码,并确保掩码在各帧之间保持一致。
- 视频字幕生成与问答: 用文字描述片段,或回答“司机在汽车停下之前做了什么?”之类的问题。
- 时间定位: 找出与某句话相对应的时刻,例如“守门员接住了球”;这项任务也称为时刻检索。
- 异常检测: 标记摔倒、打架或车辆逆向行驶等异常事件。
视频模型的工作原理#
视频模型必须捕捉外观(物体看起来是什么样)和运动(物体如何变化)。双流网络通过独立分支处理 RGB 帧和光流;3D 卷积神经网络(CNN)会同时沿高度、宽度和时间维度进行卷积;时间移位模块则通过将每层的部分通道移至相邻帧,让 2D CNN 无需额外计算即可进行时间建模。视频 Transformer 会在时空图块之间应用自注意力;TimeSformer通过分别在时间和空间维度执行注意力计算,使这一方法变得经济可行。在无标注视频上进行自监督预训练,可以得到强大的通用编码器:Meta 的 V-JEPA 2通过预测被遮挡区域的表示,从超过 100 万小时的互联网视频中学习;在 Something-Something v2 上,其 top-1 准确率达到 77.3%。Something-Something v2 是一个基准数据集,其中的手部与物体交互动作主要区别在运动方式。视频语言模型会抽取视频帧,将每帧编码为视觉 token,再传递给大语言模型(LLM),由其用文字回答问题。
系统所需的输出类型在很大程度上决定了它会使用哪类模型:
基于目标轨迹识别事件#
许多实用系统通过分析轨迹来理解视频:检测器在每一帧中寻找物体,跟踪器将它们连接成轨迹,再由规则或模型将轨迹转化为事件,例如进入区域、穿过线段或停留过久。Ultralytics 目标计数解决方案就是通过这种方式,结合 YOLO26跟踪来实现:每个被跟踪物体的路径穿过线段时只计数一次,并根据物体在连续帧中的位置记录移动方向:
import cv2
from ultralytics import solutions
# Count people (COCO class 0) crossing a horizontal line through the middle of the 640x360 frame
counter = solutions.ObjectCounter(model="yolo26n.pt", region=[(0, 180), (640, 180)], classes=[0])
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4")
while True:
success, frame = cap.read()
if not success:
break
results = counter(frame)
# A crossing and its direction come from each person's track, so they exist only across frames
print(f"Crossed moving down: {results.in_count}, moving up: {results.out_count}")这两个计数描述的是单帧图像中不存在的事件,因为要区分一个人向下行走和向上行走,至少需要同一个被跟踪者的两个位置。
视频理解与相关术语的比较#
- 图像识别: 对单张图像中的内容进行分类或检测。逐帧处理视频可以得到每帧的结果,但无法识别身份、运动或顺序。
- 多目标跟踪(MOT): 视频理解的一个组成模块,可在不同帧之间保持目标身份,但不会解读物体正在做什么。
- 视频生成: 根据文本或图像创建新视频,方向与视频理解相反,不过两者都依赖对场景如何随时间变化进行建模。
- 多模态人工智能: 将视频与音频、字幕或其他数据结合起来;当音轨或语音包含关键信息时,这种方法很有帮助。
应用场景#
- 体育分析: 跟踪球员和球,以测量速度、控球情况和阵型,并从整场比赛录像中查找精彩片段。
- 交通与智慧城市: 统计车辆和行人、测量速度,并检测逆向行驶或车辆滞留。
- 零售与安全监控: 测量队列长度、标记护理机构中的跌倒事件,并检测有人进入限制区域。
- 媒体与内容审核: 为大型视频库建立索引以便搜索,并标记违反政策的上传内容。
- 机器人技术与自动驾驶汽车: 预测行人和其他车辆接下来会移动到哪里。
挑战#
视频会放大处理每张图像的成本:30 帧每秒的一分钟视频包含 1,800 帧,因此模型会稀疏采样,通常每个片段抽取 8 到 64 帧,但仍有可能漏掉短暂事件。长视频会给内存和上下文长度带来压力,而标注动作的精确起止时间也比标注图像耗时得多。Google Gemini API 每秒抽取一帧视频;在默认的低媒体分辨率下,每秒视频约使用 100 个 token。因此,上下文窗口为 100 万 token 的模型最多可处理 3 小时视频,或 1 小时高分辨率视频。










