在利用yolo训练自制数据集的时候,出现了【OSError: [WinError 1455] 页面文件太小,无法完成操作】和【OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败】的错误。
D:\ProgramData\Anaconda3\envs\py38train\python.exe "D:/BaiduNetdiskDownload/pycv-learning/yolov5-spot detection/train.py"
wandb: Currently logged in as: genorgp (use `wandb login --relogin` to force relogin)
wandb: Appending key for api.wandb.ai to your netrc file: C:\Users\Administrator/.netrc
github: skipping check (not a git repository), for updates see https://github.com/ultralytics/yolov5
train: weights=pretrained\yolov5s.pt, cfg=models\yolov5s_spot.yaml, data=data\spot_data.yaml, hyp=data\hyps\hyp.scratch.yaml, epochs=300, batch_size=1, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, evolve=None, bucket=, cache=None, image_weights=False, device=0, multi_scale=True, single_cls=False, adam=False, sync_bn=False, workers=0, project=runs\train, name=exp, exist_ok=False, quad=False, linear_lr=False, label_smoothing=0.0, patience=100, freeze=0, save_period=-1, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest
YOLOv5 2022-1-26 torch 1.9.0+cu111 CUDA:0 (NVIDIA GeForce GTX 1650, 4096MiB)
Model Summary: 270 layers, 7041205 parameters, 7041205 gradients, 15.9 GFLOPs
Transferred 342/349 items from pretrained\yolov5s.pt
Scaled weight_decay = 0.0005
optimizer: SGD with parameter groups 57 weight, 60 weight (no decay), 60 bias
train: Scanning 'D:\BaiduNetdiskDownload\pycv-learning\data\spot_data\labels\train' images and labels...: 0%| | 0/3308 [00:00, ?it/s]Traceback (most recent call last):
ImportError: DLL load failed while importing groupby: 页面文件太小,无法完成操作。
Traceback (most recent call last):
MemoryError
Traceback (most recent call last):
File "D:\ProgramData\Anaconda3\envs\py38train\lib\site-packages\numpy\core\__init__.py", line 23, in
from . import multiarray
File "D:\ProgramData\Anaconda3\envs\py38train\lib\site-packages\numpy\core\multiarray.py", line 10, in
from . import overrides
File "D:\ProgramData\Anaconda3\envs\py38train\lib\site-packages\numpy\core\overrides.py", line 6, in
from numpy.core._multiarray_umath import (
ImportError: DLL load failed while importing _multiarray_umath: 找不到指定的模块。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 1, in
File "D:\ProgramData\Anaconda3\envs\py38train\lib\multiprocessing\spawn.py", line 116, in spawn_main
exitcode = _main(fd, parent_sentinel)
File "D:\ProgramData\Anaconda3\envs\py38train\lib\multiprocessing\spawn.py", line 125, in _main
MemoryError
wandb: Currently logged in as: genorgp (use `wandb login --relogin` to force relogin)
wandb: Appending key for api.wandb.ai to your netrc file: C:\Users\Administrator/.netrc
train: Scanning 'D:\BaiduNetdiskDownload\pycv-learning\data\spot_data\labels\train' images and labels...3308 found, 0 missing, 0 empty, 0 corrupted: 100%|██████████| 3308/3308 [00:15<00:00, 209.51it/s]
Traceback (most recent call last):
OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading "D:\ProgramData\Anaconda3\envs\py38train\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll" or one of its dependencies.
网上大概有以下几种解决方案,我已全部总结于此:
因为我的python环境安装在D盘,项目地址也在D盘 ,所以直接扩展D盘的虚拟内存。
因为上面3种方法都试遍了,还是没办法解决问题,所以我就找到下面这篇付费专栏文章,花了19.9元看了全文。
说到底,它里面的说法就是给pycharm配置了一个环境变量,具体内容见下图吧!
我配置完成后,再次跑程序,又出错了!20元打水漂了,因此我强烈怀疑这个作者就是在割韭菜,搞一个常见错误解决方法的付费专栏,专门坑那些因为异常/bug急得焦头焦脑的韭菜。
在高级电源选项中进行该项设置;界面和选项名称可能不一样,但是实际效果一样。
上面这些方法都试了没用,就试试这个玄学的方法吧!不过我感觉这个方法和重置内存、清理内存再启动的效果一样,所以还不如去任务管理器清一下残余进程。
上文没提到的几点。
我在出现这种错误的时候,其实还有其他不良反应:pycharm可能会秒退,电脑变卡、很多操作未响应,并且QQ也不明不白地报错、chrome浏览器的网页出现out of memory的错误。
之后我打开任务管理器,发现有好几个python.exe的进程在后台占了我大量的RAM,于是在我关闭它们之后,网页就显示正常了,电脑也流畅许多。
这个错误是在上午发生的,然后我中午跑程序的时候发生这个错误,竟然还可以继续训练,只不过obj、box、cls的取值都是nan。
下午再次训练的时候,发现竟然没有发生错误了;虽然那几个参数的值还是nan。
并且我把batch size的值从1调到4,也没有出现该错误,只是gpu_mem提高了(而我的显卡是GTX 1650 4GB,完全能承载2.42G的内存需求,所以理论上也是不应该出错的)。
小结里我想说什么呢?如果按照上面6种方法调试的过程中,出现电脑卡顿、其他程序崩溃、out of memory的错误时,一定要记得去任务管理器把那些因为程序崩溃没有自动清掉的进程人工kill掉,这样你在开始下一轮调试时以一个更好的电脑状态进行,操作效率、调试成功概率会有所提高。