YOLOv5单标签自定义训练mAP始终为0,求解决方案
YOLOv5单标签训练mAP始终为0的排查方案
问题现象
尝试进行YOLOv5单标签自定义训练,已完成YAML文件配置,但无论训练多少epoch,mAP值始终为0,训练日志如下:
Epoch gpu_mem box obj cls labels img_size 1/2 0.614G 0.07749 0.03705 0 7 640: 100% 15/15 [00:01<00:00, 10.99it/s] Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 3/3 [00:00<00:00, 26.59it/s] all 12 14 0 0 0 0 Epoch gpu_mem box obj cls labels img_size 2/2 0.614G 0.07758 0.03295 0 5 640: 100% 15/15 [00:01<00:00, 10.98it/s] Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 3/3 [00:00<00:00, 28.13it/s] all 12 14 0 0 0 0
排查方向及解决方法
- 检查数据集标注格式
- 确认标注文件(.txt)符合YOLO要求:每行格式为
class_id x_center y_center width height,所有坐标为归一化后的值(相对于图片宽高),绝对坐标会导致模型无法识别有效标签。 - 单标签任务中,class_id必须为
0(YOLO类别从0开始索引),若标注写了其他数值,会与YAML配置不匹配。
- 确认标注文件(.txt)符合YOLO要求:每行格式为
- 验证YAML配置文件
- 确保
nc(类别数)设为1,names列表仅包含一个类别名称,例如names: ['your_class']。 - 检查train/val/test路径是否正确,对应文件夹内图片与标注文件一一对应(如img1.jpg对应img1.txt)。
- 确保
- 排查数据集问题
- 当前验证集仅12张图片、14个标签,样本量过小会导致模型无法学习有效特征,建议扩充数据集至至少几百张训练样本。
- 确认验证集标注文件无缺失或损坏,带标签的图片均有对应.txt文件。
- 检查损失异常原因
- 日志中cls损失始终为0,说明模型未接收类别损失信号。排查训练命令是否误加
--nosave等禁用类别训练的参数,或预训练权重类别数不匹配(建议用yolov5s.pt这类通用权重,避免用多类别训练后的权重)。
- 日志中cls损失始终为0,说明模型未接收类别损失信号。排查训练命令是否误加
- 调整训练参数
- 增加训练epoch数(如50-100),当前仅训练2个epoch,模型未完成收敛。
- 针对小数据集调整学习率,可尝试设置
--lr0 0.001降低初始学习率。
内容的提问来源于stack exchange,提问作者user19807726
相关产品推荐
相关产品推荐

