You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv5小目标检测训练出现obj/box列NaN、mAP始终为0如何解决?

YOLOv5训练小目标(划痕)出现NaN损失、mAP为0排查方案

1 数据集与标注问题排查

  • 检查标注文件合法性:打开训练集对应的txt标注文件,确认所有标注坐标都是0~1之间的归一化数值,不存在负值、大于1的数值,也没有标注框宽高为0的情况。划痕属于宽高比极大的极小目标,Roboflow导出时可能出现标注被预处理截断、识别为无效框过滤的问题。
  • 核对data.yaml配置:确认nc字段的数值和你实际标注的类别数量完全一致,路径字段不要包含中文、空格、特殊字符,train、val指向的是图片存放路径,而非标注文件路径。

2 小目标适配参数调整

  • 重新生成锚框:YOLOv5默认锚框适配COCO常规尺寸目标,和划痕这类极小目标匹配度极低,会导致定位损失计算溢出出现NaN。可运行自带工具生成适配你数据集的锚框:
    python utils/autoanchor.py --data 你的data.yaml路径 --img 训练输入分辨率
  • 提升输入分辨率:小目标检测建议把训练输入分辨率调整到1280及以上,不要用默认的640,避免划痕目标在输入图中仅占数个像素,无法提取有效特征。

3 训练超参调整

  • 降低初始学习率:默认初始学习率0.01对小目标数据集来说普遍偏高,容易导致参数更新震荡、损失溢出为NaN,可在训练命令中添加--lr0 0.001降低学习率后重试。
  • 调整数据增强策略:Roboflow的随机裁剪、大幅缩放增强容易把极小的划痕目标裁掉或缩到不可见,导致训练时传入无标注负样本,损失计算异常。可先关闭所有复杂增强,仅保留基础翻转、缩放,确认训练能正常跑通后再逐步添加增强策略。
  • 调整batch size:batch size过小会导致批归一化层计算异常,建议batch size至少设为8,显存不足的话可换用更小的模型(如yolov5s)或适当降低输入分辨率。

快速验证方法

取10张左右标注确认无误的图片拆分训练、验证集,跑3-5轮短训练。如果损失正常下降、mAP有数值,说明问题出在全量数据集或全局参数配置;如果仍出现NaN,可检查你使用的YOLOv5代码是否为官方原版,有没有自行修改过损失计算相关的逻辑。

内容的提问来源于stack exchange,提问作者Data science folk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:09:04