☰
如何用InternVideo做视频动作识别:面向初学者的Kinetics-400微调完整指南
2026/10/4 6:47:46 网站建设 项目流程

如何用InternVideo做视频动作识别:面向初学者的Kinetics-400微调完整指南

【免费下载链接】InternVideo[ECCV2024] Video Foundation Models & Data for Multimodal Understanding项目地址: https://gitcode.com/OpenGVLab/InternVideo

InternVideo 是上海 AI Lab 开源的视频基础模型系列,而用它在Kinetics-400 数据集上做视频动作识别微调,是入门视频理解最经典、资料最全的路径。本文带你从零开始:安装环境 → 准备数据 → 运行一条命令微调 InternVideo2 模型 → 得到 K400 上 90%+ Top-1 精度的动作识别模型,全程无需修改核心代码。

上图直观展示了 InternVideo2 在动作识别、时序定位、检索等 20+ 任务上的表现——其中Kinetics-400 FineTuned Classification 达到 92.1% Top-1,正是本文要复现的目标。

为什么选 InternVideo 做视频动作识别?

InternVideo 采用Local/Global 两阶段时空建模架构(见上图框架图):先用 Local UniBlock 分别建模时序与空间局部特征,再通过 Global UniBlock 做全局时空融合。这种设计让它既学到了强空间语义,又保留了时序动态信息,动作识别能力显著优于纯图像模型。

对项目感兴趣的同学,可以查看 InternVideo2 README 和 ECCV2024 论文 PDF 了解完整背景。

第一步:一键克隆仓库并安装 InternVideo 环境

git clone https://gitcode.com/OpenGVLab/InternVideo cd InternVideo/InternVideo2/single_modality pip install -r requirements.txt

💡 依赖清单维护在 requirements.txt,完整安装说明见 INSTALL.md。推荐 PyTorch 1.12+ 与 CUDA 11.6 环境,微调 1B 模型单卡 A100 即可跑通。

第二步:Kinetics-400 数据集准备

K400 包含 400 个动作类别、约 24 万条训练视频。官方数据文件(含预处理好的视频列表与标签)的获取方式写在 DATASET.md 中。

下载完成后,建议按如下目录组织(路径可按需修改):

your_data_path/ └── k400/ ├── train_*.txt # 训练视频列表 ├── val_*.txt # 验证视频列表 ├── test_*.txt # 测试视频列表 └── raw_videos/ # 原始视频

第三步:读懂 K400 微调脚本的关键参数

所有官方微调脚本都集中在 scripts/finetuning/full_tuning/ 目录,K400 专用脚本位于 scripts/finetuning/full_tuning/k400/。以 1B 模型 8 帧版 1B_ft_k710_ft_k400_f8.sh 为例,核心参数解释如下:

参数示例值含义
--modelinternvideo2_1B_patch14_224要微调的模型规格(也可换 S/B/L 蒸馏小模型)
--data_setKinetics_sparse稀疏采样的 Kinetics 数据加载器
--nb_classes400类别数,K400 固定为 400
--finetuneK710 预训练权重路径初始化权重,决定起点精度
--num_frames8每个 clip 输入帧数
--epochs3微调通常只需 3 轮即可收敛
--lr1e-5全参微调推荐小学习率
--test_num_segment/--test_num_crop4/3评估时多裁剪集成策略

📌 微调起点很重要:脚本默认加载K710 预训练权重(1B_ft_k710_f8.pth),在 K400 上能直接冲到 91.3% Top-1。各规格模型的权重与脚本对照表见 MODEL_ZOO.md。

第四步:启动训练,一条命令跑通

修改脚本头部三个变量,指向你自己的路径:

PREFIX="你的数据路径/k400" # 数据前缀 DATA_PATH="你的数据路径/k400" # 数据集路径 MODEL_PATH="你的模型路径/1B_ft_k710_f8.pth" # 初始化权重

然后进入 single_modality 目录执行:

bash ./scripts/finetuning/full_tuning/k400/1B_ft_k710_ft_k400_f8.sh

脚本最终调用的是 run_finetuning.py,它会自动完成:构建 Kinetics 数据加载器 → 加载权重 → 训练 3 个 epoch →自动评测最佳 checkpoint(--test_best)并输出 Top-1/Top-5。GPU 显存紧张时保留脚本中的--use_checkpoint即可节省约 30% 显存。

⚠️ 脚本默认使用 SLURM 集群提交(srun),单机多卡可改为torchrun或python -m torch.distributed.run启动同一组参数,参考 scripts/pretraining/ 中的写法。

训练完成后的评估技巧

  • 只看结果:加上--eval参数仅跑测试,不做训练;
  • 换集成策略:--test_num_segment 4 --test_num_crop 3表示 4 段时序 clip × 3 个空间裁剪,精度更高但耗时翻倍;
  • 日志与权重:每 100 步自动保存一次 checkpoint,训练日志写在脚本同级的输出目录中。

常见问题速查

  1. 显存不够?优先开--use_checkpoint --checkpoint_num 6,或改用蒸馏出的 S/B/L 小模型脚本,显存占用降一个数量级。
  2. 精度上不去?确认加载的是 K710 预训练权重而非纯预训练权重;K400 微调只需 3 个 epoch,学习率过大(>1e-4)容易过拟合。
  3. 数据加载报错?检查train.txt/val.txt中视频路径是否指向存在的文件,--split保持','不变。
  4. 想扩展到其他数据集?K600/K700/MiT/SthSth 的脚本结构完全相同,直接改--nb_classes与数据路径即可。

写在最后

按照本指南,你只需要改 3 个路径、跑 1 条命令,就能在 Kinetics-400 上得到 90%+ Top-1 的视频动作识别模型。下一步推荐:把微调好的 K400 权重当作初始化,继续微调 Moments in Time 或 SthSth V2(脚本同样在 full_tuning/ 中),体验"预训练 → K710 → K400 → 目标域"的完整迁移路线。Happy training! 🎬

【免费下载链接】InternVideo[ECCV2024] Video Foundation Models & Data for Multimodal Understanding项目地址: https://gitcode.com/OpenGVLab/InternVideo

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询