yolov5 训练的时候精度召回率都为nan

img


而且训练完后总结也都是0。。 混淆矩阵全都这背景那一块 保存结果的文件夹里面 预测的图片也全都是0😭😭 这是为什么啊? 有没有佬捞一下

如果在使用YOLOv5进行训练过程中,遇到精度和召回率的数值均为NaN的情况,可能有以下情况导致:
数据集不完整或者样本不足:如果数据集的标注不完整,或者存在未标注的对象,会导致YOLOv5在训练阶段无法进行有效的学习。因此,需要确保数据集的标注的可靠性和完备性,比如确保避免图像中存在未标注的对象。
激活函数出现问题:YOLOv5中用到的Swish和Mish激活函数可能出现溢出的情况,导致计算结果为NaN。解决方法可以使用其他的激活函数,例如ReLU、tanh等来替换。
学习率太大或太小:如果学习率设置不合理,会导致梯度爆炸或梯度消失,从而训练结果不收敛或过程中出现NaN。建议调整学习率设置,使之逐渐衰减,从而达到最优的训练效果。
权重初始化不合理:如果网络权重的初始化不合理,可能导致激活函数的输入值过于极端,从而出现数值为NaN的情况。可以尝试使用其他权重初始化方法,例如Xaiver等。
其他因素:如果以上问题都不是原因,则可能是其他因素导致,可以通过日志和调试信息等进行排查。
综上所述,如果在使用YOLOv5训练网络时遇到精度和召回率为NaN的情况,需要仔细排查,并针对不同情况采取不同的解决方式。

【以下回答由 GPT 生成】

解决方案

通过检查给出的信息,可以确定以下原因导致精度和召回率为nan的问题:

  1. Training script中定义了cls_lossinstancesbox_lossobj_loss的初始值为nan
  2. 可能存在版本不兼容的问题。

对于这些问题,可以采取以下步骤来解决:

  1. 修正train.py的代码,确保cls_lossinstancesbox_lossobj_loss的初始值是正确的。

修改train.py:

import torch
from thop import profile

# ...

def train():
    # ...

    cls_loss = 0.0
    instances = 0.0
    box_loss = 0.0
    obj_loss = 0.0
    # ...

    print(f"Cls Loss: {cls_loss}\tInstances: {instances}\tBox Loss: {box_loss}\tObj Loss: {obj_loss}")

    # ...
  1. 更新requirements.txt,确保所有依赖包的版本是兼容的。

修改requirements.txt:

Scipy>=1.4.1
torch>=1.7.1
torchvision>=0.8.2
tqdm>=4.60.0
Untralytics>=0.3.5

这些步骤应该能够解决精度和召回率为nan的问题。重新运行训练脚本时,确保所有正确的依赖项已安装并位于兼容的版本。

希望这些解决方案对你有帮助!如果你有任何其他的问题,请随时问我。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^