Action Recognition
动作识别,也称人类活动识别(HAR),通过对视频中的运动进行时序建模来标注人们在做什么。本文介绍方法、数据集和代码。
动作识别是一项计算机视觉任务,用于判断视频中的人物,有时也包括动物或机器人,正在做什么:走路、挥手、跌倒、挥动高尔夫球杆或做俯卧撑。它将图像分类扩展到时间维度,因为许多动作无法通过单帧区分。某人弯腰到一半的静态图像可能显示的是坐下或站起,而一段短视频则能显示正在发生哪种动作。这个术语常与人体活动识别(HAR)互换使用,不过 HAR 也涵盖通过加速度计等可穿戴传感器进行识别。
动作识别的工作原理#
模型会接收一段视频片段,通常从几秒的视频中采样 8 到 64 帧,并学习两类信息:描述人物和物体外观的空间特征,以及描述其运动方式的时间特征。早期的双流网络在不同分支中分别处理 RGB 帧和光流,再融合两者的预测结果。三维卷积神经网络会同时沿高度、宽度和时间维度进行卷积;I3D通过将基于ImageNet预训练的二维图像滤波器扩展到三维来构建这类网络;SlowFast则将低帧率外观通路与高帧率运动通路结合起来。视频 Transformer会在时空图块上应用自注意力,而 VideoMAE通过重建大比例遮蔽的视频来对这些模型进行预训练。
来自 TorchVision 视频模型的 3D CNN 只需几行代码就能对视频片段进行分类:
import cv2
import numpy as np
import torch
from torchvision.models.video import R3D_18_Weights, r3d_18
# Load a 3D CNN pretrained on the 400 action classes of Kinetics-400
weights = R3D_18_Weights.KINETICS400_V1
model = r3d_18(weights=weights).eval()
# Read 16 consecutive frames from a short exercise video
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_pose_demo.mp4")
frames = [cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2RGB) for _ in range(16)]
# Stack the frames into one clip shaped (time, channels, height, width) and classify it
clip = torch.from_numpy(np.stack(frames)).permute(0, 3, 1, 2)
batch = weights.transforms()(clip).unsqueeze(0)
with torch.no_grad():
probs = model(batch).softmax(dim=1)[0]
top = probs.argmax().item()
print(f"{weights.meta['categories'][top]}: {probs[top]:.2f}")模型会输出 push up: 0.99:它会从 400 个类别中选出一个动作标签,标记整段半秒的视频片段。
基于骨架的方法采用另一条路线。姿态估计模型首先在每一帧中找出人体关键点,随后由图网络(例如 ST-GCN)这样的时序模型对由此得到的关节轨迹进行分类。骨架不受衣着、光照和背景影响,而且足够轻量,可以在边缘设备上实时处理。Ultralytics 的 YOLO26姿态模型可为这种方法提供每人 17 个身体关键点,而锻炼监测解决方案会根据三个关键点之间的夹角计算俯卧撑和深蹲等练习的重复次数。
动作识别与相关任务#
- 姿态估计与目标跟踪:姿态估计用于定位关节,跟踪则在不同帧之间保持每个人的身份。两者通常都是动作识别的输入,动作识别会对它们描述的运动进行解读;在人群中,每个被跟踪的人都会获得各自的视频片段和标签。
- 时序动作定位:找出长时、未剪辑视频中每个动作的起止时间。时空动作检测更进一步,会像 AVA 数据集那样在每一帧中框出每个动作主体。
- 视频理解:更广泛的领域,还涵盖视频描述生成、问答,以及对视频中事件和原因的推理。
实际应用#
- 医疗健康与老年护理:跌倒检测系统通过摄像头或可穿戴设备数据识别跌倒并提醒工作人员,康复应用则会检查患者是否正确完成锻炼。
- 健身与体育:应用可以统计重复次数并评估动作姿势,体育分析则会对广播视频中的投篮、传球和挥拍动作进行分类。
- 安全与安保:监控系统会标记公共场所中的打斗,以及工厂车间里的跌倒或不安全搬举行为。
- 人机交互:机器人和智能设备会对挥手或指向等手势作出响应。
数据集与挑战#
视频标注比图像标注耗时得多,因此该领域的进展依赖大型数据集。Kinetics-400包含 400 个人类动作类别,每个类别至少有 400 段约 10 秒长的 YouTube 视频;UCF101 则包含 101 个类别的 13,320 段视频。Something-Something V2 针对场景偏差,即模型根据泳池而不是划水动作来识别游泳的倾向:该数据集约有 22 万段视频,展示双手与日常物品的互动,涵盖 174 个仅动作不同的类别,例如“从左向右推某物”和“从右向左推某物”。










