【问题标题】: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)。