当前位置: 首页 > news >正文

006-目标检测指标解读-Precision-Recall-mAP50与mAP50-95

006-目标检测指标怎么读:Precision、Recall、mAP50 与 mAP50-95

本文基于 Ultralytics8.3.253的检测任务输出进行整理,重点讲清楚 YOLO11 训练结果中的 Precision、Recall、mAP50、mAP50-95 分别代表什么,以及如何从results.csv中读取它们。本文不讨论虚构精度,所有数值都以自己的训练日志为准。

摘要

YOLO11 训练完成后,很多同学第一眼会去看results.png或终端里的 mAP,但如果分不清 Precision、Recall、mAP50 和 mAP50-95,就很容易把“检得多”“检得准”“框得准”混成一个概念。

本文结合 Ultralytics 8.3.253 的结果文件,按工程复现实验的思路解释四个核心检测指标。文章会说明它们在results.csv中的列名、各自适合回答什么问题、mAP50 与 mAP50-95 为什么不能混写,以及后续做 YOLO11 改进实验时应该怎样组织对比表。

关键词:YOLO11、目标检测指标、Precision、Recall、mAP50、mAP50-95、Ultralytics、results.csv


一、先确认指标来自哪里

在 Ultralytics 8.3.253 的检测验证逻辑中,目标检测结果主要围绕下面四个指标展开:

metrics/precision(B) metrics/recall(B) metrics/mAP50(B) metrics/mAP50-95(B)

其中(B)表示 bounding box,也就是检测框指标。如果是分割、姿态或旋转框任务,还会出现对应任务的其他指标。本文只讨论普通目标检测。

训练完成后,主要看这几个文件:

runs/ yolo11_baseline/ yolo11n_s0_e100_i640/ results.csv results.png PR_curve.png F1_curve.png P_curve.png R_curve.png confusion_matrix.png weights/ best.pt last.pt

最核心的是results.csv。它记录了每个 epoch 的 loss、指标和学习率变化。results.png只是根据 CSV 画出来的图,适合观察趋势,但正式做实验表时还是建议回到 CSV 读取数值。


二、不要把检测指标写成“准确率”

分类任务里经常说 accuracy,但目标检测不是只判断图片类别。检测模型至少要同时回答三个问题:

  1. 图中有没有目标;
  2. 目标属于哪个类别;
  3. 框的位置是否足够准。

所以目标检测更常用 Precision、Recall 和 mAP。它们不是同一个东西。

指标主要回答的问题
Precision模型报出来的目标里,有多少是真的
Recall真实存在的目标里,有多少被模型找到了
mAP50IoU 阈值为 0.5 时的平均检测表现
mAP50-95IoU 从 0.5 到 0.95 多个阈值下的平均表现

后续写 YOLO11 改进文章时,建议直接写这几个指标名称,不要笼统写“准确率提升”。尤其是目标检测任务中,“准确率”这个说法很容易让读者误解。


三、Precision:模型报出来的框有多可靠

Precision 可以理解为“模型预测出来的目标里,有多少是对的”。

简单公式可以写成:

Precision = TP / (TP + FP)

其中:

名称含义
TP预测正确的目标
FP模型误检出来的目标

如果 Precision 很高,通常说明模型比较谨慎,报出来的框大多是可信的。如果 Precision 很低,说明误检比较多,例如把背景纹理、阴影、相似物体也当成目标。

举个常见现象:

现象可能原因
Precision 高,Recall 低模型只敢检明显目标,漏检较多
Precision 低,Recall 高模型检得很积极,但误检也多
Precision 和 Recall 都低数据、标注、类别定义或训练本身可能有问题

写实验分析时,不要只说 Precision 变高。还要同时看 Recall 有没有明显下降。一个模型如果只是变得更保守,Precision 可能会上去,但实际可用性不一定更好。


四、Recall:真实目标有没有被找全

Recall 可以理解为“真实存在的目标里,有多少被模型找到了”。

公式可以写成:

Recall = TP / (TP + FN)

其中:

