pytorch 我在训练YOLOv8模特时所有损失都拿了NaN

7rfyedvj  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(1115)

我正在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")

我会得到南的所有损失

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%是否正确。但这是我通过实验得出的结果。但如果你对这个问题有好的答案,请分享一下。

3qpi33ja

3qpi33ja1#

我也遇到过类似的问题,但是当我升级到最新版本的ultralytics时,这个问题就消失了。在ultralytics 8.0.26的环境中一切正常,然后我在8.0.30左右的环境中发现了NaN丢失的问题。创建一个ultralytics 8.0.42的新环境似乎解决了这个问题。

rekjcdws

rekjcdws2#

我在尝试训练我的自定义数据集时遇到了同样的问题。正如这里其他人所建议的,我也尝试将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文件(runs\detectrain\args.yaml),并根据那里或docs(https://docs.ultralytics.com/cfg/)中可用的内容不断更改参数,也许在某个时候你可以解决这个问题。我相信你应该尝试更改的主要参数是设备到“cpu”。
我怀疑问题可能出在这里讨论的GTX16系列(https://github.com/ultralytics/ultralytics/issues/1148)上。

相关问题