YOLOV5训练时MAP、R、P值为0,测试时无检验框
问题引出:
今天帮一个大三的学生,跑yolov5,首先我观察他电脑的配置:显卡是GTX1650,进入英伟达控制面板发现他最高支持的cuda版本的是11.7,便给他装了11.6的cuda和cudnn,但是训练的过程中,发现出现了一段警告,警告的内容为:
C:\Users\28322\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\optim\lr_scheduler.py:136: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`. Failure to do this will result in PyTorch skipping the first value of the learning rate schedule.See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate "https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate", UserWarning)
并且训练中的每一个epoch的MAP值、P值以及R值均为0(如下所示)
解决过程:
说一下我的思路:
-
排除pytorch版本问题
我将pytorch版本卸载,换了个低一点的pytorch,进行训练的时候,发现依然出现这个问题,因此我排除是pytorch版本导致。 -
排除python版本和pytorch版本问题
因为在上午的时候,我给一个大二的学生配置yolov5,相同的显卡,相同的cuda但是那个大二的学生的python版本是3.8,而这个大三的学生python版本是3.7,所以我创建了一个python3.8的虚拟环境,然后安装好对应的pytorch版本后进行训练,发现该问题依然存在,所以排除。 -
接下来排除数据问题
紧接着,我怀疑是不是我的数据除了问题,我找了一个小型数据集,进行测试,发现依然出现这个问题,而这个数据集在很多人的电脑都跑通了,故排除数据集问题。 -
cuda版本问题
我在网上找相关的结局的时候看到两篇文章(下面的参考文献),都是再说这个问题,他们一阵见血的指出是cuda问题,所以我将cuda卸载,换成了cuda10.2之后,装pytorch为1.9.1 torchvision为0.10.1之后,进行训练,终于MAP、P、R值都有值了,芜湖,起飞!!!!
我们跑10个epoch进行测试,
并对训练出来的权重进行测试,最后成功显示出结果:
解决掉这个问题,也许只为了这一刻
参考文献:
https://www.iotword.com/4713.html
https://huaweicloud.csdn.net/63806d50dacf622b8df88045.html