名称含义
TP被正确检测出来的目标
FN真实存在但模型漏掉的目标

Recall 更关注漏检问题。比如工业缺陷、道路障碍物、安全帽检测等任务中,漏检通常比误检更严重,这时 Recall 就需要重点关注。

如果 Recall 长期偏低,可以从下面几个方向排查:

排查方向说明
目标太小小目标在640输入尺寸下可能只剩很少像素
遮挡严重部分目标标注框不完整,模型难以学习
类别混淆类别边界不清楚,标注规则不统一
数据量不足某些类别样本太少
置信度阈值推理展示时conf设置过高会减少显示框

注意,验证阶段的指标计算和普通预测展示不完全一样。不要只根据predict结果截图判断 Recall,正式对比要看val或训练过程中的验证指标。


五、mAP50:较宽松定位标准下的综合表现

mAP50 中的50指 IoU 阈值为 0.5。也就是说,预测框和真实框的重叠程度达到一定标准后,才会被当成正确检测。

IoU 可以简单理解为:

IoU = 预测框和真实框的交集面积 / 预测框和真实框的并集面积

当使用 mAP50 时,只要 IoU 达到 0.5,就进入这个阈值下的 AP 计算。因此 mAP50 相对宽松,能够反映模型是否大体找到了目标。

它适合回答这样的问题:

  1. 模型有没有基本学会这个数据集;
  2. 某些类别是否完全检测不出来;
  3. 改进后大致召回和分类能力有没有变化。

但 mAP50 也有局限。一个框只要大概覆盖目标,就可能在这个阈值下通过。如果任务对定位精度要求高,只看 mAP50 会过于乐观。


六、mAP50-95:更严格的综合指标

mAP50-95 是把 IoU 阈值从 0.5 到 0.95 取多个点进行平均。Ultralytics 检测验证中使用的 IoU 阈值序列可以理解为:

0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 0.95

这个指标比 mAP50 更严格。因为 IoU 越高,对预测框位置越挑剔。模型如果只是大概框住目标,mAP50 可能还不错,但 mAP50-95 不一定高。

在 Ultralytics 的检测指标对象中,mean_results()返回的顺序是:

Precision, Recall, mAP50, mAP50-95

检测任务的fitness也更偏向 mAP50-95。也就是说,如果要选一个更适合做主指标的数,通常优先看 mAP50-95,再结合 mAP50、Precision、Recall 一起解释。

后续写改进文章时,建议表格中至少保留:

模型PrecisionRecallmAP50mAP50-95
YOLO11n baseline按真实结果填写按真实结果填写按真实结果填写按真实结果填写
改进模型按真实结果填写按真实结果填写按真实结果填写按真实结果填写

不要把 mAP50 和 mAP50-95 合并成一个“mAP”。这两个数的含义不同,读者也会默认它们应该分开展示。


七、从 results.csv 中读取最佳 epoch

训练完成后,可以用下面脚本读取results.csv,找出 mAP50-95 最高的 epoch:

importpandasaspd csv_path=r"runs\yolo11_baseline\yolo11n_s0_e100_i640\results.csv"df=pd.read_csv(csv_path)df.columns=[c.strip()forcindf.columns]metric_cols=["metrics/precision(B)","metrics/recall(B)","metrics/mAP50(B)","metrics/mAP50-95(B)",]best_index=df["metrics/mAP50-95(B)"].idxmax()best_row=df.loc[best_index,["epoch",*metric_cols]]print(best_row)

这段代码做了三件事:

  1. 读取训练结果 CSV;
  2. 去掉列名前后可能存在的空格;
  3. metrics/mAP50-95(B)找到最佳 epoch。

如果你更关注 mAP50,也可以把排序列换成:

best_index=df["metrics/mAP50(B)"].idxmax()

但做 YOLO11 改进对比时,我更建议优先记录 mAP50-95,因为它对定位质量更敏感。


八、如何查看最后一轮和最佳轮是否一致

有时最后一个 epoch 的指标并不是最高的,这很正常。训练过程中模型会保存best.ptlast.pt

