错误原因分析

  1. 多进程启动顺序问题
    错误提示RuntimeError: An attempt has been made to start a new process...表明在Windows环境下,多进程的启动方式(spawn)要求主模块必须被保护在if __name__ == '__main__':代码块中,否则子进程会重复执行主模块的代码。

  2. Ultralytics/YOLO 数据加载机制
    YOLO的数据加载器默认会使用多进程(通过workers参数控制),而Windows系统的进程创建方式与Linux不同,需要严格遵守if __name__ == '__main__':的编程规范。


解决方案

步骤1:修改主脚本结构

确保您的训练代码被包裹在if __name__ == '__main__':代码块中:

from ultralytics import YOLO 
 
if __name__ == '__main__':
    model = YOLO('yolov8n.pt')   # 加载预训练模型 
    model.train( 
        data='your_dataset.yaml', 
        epochs=100,
        imgsz=640,
        workers=0,          # 关键!Windows下建议设为0或1 
        batch=8,
        device=0 
    )
步骤2:关键参数调整
  • workers=0
    在Windows系统中,将数据加载的工作进程数设为0(禁用多进程),或尝试设为1(单进程)。这是避免该问题的核心参数。

  • 添加环境变量(可选)
    在代码开头添加:

    import os os.environ["LOGGING_LEVEL"] = "INFO" # 减少日志干扰

步骤3:检查代码执行逻辑
  • 确保所有训练相关的代码(如数据预处理、模型初始化)都在if __name__ == '__main__':代码块内执行。
  • 避免在全局作用域中直接调用训练函数。

其他注意事项

  1. PyTorch版本兼容性
    确认您的PyTorch版本与CUDA驱动兼容。建议使用torch==2.0.1+cu118等稳定版本。

  2. 显存占用控制
    您的RTX 3060显卡(12GB显存)在batch=6时可能接近显存极限,可尝试:

    • 降低batch值至4
    • 使用amp=False关闭混合精度训练
  3. 数据集路径验证
    检查tyyy.yaml 中标注的路径是否正确,确保训练集/验证集路径无空格或特殊字符。


扩展建议

若问题仍未解决,可尝试以下高级调试:

import multiprocessing if __name__ == '__main__': multiprocessing.freeze_support() # 显式启用多进程支持

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