PyTorchVideo 视频动作识别教程:使用 Torch Hub 进行推理

PyTorchVideo 视频动作识别教程:使用 Torch Hub 进行推理

pytorchvideo A deep learning library for video understanding research. pytorchvideo 项目地址: https://gitcode.com/gh_mirrors/py/pytorchvideo

前言

在计算机视觉领域,视频理解是一个重要且具有挑战性的任务。PyTorchVideo 是一个专门为视频理解任务设计的深度学习库,提供了丰富的预训练模型和工具。本教程将介绍如何使用 PyTorchVideo 中的预训练模型进行视频动作识别。

环境准备

在开始之前,我们需要确保环境中安装了必要的依赖包:

  1. PyTorch 和 TorchVision:这是运行 PyTorchVideo 的基础
  2. PyTorchVideo:视频理解专用库

如果环境中缺少这些包,可以通过 pip 进行安装。需要注意的是,PyTorchVideo 对 PyTorch 版本有一定要求,建议使用兼容版本。

数据准备

类别标签映射

Kinetics-400 是一个常用的视频动作识别数据集,包含 400 种不同的动作类别。我们需要下载类别名称与 ID 的映射文件,以便将模型的输出转换为可读的动作名称。

with open("kinetics_classnames.json", "r") as f:
    kinetics_classnames = json.load(f)

# 创建ID到类别名称的映射
kinetics_id_to_classname = {}
for k, v in kinetics_classnames.items():
    kinetics_id_to_classname[v] = str(k).replace('"', "")

模型加载

PyTorchVideo 通过 Torch Hub 提供了多种预训练模型,包括:

  • SlowFast:同时处理慢速和快速视频路径的模型
  • X3D:高效的三维卷积网络
  • ResNet:经典的2D/3D卷积网络

本教程以 SlowFast R50 模型为例:

# 选择设备(CPU或GPU)
device = "cpu"  # 可改为"cuda"使用GPU

# 加载预训练模型
model_name = "slowfast_r50"
model = torch.hub.load("facebookresearch/pytorchvideo:main", 
                      model=model_name, 
                      pretrained=True)

# 设置为评估模式并移动到指定设备
model = model.to(device)
model = model.eval()

输入预处理

视频数据在输入模型前需要经过一系列预处理步骤,这些步骤对模型性能至关重要:

  1. 时间维度采样:从视频中均匀采样固定数量的帧
  2. 归一化:将像素值从[0,255]缩放到[0,1]并进行标准化
  3. 空间变换:调整视频尺寸并进行中心裁剪
  4. 路径打包(SlowFast特有):将帧分为慢速和快速两条路径
# SlowFast专用预处理
transform = ApplyTransformToKey(
    key="video",
    transform=Compose([
        UniformTemporalSubsample(num_frames),
        Lambda(lambda x: x/255.0),
        NormalizeVideo(mean, std),
        ShortSideScale(size=side_size),
        CenterCropVideo(crop_size),
        PackPathway()
    ]),
)

视频加载与处理

我们使用一个示例视频(射箭动作)来演示推理过程:

# 加载视频文件
video_path = "archery.mp4"

# 初始化视频加载器
video = EncodedVideo.from_path(video_path)

# 截取指定时间段的视频片段
video_data = video.get_clip(start_sec=start_sec, end_sec=end_sec)

# 应用预处理变换
video_data = transform(video_data)

# 准备模型输入
inputs = video_data["video"]
inputs = [i.to(device)[None, ...] for i in inputs]

模型推理与结果解析

完成预处理后,我们可以将视频输入模型进行推理:

# 模型推理
preds = model(inputs)

# 对输出进行softmax处理
post_act = torch.nn.Softmax(dim=1)
preds = post_act(preds)

# 获取top-5预测结果
pred_classes = preds.topk(k=5).indices

# 将类别ID转换为名称
pred_class_names = [kinetics_id_to_classname[int(i)] for i in pred_classes[0]]
print("预测结果: %s" % ", ".join(pred_class_names))

技术要点解析

  1. 模型选择:SlowFast模型通过双路径架构同时捕捉视频中的慢动作和快动作特征,适合处理复杂的时间动态。

  2. 时间采样:视频通常包含大量冗余帧,均匀时间采样可以减少计算量同时保留关键信息。

  3. 多路径处理:SlowFast的PackPathway将输入分为两条路径:

    • 慢路径:低帧率,高空间分辨率
    • 快路径:高帧率,低空间分辨率
  4. 结果解释:模型输出是400个类别的概率分布,我们通常取top-k结果进行分析。

应用场景

这种视频动作识别技术可应用于:

  • 智能视频监控
  • 体育动作分析
  • 人机交互
  • 视频内容理解与检索

总结

本教程详细介绍了使用PyTorchVideo进行视频动作识别的完整流程,从环境准备、模型加载到最终的推理过程。通过这个例子,我们可以看到PyTorchVideo提供了简洁高效的接口来处理视频理解任务,使得开发者能够快速构建视频分析应用。

pytorchvideo A deep learning library for video understanding research. pytorchvideo 项目地址: https://gitcode.com/gh_mirrors/py/pytorchvideo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵇子高Quintessa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值