一文讲清楚YOLO模型训练的各种指标

训练 YOLO 时,终端会不断跳出 box_losscls_lossdfl_loss、Precision、Recall、mAP50、mAP50-95 等数字。最容易犯的错误,是只盯着最后的 mAP,或者看到 loss 降了就觉得模型已经变好。

更实用的理解方式是:loss 用来判断模型有没有学稳,Precision 和 Recall 用来判断它错在哪里,mAP 用来比较模型整体效果,速度指标决定它能不能部署。 这些指标放在一起看,才能知道下一步该调数据、调训练,还是改模型。

一、先分清:训练 loss 和验证指标回答的不是同一个问题

YOLO 的训练日志大致可分成两组。

第一组是 loss,例如 box_losscls_loss 和较新 YOLO 版本中常见的 dfl_loss。它们来自训练过程,反映模型正在怎样拟合当前训练数据;数值通常越低越好,但不适合单独当作最终成绩。

第二组是验证指标,例如 Precision、Recall、mAP50、mAP50-95。它们在验证集上计算,更接近模型面对未参与训练的图片时的表现。选择 best.pt、比较不同实验,主要看这一组。

一个常见现象是:训练 loss 还在下降,验证集 mAP 却不再提高,甚至开始回落。这往往意味着模型正在记住训练集中的细节,泛化能力没有同步提升。此时继续训练未必有收益,应检查数据量、数据增强、正则化和早停设置。

反过来,loss 在不同实验之间也不能直接横向比较。换了损失函数、输入尺寸或数据增强后,loss 的量纲和难度都可能改变。实验 A 的 loss 更低,不等于它一定比实验 B 检测更好;验证集指标才是更可靠的裁判。

二、先看懂 IoU,再区分 TP、FP 和 FN

看懂所有检测指标,先抓住两个判断。

IoU(交并比) 衡量预测框和真实框重叠得有多好:

IoU = 预测框与真实框的交集面积 / 两个框的并集面积

IoU 越接近 1,说明框的位置和大小越准确。评估时通常先设一个阈值,例如 IoU ≥ 0.5;只有类别也对、框也满足阈值的预测,才算一次正确检测。

接着会得到三类结果:

  • TP(真正例):该检出的目标检出来了,类别和框都对。
  • FP(假正例):模型报出了一个目标,但它其实不存在、类别错了,或框偏得太远。
  • FN(假负例):图片里本来有目标,模型却漏掉了。

这里有个特别容易忽略的细节:同一个真实目标如果被预测出多个框,经过置信度排序和匹配后,通常只有一个能成为 TP,其余重复框会计为 FP。所以“框画得很多”不会自动提高效果,反而可能拉低 Precision。

三、Precision、Recall、F1:先判断模型是在乱报,还是在漏报

Precision 和 Recall 都由 TP、FP、FN 得来,但关注点不同:

Precision = TP / (TP + FP)

它回答的是:模型报出来的框里,有多少是真的。Precision 低,说明误检较多,例如把背景、阴影或相似物体当成目标。

Recall = TP / (TP + FN)

它回答的是:图片中真实存在的目标,有多少被找到了。Recall 低,说明漏检较多,常见于小目标、遮挡目标、少数类样本或置信度阈值过高的情况。

F1 是 Precision 和 Recall 的调和平均:

F1 = 2 × Precision × Recall / (Precision + Recall)

它适合用来找一个相对均衡的置信度阈值。YOLO 输出的 BoxF1_curve.png,就是在不同置信度阈值下观察这种平衡。部署时不要机械沿用默认 conf=0.25:安防告警更怕误报,可适当提高阈值;缺陷检测或危险目标识别更怕漏报,则应优先保证 Recall,再结合业务允许的误报量确定阈值。

