YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

目录

0 前言(用处不大,可以直接看解决办法)

1 产生问题的原因

2 解决办法

YOLO V5

YOLO V7

2 小结


☆ 这个问题是GTX16xx用户的大坑,基本上每个GTX16xx用户使用YOLO系列算法,都会遇到这些问题。

这个方法是不彻底的解决办法,牺牲了训练的时间来换取问题的解决,经过本人在GTX1660TI笔记本上测试YOLOV5和YOLOV7算法均成功解决了。


0 前言(用处不大,可以直接看解决办法)

最近正在做目标检测相关的算法,因为要求实时性要很高,所以选择了YOLO系列算法。最先开始选择的是刚出炉新鲜的YOLOV7算法,训练时没有问题,但是在最终测试时,发现检测不出来任何的bbox,开始以为是没有训练好,但是发现训练时的validation都有bbox。最后决定还是老实采用YOLO V5算法(为什么不选美团的YOLO V6?YOLO V6在论文外的数据集,表现还没有YOLOV 5好,大家dddd),不过使用YOLOV5 时又发现了训练时出现了nan值,于是在github上yolov5问答里找到了解决办法(不使用AMP)。但是有发现了validation时出现P\R\map全为0值。于是找呀找,最后都没有发现问题所在。最后在阅读YOLO V5 的train.py的源代码发现了一些解决办法问题。

1 产生问题的原因

由于NVIDIA 官方的一些软件问题,导致了PyTorch里面一些CUDA代码有些问题,就是fp16(float16)数据类型在卷积等一些运算的时候会出现nan值。导致了训练时候出现了nan值,故而在validation时就会检测不到导致了上述情况。

2 解决办法

YOLO V5

里面检测没有nan值、不识别问题,就只有训练的时候有问题。

下面正式开始解决问题,在train.py搜索amp把check_amp注释掉直接把amp赋值为False,如下图:

这样做之后在运行train.py发现训练时就不会有nan值了。如果还有,那就应该就关闭这篇博客了,考虑下其他方法了。然后,你就会发现validation时会出现P/R/map全部为0。然后你就继续在train.py里面搜索half关键字,把所有有.half()变为.float(),如下图:

这样之后,你就会发现

——还是没有解决问题。

要解决这个问题,还需要在val.py里面将所有的half改为False,同时im.half() if half else im.float() 改为 im.float()。如下图:

 这样做之后,再次运行train.py发现没有问题了。

YOLO V7

经测试,train.py没有问题,主要还是在detect.py里面有问题。主要还是把每个地方.half()改为.float()或者把half赋值为False,如下图:

3 小结

 其实,归根究底就是NVIDIA对GTX16xx相关CUDA包有问题,有其他人说吧PyTorch版本降为1.10.1和CUDA 10.2,我也试过,确实能解决问题,但是训练时长长了很多,而且现在PyTorch官方已经不怎么支持使用CUDA 10.2版本了。

这个解决办法的原理,就是把显卡半精度浮点型数据改为单精度的浮点型去运算。这样虽然精度高了,但是训练时长也相应会增加一些、显存占用也会增加一些,但是,这样总比不能训练和不能检测要好些吧,要是有更好的办法,欢迎在评论区分享分享。。

contact_details_qq=277746470

### 回答1: 可能是由于以下原因导致的: 1. 数据集中没有目标物体或者标注有误,导致模型无法学习到有效的特征。 2. 训练参数设置不当,例如学习率过大或过小,训练轮数不足等。 3. 硬件配置不足,例如显存不足,导致模型无法正常训练。 建议检查数据集和标注是否正确,调整训练参数,增加训练轮数,并确保硬件配置足够。 ### 回答2: YOLOv5是一种流行的目标检测算法,它在许多计算机视觉任务中都得到了广泛应用。在YOLOv5的训练过程中,p、r和map是非常重要的评估指标,它们能够反映出模型的性能。 当p、r和map全为0,这通常表示着模型的性能非常糟糕,可能存在一些问题导致训练结果无法评估。 有几个常见的原因会导致这种情况: 1. 数据问题:如果训练数据集中存在一些问题,例如数据标注不准确或者存在缺失标签等情况,都可能导致模型的性能下降。因此,在训练之前应该对数据集进行仔细的检查和处理,确保数据的质量和完整性。 2. 模型参数问题:模型的参数设置也非常重要,如果参数设置不合理,例如学习率过高或过低,正则化项过强等,都会对模型的训练效果造成严重影响。因此,在进行模型训练前,需要仔细地选择参数并进行调优。 3. 训练过程问题:训练过程中存在一些问题也可能导致p、r和map全为0。例如过拟合或欠拟合等情况都需要对训练过程进行仔细调整。此外,可能需要将训练数据集划分成更小的批次,使用更小的学习率等。 4. 环境问题:最后,环境问题也可能会影响p、r和map指标。例如,训练的硬件设备性能不佳或训练过程中的崩溃等情况都可能影响模型的训练效果。因此,在训练之前需要确保环境的稳定性和性能。 总之,当p、r和map全为0,需要对训练过程进行仔细的调查和诊断,寻找问题的根源并进行相应的解决。只有在充分理解和解决这些问题后,才能获得良好的模型性能和准确的评估结果。 ### 回答3: 在训练yolov5模型的过程中,可能会遇到PRmAP均为0的情况,这通常是由于以下几个原因导致的: 1. 数据集问题:数据集可能存在错误标注或者数据严重失衡,导致模型训练无法学习到有效信息。此可以检查数据集标注是否正确,并尝试平衡数据集。 2. 训练参数问题:可能是训练过程中的一些参数设置不合理导致结果为0。此需要检查模型参数和训练参数,如学习率等。 3. 模型结构问题:模型结构的选择和设计也很重要,如果选择的模型结构不合适,或者设计的不合理,有可能会导致训练结果为0。可以尝试在模型结构上进行改进和调整,比如增加层数或调整卷积核大小等。 4. 训练数据不足:如果训练集不够大或者数据量不足,也会导致PRmAP0。此可以尝试增加训练集的大小或者使用数据增强进行扩充。 综上所述,当yolov5训练PR和mAP全为0,需要仔细检查数据集、训练参数、模型结构以及训练数据是否充足,找到问题所在然后进行相应的调整和改进,从而提高模型的训练效果。
评论 169
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有头发的垃圾猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值