权重含义
best.pt验证指标最优时保存的权重
last.pt最后一个 epoch 的权重

可以用下面代码对比最后一轮和最佳轮:

importpandasaspd csv_path=r"runs\yolo11_baseline\yolo11n_s0_e100_i640\results.csv"df=pd.read_csv(csv_path)df.columns=[c.strip()forcindf.columns]best_row=df.loc[df["metrics/mAP50-95(B)"].idxmax()]last_row=df.iloc[-1]forname,rowin[("best",best_row),("last",last_row)]:print(name)print("epoch:",int(row["epoch"]))print("precision:",row["metrics/precision(B)"])print("recall:",row["metrics/recall(B)"])print("mAP50:",row["metrics/mAP50(B)"])print("mAP50-95:",row["metrics/mAP50-95(B)"])

如果最佳轮比最后一轮明显更好,正式部署或对比时一般使用best.pt。如果你要断点续训,则使用last.pt


九、曲线图应该怎么看

results.png适合看趋势,不适合只盯某一个点。建议重点观察:

曲线观察重点
train/box_loss训练集框回归损失是否下降
val/box_loss验证集框回归损失是否同步变好
metrics/precision(B)误检是否减少
metrics/recall(B)漏检是否减少
metrics/mAP50(B)较宽松定位下综合表现
metrics/mAP50-95(B)更严格定位下综合表现

如果训练 loss 一直下降,但验证 mAP 不涨,可能是过拟合、标注质量、数据分布或增强策略存在问题。

如果 mAP50 比较高,但 mAP50-95 明显偏低,说明模型大概能找到目标,但框的位置还不够精准。这类情况后续可以考虑框回归损失、检测头、小目标尺度或标注边界质量。


十、PR 曲线和混淆矩阵有什么用

除了results.csv,验证阶段还可能生成:

PR_curve.png F1_curve.png P_curve.png R_curve.png confusion_matrix.png confusion_matrix_normalized.png

这些图适合进一步分析问题。

文件作用
PR_curve.png看 Precision 和 Recall 的权衡关系
F1_curve.png看不同置信度下综合表现
P_curve.png看置信度变化对 Precision 的影响
R_curve.png看置信度变化对 Recall 的影响
confusion_matrix.png看类别之间是否互相误判

如果某两个类别在混淆矩阵中经常互相错分,优先检查标注规则和样本差异,不要一上来就换复杂模块。很多时候,类别定义不清楚比网络结构影响更大。


十一、做改进实验时怎么写指标表

后续写注意力、Neck 或 Backbone 改进文章时,可以使用下面这种表格结构:

实验模型改动PrecisionRecallmAP50mAP50-95备注
B001YOLO11n原始模型按真实结果填写按真实结果填写按真实结果填写按真实结果填写baseline
A001YOLO11n + 模块A指定位置加入模块A按真实结果填写按真实结果填写按真实结果填写按真实结果填写与 B001 同参数

表格后面的分析可以这样写:

  1. 如果 Precision 上升但 Recall 下降,说明模型可能更保守;
  2. 如果 Recall 上升但 Precision 下降,说明模型找得更多,但误检增加;
  3. 如果 mAP50 上升而 mAP50-95 不变,说明大致检测能力变好,但定位质量未必提升;
  4. 如果 mAP50-95 上升,同时 Precision 和 Recall 没有明显恶化,才更适合写成有效改进。

不要只挑一个最好看的数写。读者真正关心的是改进是否稳定、是否公平、是否能复现。


十二、常见问题

1. 为什么 mAP50 比 mAP50-95 高很多

这是常见现象。mAP50 的 IoU 阈值较宽松,mAP50-95 包含更严格的 IoU 阈值,对框的位置要求更高。

如果差距很大,可以检查标注框是否松散、目标是否过小、输入尺寸是否不合适,以及模型是否容易框偏。

2. Precision 很高但图片上漏检很多

Precision 高只能说明报出来的框比较可靠,不代表目标都被找到了。漏检多时要看 Recall。

