保姆级教程:用MMAction2和Kinetics400_tiny数据集10分钟搞定你的第一个动作识别模型
零基础极速入门:10分钟搭建MMAction2动作识别模型实战指南
刚接触计算机视觉中的动作识别领域?想快速体验从零搭建一个能识别视频中动作的AI模型?本文将带你用MMAction2框架和Kinetics400_tiny数据集,在个人电脑上10分钟内完成第一个动作识别模型的训练与测试全流程。无需昂贵计算资源,跟着步骤操作即可获得可运行的完整项目。
1. 环境准备与工具安装
在开始之前,我们需要确保基础环境配置正确。MMAction2作为OpenMMLab生态中的动作识别工具箱,依赖Python和PyTorch环境。以下是具体步骤:
-
创建Python虚拟环境(推荐使用conda):
conda create -n mmaction python=3.8 -y conda activate mmaction -
安装PyTorch(根据CUDA版本选择,无GPU则选择CPU版本):
pip install torch torchvision torchaudio -
安装MMAction2(建议使用官方推荐方式):
pip install -U openmim mim install mmengine mmcv mim install mmaction2
提示:如果遇到网络问题导致安装失败,可尝试使用国内镜像源,如清华源或阿里云源。
验证安装是否成功:
python -c "import mmaction; print(mmaction.__version__)"
正常输出版本号即表示环境就绪。
2. 数据集获取与结构解析
Kinetics400_tiny是官方提供的简化版数据集,特别适合快速验证和教学演示。让我们先了解这个数据集的结构特点:
- 数据规模:完整版Kinetics400包含30万+视频,而tiny版本仅保留核心样本
- 类别设计:采用二分类设计(0/1标签),大幅降低入门复杂度
- 文件结构:
kinetics400_tiny/ ├── train/ # 训练视频目录 │ ├── video1.mp4 │ └── ... ├── val/ # 验证视频目录 │ ├── video100.mp4 │ └── ... ├── kinetics_tiny_train_video.txt # 训练标注文件 └── kinetics_tiny_val_video.txt # 验证标注文件
下载并解压数据集:
wget https://download.openmmlab.com/mmaction/kinetics400_tiny.zip
mkdir -p data/
unzip kinetics400_tiny.zip -d data/
标注文件示例内容:
video001.mp4 0
video002.mp4 1
...
每行表示一个视频文件及其标签(0或1)。
3. 配置文件深度定制
MMAction2采用模块化配置系统,我们需要基于现有模板进行轻量修改。以下是关键调整项及其原理说明:
3.1 基础路径配置
修改configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py中的数据集路径:
data_root = 'data/kinetics400_tiny/train'
data_root_val = 'data/kinetics400_tiny/val'
ann_file_train = 'data/kinetics400_tiny/kinetics_tiny_train_video.txt'
ann_file_val = 'data/kinetics400_tiny/kinetics_tiny_val_video.txt'
3.2 训练参数优化
由于数据集规模缩小,需要调整以下参数(添加到配置文件末尾):
# 批大小调整为4(原为32)
train_dataloader = dict(batch_size=4)
# 训练周期设为10(原为100)
train_cfg = dict(
type='EpochBasedTrainLoop',
max_epochs=10,
val_interval=1) # 每1个epoch验证一次
# 学习率策略调整
param_scheduler = [
dict(
type='MultiStepLR',
begin=0,
end=10,
by_epoch=True,
milestones=[4, 8], # 在第4和8epoch时降低学习率
gamma=0.1)
]
# 模型头调整为二分类
model = dict(cls_head=dict(num_classes=2))
# 预训练模型加载
load_from = 'https://download.openmmlab.com/mmaction/v1.0/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb_20220906-cd10898e.pth'
参数调整对比表:
| 参数项 | 原始值 | 调整值 | 调整原因 |
|---|---|---|---|
| batch_size | 32 | 4 | 小数据集适合小批量 |
| max_epochs | 100 | 10 | 避免过拟合 |
| num_classes | 400 | 2 | 匹配二分类任务 |
| val_interval | 5 | 1 | 更频繁验证 |
4. 训练过程与结果分析
启动训练命令:
python tools/train.py configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py
典型训练输出日志解析:
Epoch(train) [1][10/10] lr: 1.00e-03 eta: 0:00:30 time: 0.300 data_time: 0.100 memory: 1234 loss: 0.1234
Epoch(val) [1][10/10] acc/top1: 0.9500 acc/top5: 1.0000
...
关键指标说明:
- acc/top1:预测最高概率类别正确的准确率
- acc/top5:预测前五概率中包含正确类别的准确率(本例中top5=top1)
- loss:训练损失值,反映模型拟合程度
训练完成后,工作目录会生成以下重要文件:
work_dirs/
└── tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb/
├── best_acc_top1_epoch_x.pth # 最佳模型权重
├── last_checkpoint.pth # 最后epoch权重
└── timestamp.log # 训练日志
5. 模型测试与效果验证
使用最佳模型进行测试(注意替换x为实际epoch数):
python tools/test.py \
configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py \
work_dirs/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb/best_acc_top1_epoch_x.pth
测试阶段的数据增强策略比验证阶段更丰富,通常会导致以下现象:
- 测试准确率 ≥ 验证准确率:更多数据增强提升模型泛化能力
- 波动范围小:多次测试结果稳定
实测中发现,使用tiny数据集时模型很快能达到接近100%的准确率,这是因为:
- 数据集样本量少且可能来自同分布
- 基于强大的预训练模型微调
- 二分类任务本身简单
6. 进阶探索与问题排查
完成基础流程后,你可能想进一步探索:
可视化工具使用
# 数据预处理可视化
python tools/visualizations/browse_dataset.py \
configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py \
browse_out --mode pipeline
# 学习率曲线可视化
python tools/visualizations/vis_scheduler.py \
configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py
常见问题解决方案
- CUDA内存不足:减小batch_size或输入分辨率
- 下载失败:手动下载模型权重到checkpoints目录
- 准确率波动大:检查数据标注一致性
性能优化技巧
- 尝试不同的帧采样策略(如密集采样)
- 调整空间裁剪尺寸(224x224 → 112x112)
- 使用更轻量级的backbone(如ResNet18)
在实际项目中,当遇到测试准确率低于预期时,我会优先检查数据标注质量,因为90%的问题都源于标注错误或数据分布不均。这个小技巧帮我节省了大量调试时间。
更多推荐


所有评论(0)