YOLOv8训练后如何打印类别损失、mAP等训练结果?
YOLOv8训练结果(损失、mAP)查看方案
问题原因
你设置了val=False,关闭验证阶段后,model.train()不会返回包含完整结果的Results对象,同时mAP这类验证指标也无法计算。训练损失的获取需要通过模型的训练器对象或调整参数后的返回结果。
解决步骤
1. 调整训练参数,开启验证
首先修改训练代码,开启验证(val=True),这样才能计算mAP,同时让train()返回结果对象:
# 修正后的训练代码 results = model.train( data='data.yaml', epochs=1, imgsz=640, lr0=0.01, batch=32, device=[0, 1], optimizer='SGD', val=True, # 必须开启验证才能获取mAP plots=False )
2. 打印训练类别损失
有两种方式获取类别损失:
- 从训练器对象获取实时损失:训练过程中的每轮损失会存在
model.trainer.logs中:# 打印最后一轮的类别损失 print(f"类别损失: {model.trainer.logs['cls']}") # 查看所有训练损失项 print("所有训练损失数据:", model.trainer.logs) - 从返回的Results对象获取平均损失:开启
val=True后,results会包含训练周期的平均损失:if results is not None: print(f"训练平均类别损失: {results.results_dict['train/cls_loss']}")
3. 查看mAP等验证指标
mAP是验证阶段计算的指标,开启val=True后可以通过以下方式获取:
- 从Results对象获取:
if results is not None: print(f"mAP@0.5: {results.results_dict['metrics/mAP50']}") print(f"mAP@0.5~0.95: {results.results_dict['metrics/mAP50-95']}") # 查看所有验证指标 print("所有验证指标:", results.results_dict) - 从训练器对象获取:如果
results仍为None,直接从model.trainer提取:print(f"mAP@0.5: {model.trainer.metrics.box.map50}") print(f"mAP@0.5~0.95: {model.trainer.metrics.box.map}")
4. 离线查看详细结果
YOLOv8会自动将所有训练日志、损失、指标数据保存到项目根目录下的runs/detect/train*文件夹中,你可以直接查看其中的results.csv和metrics.csv文件,里面包含每轮的详细数据。
内容的提问来源于stack exchange,提问作者Rakib Ul Haque
相关产品推荐
相关产品推荐

