MMAction2视频理解框架训练与测试全指南
前言
MMAction2是一个基于PyTorch的开源视频理解工具箱,支持多种视频理解任务,如动作识别、时序动作检测等。本文将详细介绍如何在MMAction2框架下进行模型的训练和测试,涵盖从单机单卡到分布式集群的各种使用场景。
训练篇
单机单卡训练
对于大多数开发者来说,单机单卡是最基础的训练环境。MMAction2提供了简单易用的训练脚本:
python tools/train.py configs/recognition/tsn/tsn_r50_1x1x3_100e_kinetics400_rgb.py
关键参数说明:
--work-dir
: 指定工作目录,用于保存日志和模型检查点--resume
: 从上次的训练中恢复,支持指定检查点路径--amp
: 启用自动混合精度训练,可减少显存占用--seed
: 设置随机种子,保证实验可复现
CPU训练注意事项: 如果需要使用纯CPU训练,需要设置环境变量:
CUDA_VISIBLE_DEVICES=-1 python tools/train.py ...
多GPU分布式训练
当需要加速训练过程时,可以使用多GPU并行训练:
bash tools/dist_train.sh configs/recognition/tsn/tsn_r50_1x1x3_100e_kinetics400_rgb.py 4
其中4
表示使用4块GPU。该脚本底层使用PyTorch的torch.distributed.launch
实现数据并行。
端口配置技巧: 默认使用29500端口,如需修改:
PORT=29666 bash tools/dist_train.sh ...
多任务并行技巧: 在同一台机器上启动多个训练任务时,需要指定不同的GPU和端口:
# 任务1使用GPU 0-3
CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 bash tools/dist_train.sh ... 4
# 任务2使用GPU 4-7
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 bash tools/dist_train.sh ... 4
多机分布式训练
同网络多机训练
对于局域网内的多台机器,需要配置以下环境变量:
主节点(第一台机器):
NNODES=2 NODE_RANK=0 PORT=29500 MASTER_ADDR=192.168.1.1 bash tools/dist_train.sh ...
从节点(第二台机器):
NNODES=2 NODE_RANK=1 PORT=29500 MASTER_ADDR=192.168.1.1 bash tools/dist_train.sh ...
关键环境变量:
NNODES
: 总机器数NODE_RANK
: 当前机器序号(主节点为0)PORT
: 通信端口,所有机器必须相同MASTER_ADDR
: 主节点IP地址
Slurm集群管理训练
在高性能计算集群中,通常使用Slurm作为作业调度系统:
GPUS=8 GPUS_PER_NODE=8 bash tools/slurm_train.sh partition_name job_name config.py
Slurm特有参数:
PARTITION
: 计算分区名称JOB_NAME
: 作业名称GPUS_PER_NODE
: 每节点GPU数CPUS_PER_TASK
: 每个任务分配的CPU核心数
测试篇
单机测试
模型训练完成后,可以使用测试脚本评估性能:
python tools/test.py config.py checkpoint.pth --eval top_k_accuracy
常用参数:
--work-dir
: 结果保存目录--dump
: 输出模型预测结果用于离线评估--show
: 可视化预测结果--show-dir
: 保存可视化结果的目录
多GPU测试
与训练类似,测试也支持多GPU并行:
bash tools/dist_test.sh config.py checkpoint.pth 4
分布式测试
多机测试
多机测试的配置与训练完全一致,只需将dist_train.sh
替换为dist_test.sh
。
Slurm集群测试
bash tools/slurm_test.sh partition_name job_name config.py checkpoint.pth
最佳实践建议
-
学习率调整:使用
--auto-scale-lr
参数可以根据实际batch size自动调整学习率 -
调试技巧:在开发阶段,可以添加
--cfg-options
快速修改配置参数,如:--cfg-options data.videos_per_gpu=2 optimizer.lr=0.01
-
可视化调试:测试时使用
--show
和--show-dir
参数可以帮助理解模型预测结果 -
复现性保证:通过
--seed
和--deterministic
参数可以确保实验可复现 -
混合精度训练:对于支持AMP的模型,使用
--amp
可以显著减少显存占用
通过本文的介绍,您应该已经掌握了MMAction2框架下模型训练和测试的各种方法。无论是单机开发还是分布式生产环境,都能找到适合的解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考