首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
PySlowFast 从零上手指南:训练、恢复与测试视频理解模型
📅 2026/10/9 19:26:59
✍️ 爱科研究院
👁 阅读 3,247
人工智能计算机视觉深度学习预训练【免费下载链接】SlowFastPySlowFast: video understanding codebase from FAIR for reproducing state-of-the-art video models.项目地址https://gitcode.com/gh_mirrors/sl/SlowFast点击查看免费下载PySlowFast 是 FAIR 开源的视频理解代码库围绕统一的tools/run_net.py入口与 YAML 配置体系把“训练、恢复训练、测试”三类任务收敛到同一条命令链路上。本文以 GETTING_STARTED.md 为主线结合仓库源码与真实配置文件完整讲解 PySlowFast 的标准训练流程、断点恢复PyTorch/Caffe2 两种 checkpoint 类型、纯测试模式以及多视角测试原理读完即可用一条命令启动属于你的第一个视频分类任务。启动任务前的前置条件在运行任何训练或测试任务之前需要先完成两件事安装 PySlowFast 及其依赖PyTorch、fvcore、torchvision 等安装步骤详见 INSTALL.md。按照要求的格式准备数据集。不同的数据集Kinetics、AVA、Charades、SSv2 等需要不同的目录结构与标注格式具体格式要求参见 slowfast/datasets/DATASET.md。PySlowFast 的入口脚本是 tools/run_net.py。它在main()中按以下顺序解析并执行任务若cfg.TRAIN.ENABLE为真则调用train()执行训练若cfg.TEST.ENABLE为真则调用test()执行多片段测试若启用了 TensorBoard 可视化则执行visualize()若cfg.DEMO.ENABLE为真则执行demo()。也就是说训练与测试是否执行完全由配置中的开关控制你不需要切换不同的脚本。配置的加载与覆盖机制YAML 与命令行参数的优先级所有任务都以一份 YAML 配置文件为核心。PySlowFast 基于 fvcore 的CfgNode构建了完整的默认配置体系全部键的默认值定义在 slowfast/config/defaults.py其中get_cfg()会返回一份默认配置的克隆。命令行参数的解析与合并逻辑位于 slowfast/utils/parser.py 的load_config()中其合并顺序决定了最终生效的配置值先通过cfg.merge_from_file(path_to_config)加载 YAML 文件中的配置再通过cfg.merge_from_list(args.opts)用命令行--opts即KEY VALUE对覆盖文件中的值最后继承--shard_id、--num_shards等命令行参数到cfg.NUM_SHARDS、cfg.SHARD_ID。因此命令行参数拥有最高优先级可以临时覆盖配置文件中的任意键而不必修改 YAML。此外run_net.py会调用 slowfast/config/defaults.py 中的assert_and_infer_cfg()做合法性校验例如TRAIN.BATCH_SIZE必须能被NUM_GPUS整除assert cfg.NUM_GPUS 0 or cfg.TRAIN.BATCH_SIZE % cfg.NUM_GPUS 0TRAIN.CHECKPOINT_TYPE与TEST.CHECKPOINT_TYPE只能是pytorch或caffe2若SOLVER.BASE_LR_SCALE_NUM_SHARDS为真学习率会自动按NUM_SHARDS缩放。从头训练一个标准模型GETTING_STARTED 以C2D 8x8 ResNet-50为例演示了如何在 Kinetics 数据集上从头训练一个标准模型。对应的配置文件是 configs/Kinetics/C2D_8x8_R50.yaml其中已经完整定义了模型结构MODEL.ARCH: c2d、MODEL.MODEL_NAME: ResNet、RESNET.DEPTH: 50、数据采样DATA.NUM_FRAMES: 8、DATA.SAMPLING_RATE: 8、优化器SOLVER.BASE_LR: 0.1、LR_POLICY: cosine、MAX_EPOCH: 196等。启动训练的命令如下python tools/run_net.py \ --cfg configs/Kinetics/C2D_8x8_R50.yaml \ DATA.PATH_TO_DATA_DIR path_to_your_dataset \ NUM_GPUS 2 \ TRAIN.BATCH_SIZE 16命令中各个参数的含义与来源参数作用默认值/说明--cfg指定 YAML 配置文件路径在 parser.py 中默认值为configs/Kinetics/SLOWFAST_4x16_R50.yaml可传入多个配置文件DATA.PATH_TO_DATA_DIR指向数据目录含 train/val 列表文件默认值为空字符串见 defaults.pyNUM_GPUS训练使用的 GPU 数量默认 1大于 1 时launch_job会通过torch.multiprocessing.spawn启动多进程分布式训练见 slowfast/utils/misc.pyTRAIN.BATCH_SIZE总 mini-batch 大小默认 64必须能被NUM_GPUS整除DATA_LOADER.NUM_WORKERS每个训练进程的数据加载 worker 数默认 8TRAIN.CHECKPOINT_PERIOD每多少个 epoch 保存一次 checkpoint默认 10C2D 配置中为 1TRAIN.EVAL_PERIOD每多少个 epoch 在验证集上评估一次默认 10TRAIN.AUTO_RESUME是否自动从输出目录中的最新 checkpoint 恢复默认 TrueOUTPUT_DIR输出目录checkpoint 保存在其checkpoints/子目录下默认.关于数据集路径有两种等价的做法方式一命令行传递临时生效如上例所示每次启动时追加DATA.PATH_TO_DATA_DIR path_to_your_dataset。方式二写入 YAML永久生效直接在配置文件中加入DATA: PATH_TO_DATA_DIR: path_to_your_dataset之后启动命令时便无需每次再传该参数。训练循环做了什么从 tools/train_net.py 的train()可以看到完整训练主循环train_net.py初始化分布式环境并设置随机种子cfg.RNG_SEED构建模型build_model(cfg)若cfg.LOG_MODEL_INFO为真还会通过 slowfast/utils/misc.py 的log_model_info()输出参数量、FLOPs、显存占用与 nvidia-smi 信息构造优化器默认 SGD见SOLVER.OPTIMIZING_METHOD与 GradScaler仅当TRAIN.MIXED_PRECISION启用时生效按需加载 checkpoint详见下文“恢复训练”构建 train/val 数据加载器与统计仪表TrainMeter/ValMeter进入 epoch 循环每个 epoch 内逐 iteration 前向、计算损失、反向更新若BN.USE_PRECISE_STATS为真还会在 checkpoint/eval 周期用cfg.BN.NUM_BATCHES_PRECISE个 batch 重算精确 BN 统计按is_checkpoint_epoch/is_eval_epoch保存 checkpoint格式为checkpoint_epoch_{epoch:05d}.pyth见 slowfast/utils/checkpoint.py或在验证集上评估。本地快速调试配置如果只想在本机快速跑通流程、验证代码是否正确而非追求训练效果GETTING_STARTED 推荐把数据加载和显存占用降到最低DATA_LOADER.NUM_WORKERS 0 \ NUM_GPUS 2 \ TRAIN.BATCH_SIZE 16 \即DATA_LOADER.NUM_WORKERS 0关闭多进程数据加载避免 worker 进程带来的调试干扰也降低内存占用NUM_GPUS 2、TRAIN.BATCH_SIZE 16在 2 张 GPU 上以较小的 batch 快速迭代适合在本地机器上做冒烟测试。从已有 Checkpoint 恢复训练PySlowFast 支持两种来源的 checkpointPyTorch 训练出的权重与Caffe2 格式的权重例如官方发布的 Caffe2 预训练模型。恢复方式同样既可以在命令行中追加也可以写入 YAML。恢复 PyTorch CheckpointTRAIN.CHECKPOINT_FILE_PATH path_to_your_PyTorch_checkpoint对应的默认值与语义见 defaults.pyTRAIN.CHECKPOINT_FILE_PATH默认指定要加载的初始权重路径TRAIN.CHECKPOINT_TYPE默认pytorchTRAIN.CHECKPOINT_INFLATE默认False是否执行权重膨胀TRAIN.CHECKPOINT_EPOCH_RESET默认False加载时是否重置 epoch 计数TRAIN.CHECKPOINT_CLEAR_NAME_PATTERN默认空元组加载时按给定模式清除层名前缀用于结构微调场景。在 train_net.py 中只要TRAIN.CHECKPOINT_FILE_PATH非空就会调用 slowfast/utils/checkpoint.py 的load_checkpoint()从 CPU 加载权重以避免 GPU 显存尖峰然后按名称与形状匹配pre_train_dict与当前模型状态字典strictFalse加载并打印 Network weights not loaded 等日志供排查。若 checkpoint 中包含epoch与optimizer_state还会顺带恢复 epoch 计数与优化器状态从而无缝续训。恢复 Caffe2 Checkpoint如果 checkpoint 是 Caffe2 训练产出的需要额外指定 checkpoint 类型TRAIN.CHECKPOINT_FILE_PATH path_to_your_Caffe2_checkpoint \ TRAIN.CHECKPOINT_TYPE caffe2此时load_checkpoint()走convert_from_caffe2True分支checkpoint.py以pickleencodinglatin1读取 Caffe2 的blobs通过 slowfast/utils/c2_model_loading.py 中的get_name_convert_func()将 Caffe2 层名转换为 PyTorch 命名自动处理维度差异例如将线性层参数 reshape 成卷积参数、将 Caffe2 的普通 BN 统计映射到 Sub-BNc2_normal_to_sub_bn最终以strictFalse加载并打印所有未转换/未匹配的层名。权重膨胀Checkpoint Inflation若需要用2D 预训练权重初始化 3D 视频模型例如用 ImageNet 预训练的 ResNet 初始化 C2D/I3D/SlowFast 的 3D 卷积记得开启膨胀开关TRAIN.CHECKPOINT_INFLATE True膨胀的具体实现是 checkpoint.py 中的inflate_weight()对于形状为 4D2D 卷积权重而目标为 5D3D 卷积权重的参数在时间维度上unsqueeze(2).repeat(1, 1, T, 1, 1) / T即把 2D 卷积核沿时间轴复制并取平均得到 3D 卷积核。这正是 I3D 论文中经典的“膨胀初始化”做法。执行模型测试PySlowFast 用TRAIN.ENABLE与TEST.ENABLE两个开关共同决定当前任务执行训练还是测试。若只想做纯测试将TRAIN.ENABLE置为False并通过TEST.CHECKPOINT_FILE_PATH指定待测模型权重python tools/run_net.py \ --cfg configs/Kinetics/C2D_8x8_R50.yaml \ DATA.PATH_TO_DATA_DIR path_to_your_dataset \ TEST.CHECKPOINT_FILE_PATH path_to_your_checkpoint \ TRAIN.ENABLE False测试相关的关键配置defaults.py参数默认值含义TEST.ENABLETrue是否执行测试TEST.DATASETkinetics测试数据集TEST.BATCH_SIZE8测试 mini-batch 大小同样需能被NUM_GPUS整除TEST.CHECKPOINT_FILE_PATH待测 checkpoint 路径TEST.CHECKPOINT_TYPEpytorch可选pytorch或caffe2TEST.NUM_ENSEMBLE_VIEWS10沿时间轴均匀采样的 clip 数量用于多片段集成TEST.NUM_SPATIAL_CROPS3每个 clip 的空间裁剪数左/中/右 3 cropsTEST.SAVE_RESULTS_PATH非空时把预测结果与标签 pickle 到OUTPUT_DIR下多视角测试的工作原理测试逻辑位于 tools/test_net.py 的perform_test()test_net.py。其注释明确描述了多视角测试的流程沿时间轴均匀采样TEST.NUM_ENSEMBLE_VIEWS默认 10个 clip对每个 clip 再取TEST.NUM_SPATIAL_CROPS默认 3个空间裁剪将全部N × 3个视角的 softmax 分数取平均得到视频级预测与 ground-truth 标签比较统计并输出最终 Top-1/Top-5 精度。TestMeter会按NUM_ENSEMBLE_VIEWS × NUM_SPATIAL_CROPS组织预测并断言num_videos % (views × crops) 0test_net.py。另外run_net.py中有一个特殊逻辑当TEST.NUM_ENSEMBLE_VIEWS -1时会自动依次用[1, 3, 5, 7, 10]五组 clip 数分别测试并对比见 run_net.py方便研究者观察集成视图数量对精度的影响。测试时 checkpoint 的加载优先级由 checkpoint.py 的load_test_checkpoint()决定优先TEST.CHECKPOINT_FILE_PATH若为空则尝试从OUTPUT_DIR中读取最新 checkpoint再退而求其次使用TRAIN.CHECKPOINT_FILE_PATH若均无则随机初始化仅限调试。Run 命令速记GETTING_STARTED 末尾给出了恢复预训练模型进行测试的最简命令形式python tools/run_net.py --cfg path/to/pretrained_model_config_file.yaml注意该命令成立的前提是配置文件中已写好DATA.PATH_TO_DATA_DIR与TEST.CHECKPOINT_FILE_PATH并且TRAIN.ENABLE已关闭。实际使用时请参照上文把这两个参数补齐命令行或 YAML 均可。结语与进一步探索至此你已经掌握了 PySlowFast 的三条核心操作路径训练python tools/run_net.py --cfg config.yaml DATA.PATH_TO_DATA_DIR data NUM_GPUS n TRAIN.BATCH_SIZE b恢复用TRAIN.CHECKPOINT_FILE_PATHCaffe2 时TRAIN.CHECKPOINT_TYPE caffe2必要时加TRAIN.CHECKPOINT_INFLATE True测试TRAIN.ENABLE FalseTEST.CHECKPOINT_FILE_PATH ckpt。所有配置项都可以通过命令行--opts临时覆盖也可以在 YAML 中固化全部默认值可在 slowfast/config/defaults.py 中查阅。仓库还提供了覆盖多种任务的现成配置configs 目录下包含 Kinetics、AVA、Charades、SSv2、ImageNet 以及对比学习/掩码自监督等子目录、官方预训练基线MODEL_ZOO.md以及可视化与 Demo 工具VISUALIZATION_TOOLS.md可作为后续深入实践的直接入口。赞分享人工智能计算机视觉深度学习预训练【免费下载链接】SlowFastPySlowFast: video understanding codebase from FAIR for reproducing state-of-the-art video models.项目地址https://gitcode.com/gh_mirrors/sl/SlowFast点击查看免费下载相关推荐3小时从零上手PySlowFast视频模型训练全流程攻略3小时从零上手PySlowFast视频模型训练全流程攻略 你是否还在为视频模型训练的繁琐流程而头疼标注数据耗时、配置参数复杂、精度调优无门本文将以Kine人工智能计算机视觉深度学习预训练LeRobot机器人学习3步构建你的第一个AI机器人控制模型LeRobot机器人学习3步构建你的第一个AI机器人控制模型 想不想让机器人像人一样学习新技能 你是否曾梦想过让机械臂学会抓取物体、让机器人自主完成复杂人工智能机器学习深度学习机器人具身智能强化学习PySlowFast混合精度训练终极指南让视频模型训练速度起飞 PySlowFast混合精度训练终极指南让视频模型训练速度起飞 还在为庞大的视频模型训练耗时过长而苦恼吗显存不足限制了你的batch size别担心人工智能计算机视觉深度学习预训练创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/9 19:26:59
戴维南定理实战指南:从等效原理到电路调试应用
2026/10/9 19:26:59
Chroma ATE全解析:电源电池测试系统选型与避坑指南
2026/10/9 19:26:59
Kubernetes 统治容器十年后,谷歌的 Agent Substrate 想接管 agent 时代的执行层
2026/10/9 20:23:00
小红书 hi lab 开源 dots.vlm1 多模态大模型:对标 Gemini 2.5 Pro 的本地部署与 TaoToken 接入实践
2026/10/9 20:23:00
AI Agent Harness 模型微调数据管控:用 TaoToken 统一 Key 打通 LangChain 训练链路
2026/10/9 20:23:00
Nginx反向代理与负载均衡配置实战:三台后端服务器的完整方案
2026/10/9 20:23:00
YOLOv5行为检测实战:打电话动作识别与PyQt落地
2026/10/9 20:23:00
RabbitMQ入门实战:从安装配置到消息队列原理与可靠投递
2026/10/9 20:17:47
PyCharm+OpenCV车牌识别实战:从图像预处理到字符分割的完整流程
2026/10/9 0:01:35
RISC-V裸机启动全流程:从复位向量到main函数的七步实现
2026/10/9 0:01:35
Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南
2026/10/9 0:01:35
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错
2026/10/8 5:02:14
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/9 1:10:43
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/9 3:31:49
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/8 4:30:43
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/9 3:32:01
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/9 11:36:17
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)