报错:“RuntimeError:An attempt has been made to start a new process before the current process has...”

运行代码时错误提示:

RuntimeError:
An attempt has been made to start a new process before the current process has finished its bootstrapping phase.

​ This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module:

​ if name == ‘main’:
​ freeze_support()
​ …

​ The “freeze_support()” line can be omitted if the program is not going to be frozen to produce an executable.
在这里插入图片描述

解决办法
  1. 定位到报错的代码处,比如:

    在这里插入图片描述

    在这段代码前加上:if __name__ == '__main__':
    (一般加在整个epoch的循环前面)

  2. 将DataLoader中的num_workers改为0.
    在这里插入图片描述

### 解决YOLO运行时出现的RuntimeError启动新进程失败的方法 当在Windows环境下使用YOLOv8进行训练并设置批量大小(batch size)为4时,由于YOLOv8内部利用`multiprocessing`库来实现多进程图像加载处理功能,在此情况下容易触发`RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.` 错误[^1]。 为了避免上述错误的发生,应当确保所有的多进程操作被放置在一个名为`if __name__ == '__main__':` 的保护语句之下。这主要是因为在Windows操作系统中,Python采用的是`spawn`而非`fork`的方式创建新的子进程;而这种方式要求任何涉及多线程或多进程的任务都需置于该条件判断内执行,以此防止不必要的重复初始化过程引发异常情况[^2]。 具体来说,可以按照下面给出的例子调整代码结构: ```python from ultralytics import YOLO if __name__ == '__main__': # 加载一个预定义配置文件构建的新模型实例 model = YOLO('yolov8n.yaml') # 开始训练流程,并指定数据集路径和其他必要参数 results = model.train( data='D:/YOLOv8Train/v8_train_datasets/mktk_dataset/data.yaml', device='0', # 使用GPU编号,默认第一个可用GPU epochs=5, batch=4, # 批量大小设为4 verbose=False, imgsz=640 # 输入图片尺寸设定 ) ``` 此外,如果计划将应用程序打包成可执行文件,则建议加入`freeze_support()`函数调用来进一步增强兼容性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值