训练YOLOv5目标检测模型时出现“分页文件太小无法完成操作”错误如何解决
问题解决方案
- 优化数据加载配置
- 找到YOLOv5源码中dataloader初始化的位置,将
pin_memory参数设置为False,关闭内存页锁定机制,Windows下该机制会大幅增加不必要的内存占用 - 将
num_workers直接设置为0而非1,完全禁用多进程数据加载,所有数据加载逻辑放在主进程执行,彻底避免Windows多进程数据加载带来的内存泄漏问题,同时将persistent_workers、prefetch_factor参数也同步关闭或设为1
- 找到YOLOv5源码中dataloader初始化的位置,将
- 调整训练参数降低资源占用
- 降低批次大小:当前
--batch 4可进一步下调至2甚至1,同时添加--gradient-accumulation 4参数开启梯度累积,可在低批次下实现与原批次相当的训练效果,内存占用大幅降低 - 添加
--amp参数开启混合精度训练,同时降低显存和内存占用,训练速度基本不受影响 - 暂时换用更小的预训练模型:将
yolov5l.pt替换为yolov5m.pt或yolov5s.pt先验证训练流程稳定性,确认无问题后再换回大模型 - 不要添加
--cache ram类的缓存参数,避免一次性将全部数据集加载到内存中
- 降低批次大小:当前
- 系统层面内存配置调整
- 关闭Windows系统自动管理分页文件的选项,手动将分页文件设置在剩余空间≥100G的非系统盘,最小值设为物理内存的1.5倍,最大值设为物理内存的4倍,设置完成后重启系统生效
- 训练前关闭所有非必要后台进程,包括浏览器、通讯软件、视频软件等,释放可用内存空间
- 若物理内存≤16G,优先升级物理内存到32G及以上,5万张图像的YOLOv5训练对内存需求本身较高,小内存下仅靠调整虚拟内存很难完全避免崩溃问题
- 额外验证方案
- 可先抽取小部分数据集(比如1000张)跑通完整训练流程,确认无内存报错后再全量训练,逐步排查是否存在数据集标注异常导致的内存溢出问题
内容的提问来源于stack exchange,提问作者mark_1985
相关产品推荐
相关产品推荐

