用ultralytics库训练YOLO模型训练中验证集Loss为NaN、mAP为0问题解决方案
YOLO训练遇到验证损失NaN问题的解决方案 在使用ultralytics库训练YOLO模型时,验证阶段出现损失值NaN但mAP50等指标仍能计算(有时为0)的问题。研究发现这与显卡的自动混合精度(AMP)功能有关。解决方法是在训练时关闭AMP功能,可通过以下任一方式实现: 在train()函数中设置amp=False参数 修改配置文件default.yaml添加amp: False 使用CLI命
·

问题描述:
在使用ultralytics库训练YOLO模型时,遇到一个非常奇怪的问题:训练过程中的验证损失(loss)出现了NaN,而验证的评价指标如mAP50却能正常计算(有时mAP都也为0)。经过深入研究发现,这个问题和显卡有关。
训练时在控制台打印的结果显示,训练集有正常显示loss,到验证时出现指标为0:
解决方案
关闭显卡AMP(Automatic Mixed Precision, 自动混合精度)即可
在 YOLOv8 训练时关闭 AMP(Automatic Mixed Precision,自动混合精度),可以通过以下方法实现:
方法 1:在 train() 时设置 amp=False
在调用 Ultralytics YOLOv8 的训练函数时,直接传入 amp=False 参数:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.pt") # 或 yolov8n.yaml
# 训练(关闭 AMP)
results = model.train(
data="coco128.yaml",
epochs=100,
imgsz=640,
batch=16,
amp=False, # 禁用自动混合精度
)
方法 2:修改 train.py 或 default.yaml 配置文件
如果你使用的是 train.py 或自定义的 YAML 配置文件(如 default.yaml),可以添加或修改:
# default.yaml
amp: False # 关闭 AMP
方法 3:通过命令行参数关闭 AMP
如果你使用 CLI 命令训练,可以添加 amp=False:
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 amp=False
更多推荐
所有评论(0)