YOLOV5/v7/v8训练数据集P、R、mAP等均为0

问题描述


当准备好数据集进行训练时,其余正常,可以识别到label,但是P,R,map这些地方都是0,或者出现预训练几轮是正常的数值,但是后几轮就全部为0,如图等异常情况。

如果确保数据原图和标签是匹配的,或者上传的文件也不是损坏的,那就有可能是梯度的问题了。

总览:导致问题的原因


导致这一问题的原因主要分为如下几个方面,在这里先作总结,具体方法在之后展开。有经验的同学可以直接根据本节进行快速排查,以提高效率。

1.CUDA版本与驱动程序不兼容:CUDA版本需与GPU驱动程序兼容。
2.CUDA库的路径设置存在问题:如果CUDA库路径未正确配置,PyTorch将无法找到CUDA库文件。
3.PyTorch版本与CUDA版本不匹配:安装的PyTorch版本需与CUDA版本匹配。
4.编译问题:如果使用预编译的PyTorch二进制文件,可能存在与CUDA版本不匹配的问题。
5.冲突:可能存在其他软件包或库与PyTorch或CUDA发生冲突,可能代码和pytorch本身问题-例如半精度混合。

6.有答案提出梯度爆炸更换优化器。

可能1:CUDA版本与驱动程序不兼容

驱动程序与CUDA的兼容,指的是GPU驱动程序与安装的CUDA版本相匹配,并且能够正确地与CUDA库进行通信和协作。可以按照如下步骤排查二者是否兼容:

1. 查看CUDA版本。

在终端输入如下指令:

nvcc -V

查看信息如下:

这里的CUDA版本是12.2。

2. 查看GPU驱动程序版本。

在终端输入指令:

nvidia-smi

找到Driver Version,例如我的是537.13

3. 检查二者是否兼容。

驱动程序与CUDA的兼容性匹配才能用,因为PyTorch和其他基于CUDA的库需要与GPU驱动程序进行交互才能正确运行。如果驱动程序与CUDA不兼容,可能会导致无法正常使用CUDA功能或出现错误

浏览此链接即可查看对应版本。

4. 更新驱动程序或更改CUDA版本。

若二者不匹配,可以选择更新驱动程序或更改CUDA版本。

可以通过访问NVIDIA官方网站下载并安装适当的驱动程序版本。在安装新的驱动程序之前,请确保先卸载旧的驱动程序,并按照安装指南进行正确的安装,

可能2:CUDA库的环境变量路径设置错误

简单来说,如果CUDA库路径未正确配置,PyTorch将无法找到CUDA库文件。在这种情况下,即便CUDA与Pytorch的安装都是正确的,也会导致错误。先按照需求下载好cuda和cudnn

引用此篇回答此篇回答

1.cuda的官网下载地址:cuda-toolkit-archive

2.示例在这里选择的是 CUDA Toolkit 12.2.1

简单步骤如下:

3.点击后等待一会即可进行下载,最后“Download”进行本地下载

4.下载完成后运行exe文件进行下载

无脑安装后输入cmd进入终端窗口输入nvcc -V查看是否安装完成。

设置环境变量:默认安装路径下,都在c盘固定位置。

这里借用其他人的配置图

1.我们打开“编辑系统环境变量”

2.点击“环境变量”

3.查看系统变量中是否有变量CUDA_PATH和CUDA_PATH_V12_2(不同版本V后数字不同),并检查路径是否正确

若没有则添加两变量并添加正确路径;若错误则修改成正确路径(路径为选项,自定义安装位置时选择的路径)

4.查看系统变量中的Path是否有v12.2\bin,若没有则添加正确路径;若错误则修改成正确路径(路径为选项,自定义安装位置时选择的路径)

不对的话需要重装cuda,注意把之前的cuda删除干净。

CUDNN的安装与配置

(1)CUDNN的下载

1.CUDNN官网下载地址:cudnn-archive

2.选择CUDNN支持CUDA版本下载,进入登陆邮箱即可下载。

(2)CUDNN的安装与配置

1.下载好CUDNN的压缩包后进行解压,得到如图所示文件

2.打开\NVIDIA Computing Toolkit\CUDA\v12.2,将CUDNN对应bin、lib、include三个文件与CUDA对应的bin、lib、include进行合并,将CUDNN内文件全部复制到CUDA对应文件夹内

3.打开“编辑系统环境变量”,点击“环境变量”,点击“系统变量”中Path添加C:\Program Files\NVIDIA Computing Toolkit\CUDA\v12.2\lib和v12.2\libnvvp以及v12.2\include,点击“确定”完成配置

借用示例:

(3)检查CUDNN是否安装成功
打开C:\Program Files\NVIDIA Computing Toolkit\CUDA\v12.2\extras\demo_suite,查看是否有文件bandwidthTest.exe以及deviceQuery.exe,若存在则在该文件中打开cmd运行两.exe文件

运行bandwidthTest.exe和运行deviceQuery.exe出现信息即可。

可能3:PyTorch版本与CUDA版本不匹配

如果在anaconda prompt中直接使用pip install pytorch和conda install pytorch命令直接下载,不指定版本肯定是不行的。大多数其他匹配正确的情况下是此问题疏忽导致,可更换不同版本pytorch进行试验。如实在不行那就回退cuda版本

需要在pytorch官网去下载相对应的版本。

这里分为conda下载连接和pip下载。但是注意这里的pytorch版本是不一样的,查看本地cuda寻找对应的pytorch,例如示例为cuda12.2,即可下载12.2以下的任意版本,这里第一次下载为

# CUDA 12.1
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121

这里遇到的问题真是这个,对应好cuda,cudnn,pytorch后出现map为0 

此问题解决:更换不同的版本进行适配,最终更换v2.2.2解决问题。

可能4:编译问题

我没有遇到过这种情况,我也不推荐使用源代码编译PyTorch。如果排查到这一步依旧没有解决问题,建议首先更换Pytorch版本尝试(例如由conda安装改为pip安装)。如果依旧无法解决,再参照使用源代码编译PyTorch的相关文章。

可能5:软件包或库冲突

为了避免这种情况,建议新建一个conda环境,在新的conda环境下安装Pytorch。

由于NVIDIA 官方的一些软件问题,导致了PyTorch里面一些

具体解决方案:借用此示例说明此篇回答

1、_amp注释掉直接把amp赋值为False,如下图:

2、这样做之后在运行train.py发现训练时就不会有nan值了。如果还有,那就应该就关闭这篇博客了,考虑下其他方法了。

     然后,你就会发现validation时会出现P/R/map全部为0。然后你就继续在train.py里面搜索half关键字,把所有有.half()变为.float(),如下图:

到这一步为止,我train时出现为nan和0的问题已经解决了。

 3、如果发现问题依旧没有解决,还需要在val.py里面将所有的half改为False,同时im.half() if half else im.float() 改为 im.float()。如下图:

以上3步完成之后,再次运行train.py发现没有问题了。

这个解决办法的原理,就是把显卡半精度浮点型数据改为单精度的浮点型去运算。这样虽然精度高了,但是训练时长也相应会增加一些、显存占用也会增加一些,

可能6:优化器梯度爆炸

有回答归类于梯度爆炸导致map参数为0,

解决方法:把优化器SGD更改为ADAM或者ADAMW实验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值