YOLO运行报错:raise RuntimeError(‘‘‘RuntimeError:An attempt has been made to start a new process before
错误提示表明在Windows环境下,多进程的启动方式(spawn)要求主模块必须被保护在代码块中,否则子进程会重复执行主模块的代码。YOLO的数据加载器默认会使用多进程(通过workers参数控制),而Windows系统的进程创建方式与Linux不同,需要严格遵守的编程规范。
错误原因分析
-
多进程启动顺序问题
错误提示RuntimeError: An attempt has been made to start a new process...
表明在Windows环境下,多进程的启动方式(spawn
)要求主模块必须被保护在if __name__ == '__main__':
代码块中,否则子进程会重复执行主模块的代码。 -
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__':
代码块内执行。 - 避免在全局作用域中直接调用训练函数。
其他注意事项
-
PyTorch版本兼容性
确认您的PyTorch版本与CUDA驱动兼容。建议使用torch==2.0.1+cu118
等稳定版本。 -
显存占用控制
您的RTX 3060显卡(12GB显存)在batch=6
时可能接近显存极限,可尝试:- 降低
batch
值至4 - 使用
amp=False
关闭混合精度训练
- 降低
-
数据集路径验证
检查tyyy.yaml
中标注的路径是否正确,确保训练集/验证集路径无空格或特殊字符。
扩展建议
若问题仍未解决,可尝试以下高级调试:
import multiprocessing if __name__ == '__main__': multiprocessing.freeze_support() # 显式启用多进程支持
更多推荐
所有评论(0)