可以用下面的组合快速定位方向:

  • Precision 低、Recall 高:目标大多找到了,但误检多。先看错误标签、相似背景、重复预测和置信度阈值。
  • Precision 高、Recall 低:模型很谨慎,但漏掉很多目标。先看小目标比例、少数类样本、输入尺寸和阈值设置。
  • 两者都低:优先检查数据与训练流程,例如标注质量、类别定义、学习率、训练轮数。
  • 两者都高但 mAP50-95 不高:模型能大致发现目标,框的位置不够准,应重点看定位与标注边界。

注意,终端中显示的 Precision 和 Recall 通常对应验证过程选出的某个置信度点;它们会随着阈值变化。因此比较实验时,不能只截取一个阈值下的 P、R,而要结合 PR 曲线和 mAP 一起看。

四、AP、mAP50、mAP50-95:为什么两个 mAP 会差很多

对某一个类别,把置信度阈值从高到低逐渐放开,会得到一条 Precision-Recall 曲线。曲线下面积就是该类别的 AP(Average Precision)。AP 不只看某一个阈值,因此比单个 Precision 或 Recall 更稳定。

多类别任务中,把各类别 AP 再取平均,就是 mAP(mean Average Precision)

YOLO 训练结果里最常见的两个数是:

  • mAP50:只在 IoU = 0.50 的标准下计算。框只要大致套住目标就可能算对,数值通常较高。
  • mAP50-95:分别在 IoU 为 0.50、0.55、0.60,一直到 0.95 的十个阈值下计算,再取平均。这是更严格、更能反映定位质量的指标,数值通常明显低于 mAP50。

因此,mAP50 很高,mAP50-95 低很多 并不一定是 bug。它说明模型基本能找到目标,但在更严格的框重叠要求下不够稳定。小目标、边界模糊、遮挡,或者标注框本身不一致,都可能放大这个差距。

做论文或算法对比时,建议把 mAP50-95 作为整体检测质量的主指标,同时报告 mAP50 便于与部分旧工作对照。只报 mAP50 容易掩盖定位不够精确的问题;只报一个总 mAP,也会掩盖某些类别已经失效的情况。

五、别忽略分类别结果、混淆矩阵和速度

整体 mAP 是平均数,平均数有时会“掩盖问题”。例如数据集中 A 类有 5000 个样本、B 类只有 100 个样本,模型把 A 类做得很好,整体指标依然可能漂亮,但 B 类根本无法使用。

所以至少再看三样输出:

分类别 AP。 在验证日志的每类别表格中,关注 Instances 很少且 AP 很低的类别。先区分它是样本不足、视觉特征相近,还是标签质量问题,再决定是否补数据或调整训练策略。

混淆矩阵。 对角线越集中越好;某两个类别之间的非对角元素很高,说明模型经常把它们混淆。若大量目标被归到 background,通常说明漏检;若 background 被频繁预测成某一类,通常说明该类误检较多。

速度与资源。 preprocessinferencepostprocess 的耗时、FPS、参数量、FLOPs、显存占用,决定模型是否能在目标设备上运行。一个 mAP 高 0.3 个点、速度却下降一半的改进,在实时场景里未必值得保留。比较速度时要固定硬件、输入尺寸、batch 和推理精度,否则数字没有可比性。

最后还要回到预测图和错误样本。指标告诉你“差在哪里”,图片才能帮助判断“为什么会差”。例如,混淆矩阵显示某类 Recall 低,再筛出该类的漏检图,通常就能看出问题集中在远距离、夜间、遮挡,还是标注本身。

结语

YOLO 指标不需要逐个死记。训练时用 loss 看优化是否稳定;验证时用 Precision 和 Recall 判断误检、漏检;用 mAP50-95 衡量更严格的整体检测质量;再用分类别 AP、混淆矩阵和错误样本定位具体问题;需要部署时,把速度和资源一起纳入结论。

下次看到一组训练结果,先别急着问“mAP 涨了没有”。更值得问的是:模型到底在什么图片、什么类别、什么目标尺寸上失败?这个答案,才是下一轮改进真正该从哪里开始的依据。

posted on 2026-08-09 15:34  Jay8059  阅读(0)  评论(0)    收藏  举报

导航