3. Recall 很高但误检很多

Recall 高说明真实目标多数被找到了,但如果 Precision 低,说明误检也多。实际应用中需要根据场景决定更重视误检还是漏检。

4.predict截图效果不错,为什么 mAP 不高

预测截图通常只展示少量图片,而且conf阈值会影响显示结果。正式指标是在验证集上统计得到的,不能用几张截图代替。

5. 改进模型只有 mAP50 提高,可以写提升吗

可以描述 mAP50 的变化,但不能说整体检测性能一定提升。建议同时报告 mAP50-95、Precision 和 Recall,并说明变化可能对应的原因。


十三、总结

本文把 YOLO11 目标检测中最常用的四个指标拆开讲了一遍:Precision 关注误检,Recall 关注漏检,mAP50 反映较宽松阈值下的综合表现,mAP50-95 更关注多阈值下的定位质量。

在 Ultralytics 8.3.253 中,检测任务的核心指标列名可以从results.csv中读取,分别是metrics/precision(B)metrics/recall(B)metrics/mAP50(B)metrics/mAP50-95(B)

后续做 YOLO11 改进实验时,建议把 mAP50 和 mAP50-95 分开写,把 Precision 和 Recall 一起看,并且只使用真实训练日志中的数值。这样写出来的文章不仅更严谨,也更容易让读者判断改进是否真的有效。

http://www.jsqmd.com/news/1151933/

相关文章:

  • 量子计算:未来真的来了?
  • 联想威6 Pro-13IWL指纹修复:BIOS开启SGX与3款官方驱动安装指南
  • 农业系统职称考试好用的刷题app有哪些?
  • AMAT 0190-32401 通讯模块
  • 系统包管理器和语言级包管理器的区别,及其源配置
  • OpenAI元老约书亚·阿希亚姆离职,上市与重组下安全岗位责任待解
  • 2026年二本统计学专业学习数据分析的实用价值分析
  • gitee私有库不能保存不用于训练AI
  • AI网页信息提取实战:Page Agent原理、调优与工程化落地
  • 物联网卡、流量卡、SIM 卡有什么区别?企业采购前先搞清楚这几点
  • 终局判断:从ERP记录业务到AI Agent参与业务
  • Apache Solr <= 8.8.1 任意文件读取漏洞:3步手工复现与流量特征分析
  • 004 认识网络设备
  • Vyrex-9K 正式发布:新一代智能学习引擎刷新行业性能天花板
  • 宁德时代参投的易控智驾港交所上市,矿区无人驾驶规模化正加速袭来!
  • 局域网传文件还要先下载?ZmLan V1.22S更新:支持在线预览+后台管理,内网沟通效率翻倍
  • 仅限前500名技术负责人开放:ChatGPT+Claude交叉验证效能白皮书(含LLM一致性评估指标LCA-2.0及实测基准数据集)
  • GTP-Image生图怎么描述风格更准?主流 AI 画面控制教程与参数对比
  • 图片Base64本地缓存优化:localStorage方案与3大性能陷阱规避
  • 读懂预训练: 一颗心是怎么长成的
  • 大语言模型创意写作能力评测与优化策略分析
  • AIGC Agent:从单点智能到流程智能的结构性机会
  • Skill 是什么?——给AI装个“能力插件”,就像给手机装App一样简单
  • Nebula 1.0.0 来袭:跨平台桌面应用,用统一界面管理云对象存储!
  • Claude Projects与传统PM工具的本质差异:不是功能叠加,而是决策延迟降低73%的底层架构革命(附架构演进时间轴)
  • Claude Code真能取代Codex?基于37个真实项目代码生成质量、推理深度与安全合规性的硬核评测
  • 2026大庆黄金回收白银回收铂金回收工商备案可查全城上门回收旧金老店联系方式推荐
  • 3分钟解锁你的加密音乐:Unlock Music浏览器本地解密终极指南
  • 百考通任务书写作助你一次通过导师审核
  • 短视频素材产出太慢怎么办,用AI做分镜脚本可行吗