MMOCR项目训练与测试全指南
前言
MMOCR作为一款强大的OCR工具库,提供了丰富的训练和测试功能。本文将全面介绍如何在MMOCR中进行模型训练和测试,涵盖从单机单卡到分布式集群的各种场景,帮助开发者充分利用硬件资源,高效完成OCR模型的训练和评估。
基础训练与测试
单卡训练配置
MMOCR支持使用GPU和CPU进行模型训练。对于初学者或小规模实验,单卡训练是最简单的方式:
# 使用CPU训练DBNet模型
CUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/textdet/dbnet/dbnet_resnet50-dcnv2_fpnc_1200e_icdar2015.py
# 使用GPU训练DBNet模型(指定GPU 0)
CUDA_VISIBLE_DEVICES=0 python tools/train.py configs/textdet/dbnet/dbnet_resnet50-dcnv2_fpnc_1200e_icdar2015.py
训练脚本支持以下关键参数:
--work-dir
:指定工作目录,用于保存训练日志和模型检查点--resume
:从上次中断处恢复训练--amp
:启用混合精度训练,减少显存占用并加速训练--auto-scale-lr
:根据batch size自动调整学习率
单卡测试方法
模型训练完成后,可以使用测试脚本评估模型性能:
# 使用CPU测试DBNet模型
CUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/textdet/dbnet/dbnet_resnet50-dcnv2_fpnc_1200e_icdar2015.py dbnet_r50.pth
# 使用GPU测试DBNet模型
CUDA_VISIBLE_DEVICES=0 python tools/test.py configs/textdet/dbnet/dbnet_resnet50-dcnv2_fpnc_1200e_icdar2015.py dbnet_r50.pth
测试脚本支持以下实用功能:
--show
:实时可视化预测结果--show-dir
:将可视化结果保存到指定目录--tta
:启用测试时数据增强(仅文本识别模型支持)
分布式训练与测试
单机多卡配置
对于拥有多块GPU的服务器,可以使用分布式训练大幅提升效率:
# 使用4块GPU训练DBNet模型
./tools/dist_train.sh configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py 4
# 使用4块GPU测试DBNet模型
./tools/dist_test.sh configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py dbnet_r50.pth 4
多机多卡配置
MMOCR支持跨多台机器的分布式训练,适用于大规模模型训练:
# 机器1(主节点)
NNODES=2 NODE_RANK=0 PORT=29501 MASTER_ADDR=10.140.0.169 ./tools/dist_train.sh configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py 2
# 机器2(从节点)
NNODES=2 NODE_RANK=1 PORT=29501 MASTER_ADDR=10.140.0.169 ./tools/dist_train.sh configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py 2
注意事项:
- 确保所有机器在同一局域网内
- 主节点IP地址(MASTER_ADDR)需要正确配置
- 端口号(PORT)需要在所有机器上保持一致
集群环境部署
对于使用Slurm调度系统的计算集群,MMOCR提供了专门的提交脚本:
# 提交训练任务
GPUS=8 GPUS_PER_NODE=8 CPUS_PER_TASK=5 ./tools/slurm_train.sh dev db_r50 configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py work_dir
# 提交测试任务
GPUS=8 GPUS_PER_NODE=8 CPUS_PER_TASK=5 ./tools/slurm_test.sh dev db_r50 configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py dbnet_r50.pth work_dir
高级技巧
混合精度训练支持
MMOCR中大部分模型支持混合精度训练,可以显著减少显存占用并提升训练速度:
python tools/train.py configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py --amp
断点续训方法
训练意外中断后,可以轻松恢复训练:
# 从最新检查点恢复
python tools/train.py configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py --resume
# 从指定检查点恢复(需在配置文件中设置)
load_from = 'work_dir/dbnet/models/epoch_10000.pth'
结果可视化分析
测试时可视化功能帮助直观评估模型表现:
# 实时显示预测结果
python tools/test.py configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py dbnet_r50.pth --show
# 保存可视化结果
python tools/test.py configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_icdar2015.py dbnet_r50.pth --show-dir ./vis_results
结语
本文全面介绍了MMOCR的训练和测试方法,从基础的单卡操作到高级的分布式训练技巧。合理运用这些功能,可以充分发挥硬件性能,高效完成OCR模型的开发和评估。建议开发者根据实际硬件条件和项目需求,选择最适合的训练测试方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考