使用软件:VSC2021
GPU:GTX1650
cuda版本:11.1
学着自己用yolov5模型跑自己的数据集,顺便学习一下深度学习的知识。在对自己第一个数据集训练时一切正常,但是结果不同就想着新弄个数据集训练,但是对再对新的数据集训练的时候,无论怎么调试,都在train.py的import torch处报错:[winerror 1455],已经牢牢记住这个数字了,于是写一篇文章记录一下处理这个报错的过程。
上网查了一些方法,但是可能是我的电脑的问题,最常见的三种方法对我而言没有作用。
常见的三种方法
方法一:重启电脑和IDLE相当于清一下当前的RAM了,怕有什么大的程序在偷摸运行使得RAM很小从而报错,但是在运行程序的时候实际上我是只打开了VSC,和预想的一样,这个方法没能解决问题。
方法二:修改dataloaders.py中的一个参数 我的yolov5文件目录结构如下图:
这个方法是在utils/dataloaders.py中,修改num_works参数为0,大概在140+行处,如下图。
结果是仍然报错。
操作步骤如上面所给的文章链接一样,我的anaconda安装于D盘,我给了D盘10240MB,但是还是没有用。
之后就是疯狂被折磨,一运行程序内存就爆掉然后电脑卡住,非常无语。期间我还试着调整训练时图片大小、batch-size、epoch等参数,也都没有作用。
新的发现 对新的数据集训练完全训练不了后,我试着对原来那个训练结果不好的数据集训练,发现竟然可以成功运行!这是令我感到非常奇怪的,于是我开始观察两个数据集之间的不同,发现了两点:①数据量不同,②原来的数据集有.cache文件而新的没有。于是冲着这两个方向去求解。
①数据量不同
通过对新旧数据集的调整(主要是对新数据集的删除),我把两个数据集的图片数量调整到差不多,然后满怀期望地尝试,然后结果还是不行,依然报错,依然内存爆掉。于是看第二个方向。
②.cache文件
关于cache,这个似乎是加速数据读取的一个缓存文件。新旧数据集文件中第二个不同就是一个有(旧的),一个没有(新的)这个文件,但是怎么去创建.cache文件咱也不会(我是小菜鸡一个),就上网寻找关于.cache文件的解决方法,终于找到了一篇文章。
成功解决问题的文章
在文中,我看到了关于cache文件的处理方法,于是学着文中给的步骤去操作。对yolov5文件目录下的utils/general.py文件参数进行修改。大概在40+行处,将NUM_THREADS参数一行(如下图,但是将8改为1),修改为NUM_THREADS=min(1,max(1,os.cpu_count()-1),在提示创建好.cache文件后,终止程序,再改回8然后再重新运行。
以及在训练模型的代码train.py中,找到workers项,将其修改为0(如下图)。这个改成0后不用改回去。
然后,运行train.py程序,程序加载yolov5模型参数,然后在得到如下图所示的提示(黄色箭头处)后,可以终止程序(我这里是用的F5调试做的,方便暂停和终止)。这个时候到相应的文件目录下面看,就会发现相应的cache文件已经创建了,然后再把general.py文件的参数调回去(其他的我没调),再重新运行程序就可以了。
在VSC打开文件夹后,如果我们需要查找参数变化、定义的位置,可以如下图所示查找(左侧栏的放大镜图标,点击后输入参数名字搜索即可)。