【问题标题】:I got NaN for all losses while training YOLOv8 model我在训练 YOLOv8 模型时得到了所有损失的 NaN
【发布时间】:2023-02-26 06:28:59
【问题描述】:

我正在使用这段代码在 cuda 上训练 yolov8 模型:

from ultralytics import YOLO
import torch
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)
results = model.train(data="data.yaml", epochs=15, workers=0, batch=12)  
results = model.val()  
model.export(format="onnx")

我让 Nan 承担所有损失

Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
1/15      1.74G        nan        nan        nan         51        640:   4%

我试过在 cpu 上训练模型并且效果很好。当我安装 cuda 并开始对其进行培训时,问题就出现了。

我预计会出现读取数据错误或其他错误,但一切正常。

我认为这与内存有关,因为当我减小模型的图像大小时它工作正常,但是当我为相同的减小图像大小增加批处理大小时它再次显示 NaN 。所以这是图像大小、批量大小和内存之间的权衡。我不确定 100% 是否正确。但这是我通过实验得出的结论。但如果你对这个问题有好的答案,请分享。

【问题讨论】:

    标签: pytorch computer-vision yolo yolov7


    【解决方案1】:

    我有一个类似的问题,但发现当我升级到最新版本的 ultralytics 时它就消失了。一切都在 ultralytics 8.0.26 的环境中工作,然后我在 8.0.30-something 的环境中看到了 NaN 丢失问题。使用 ultralytics 8.0.42 创建新环境似乎可以解决问题。

    【讨论】:

      【解决方案2】:

      我在尝试训练我的自定义数据集时遇到了同样的问题。正如这里的其他人所推荐的,我也尝试将 ultralytics 版本降级到 8.0.42,但这没有用。修复它的方法是运行如下命令:

      yolo task=detect mode=train model=yolov8s.pt data="./data/data.yaml" epochs=50 batch=8 imgsz=640 device=0 workers=8 optimizer=Adam pretrained=true dropout=true val=true plots=true half=true save=True show=true save_txt=true save_conf=true save_crop=true optimize=true lr0=0.001 lrf=0.01 fliplr=0.0
      

      尝试打开 args 文件 (runsdetectrainrgs.yaml) 并根据那里或文档 (https://docs.ultralytics.com/cfg/) 中可用的内容不断更改参数,也许在某些时候您可以解决问题。我相信您应该尝试更改的主要参数是将设备更改为“cpu”。

      我怀疑问题可能出在此处讨论的 GTX16 系列 (https://github.com/ultralytics/ultralytics/issues/1148)。

      【讨论】:

        猜你喜欢
        • 2019-06-03
        • 1970-01-01
        • 2020-10-17
        • 2017-10-12
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2022-06-14
        • 2016-09-10
        相关资源
        最近更新 更多