mmdetection训练中断后如何精准恢复epoch?详解resume与配置文件调整
1. 理解训练中断恢复的核心逻辑当你用mmdetection训练模型时最崩溃的莫过于训练到第23个epoch突然断电。别慌恢复训练的关键在于理解三个核心要素的联动关系检查点文件(.pth)保存了模型权重、优化器状态和当前epoch数--resume参数告诉训练脚本从何处恢复配置文件中的epoch设置决定训练的总轮次和关键节点我遇到过最坑的情况是用resume恢复训练后模型表现突然下降。后来发现是因为配置文件里的milestones没同步调整。举个例子原计划是训练24个epoch在第8、11轮降低学习率。如果训练在第12轮中断恢复时需要把milestones调整为[16,22]等比放大2倍。2. 单次中断恢复的完整操作流程假设你的faster-rcnn训练在第12个epoch时中断# 查看work_dirs里最新的检查点 ls ./work_dirs/faster_rcnn_r50_fpn_1x_coco/ # 恢复训练命令自动加载最新检查点 python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \ --resume关键细节检查点文件命名格式通常是epoch_{N}.pth或latest.pth如果指定具体检查点文件--resume ./work_dirs/faster_rcnn_r50_fpn_1x_coco/epoch_12.pth3. 配置文件调整的数学原理当需要延长训练时必须同步调整两个参数max_epochs总训练轮次milestones学习率调整节点调整公式新milestones [round(x * (新epoch数/原epoch数)) for x in 原milestones]比如原配置max_epochs 12 milestones [8, 11]想延长到24个epoch则改为max_epochs 24 milestones [16, 22] # 8*(24/12)16, 11*(24/12)224. 多次增量训练的场景处理有时候我们需要分阶段训练先训练12个epoch验证模型可行性效果不错再追加12个epoch最后微调6个epoch操作步骤# 第一阶段 python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py # 第二阶段修改配置后 vim configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py # 调整max_epochs24 python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \ --resume ./work_dirs/latest.pth # 第三阶段同理5. 常见坑点与解决方案坑1恢复后loss突然飙升检查学习率是否正常重置确认milestones调整正确坑2报错KeyError: epoch检查检查点文件是否完整尝试用官方脚本修复检查点from mmengine.runner import CheckpointLoader CheckpointLoader.repair_checkpoint(broken.pth)坑3GPU内存不足尝试降低batch sizetrain_dataloader dict(batch_size4) # 原为86. 高级技巧动态调整策略对于超长训练如100epoch建议使用余弦退火学习率代替阶梯下降param_scheduler [ dict(typeCosineAnnealingLR, T_maxmax_epochs) ]自动保存最佳模型而非定期保存default_hooks dict( checkpointdict(typeCheckpointHook, interval1, save_bestauto) )7. 实战案例COCO数据集恢复训练假设在coco2017上训练mask-rcnn# 初始训练假设中断在epoch 20 python tools/train.py configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py # 恢复训练并延长到40个epoch vim configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py # 修改max_epochs和milestones python tools/train.py configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py \ --resume ./work_dirs/mask_rcnn_r50_fpn_1x_coco/latest.pth配置文件关键修改# 原配置 train_cfg dict(max_epochs12) param_scheduler [ dict(milestones[8, 11]) ] # 修改后 train_cfg dict(max_epochs40) param_scheduler [ dict(milestones[26, 36]) # 8*(40/12)≈26, 11*(40/12)≈36 ]8. 版本兼容性注意事项不同mmdetection版本有差异v2.x使用--resume_from参数v3.x简化为--resume检查点格式变化# v2.x {meta: {epoch: 12}} # v3.x {epoch: 12, optimizer: {}}建议用mmdetection自带的升级脚本处理旧检查点python tools/model_converters/upgrade_model_version.py old.pth new.pth
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2466607.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!