ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ultralytics YOLO 性能指标全解析:mAP、IoU、Precision、Recall 与 F1 Score 的量化评估指南

Ultralytics YOLO 性能指标全解析:mAP、IoU、Precision、Recall 与 F1 Score 的量化评估指南 Ultralytics YOLO 性能指标全解析mAP、IoU、Precision、Recall 与 F1 Score 的量化评估指南【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics性能指标是衡量目标检测模型准不准、稳不稳的关键工具它们揭示了模型能否在图像中准确识别并定位对象、如何处理误检假阳性与漏检假阴性。本文以 YOLO 性能指标指南 为骨架结合 Ultralytics 仓库内 metrics.py 与 DetectionValidator 的源码实现系统讲解 IoU、AP、mAP、Precision、Recall、F1 Score 的定义与底层计算过程带你读懂model.val()的每一段输出并根据指标诊断模型短板、制定优化策略。为什么要关注性能指标性能指标是评估与改进目标检测模型的核心工具量化定位能力模型输出的边界框到底贴不贴真实目标需要 IoU 之类的指标来度量。揭示误检与漏检Precision 与 Recall 分别刻画检出的是否正确与正确的有没有漏掉两个维度共同决定模型的可用性。支撑迭代优化通过逐类指标、逐张图片的指标定位短板难分类别、小目标、遮挡场景等据此调整训练数据与超参数。这些指标不仅是离线评估的依据也是 模型评估与微调指南 中判断模型是否达成项目目标的量化基础通常位于 计算机视觉项目工作流 靠近收尾的验证环节。目标检测核心指标的定义与源码实现下面这些指标不仅适用于 YOLO 系列也广泛适用于各类目标检测模型。Intersection over UnionIoU交并比IoU 量化预测边界框与真实边界框Ground Truth之间的重叠程度是评价目标定位精度的基础度量。两个框的重叠面积除以合并面积即得 IoU取值区间为[0, 1]越接近 1 表示定位越精准1.0代表完美对齐。通常以 IoU ≥ 0.5 作为判定一次检测为真阳性TP的门槛。仓库在 metrics.py 中提供了对应的box_iou实现其计算方式与公式完全一致先求两框交集面积inter (min(a2,b2) - max(a1,b1)).clamp_(0).prod(2)再除以并集面积inter / ((a2-a1).prod(2) (b2-b1).prod(2) - inter eps)其中eps用于防止除零。该函数被验证流程直接复用在 DetectionValidator._process_batch 中iou box_iou(batch[bboxes], preds[bboxes])计算每个预测框与每个真实框的 IoU再通过match_predictions判定 TP/FP/FN。另外bbox_iou 还实现了 GIoU、DIoU、CIoU 等变体它们主要服务于训练阶段的回归损失而评估时使用的是标准 IoU。Average PrecisionAP平均精度AP 计算 Precision-Recall 曲线下的面积用一个数值同时概括模型的精确率与召回率表现。其底层实现可见 compute_ap对 recall、precision 序列补上哨兵值后构造 precision 包络mpre np.flip(np.maximum.accumulate(np.flip(mpre)))再在 0~1 区间上按 101 点插值积分这正是 COCO 官方的 AP 插值评估协议。Mean Average PrecisionmAP平均精度均值mAP 把 AP 扩展到多类别场景——对数据集中出现的每个类别计算 AP再取平均从而给出跨类别的综合性能评估。从源码看逐类 AP 由 ap_per_class 完成每个类单独累积 TP/FP 后求 P-R 曲线与 AP。评估中最常报告的两个 mAP 变体mAP50mAP50在 IoU 阈值为 0.50 下计算的 mAP只考虑较宽松的匹配反映模型大致找对目标位置的能力。mAP50-95mAP50-95在 0.50 到 0.95 区间内、以 0.05 为步长的 10 个 IoU 阈值即 IoU ∈ {0.5, 0.55, …, 0.95}下 mAP 的平均值。它比 mAP50 更严格、更全面是学术界与工业界尤其 COCO 基准最看重的指标。此外还有mAP75IoU0.75 的严格阈值以及按目标尺寸区分的 mAPsmall / mAPmedium / mAPlarge。在验证器中这 10 个阈值由self.iouv torch.linspace(0.5, 0.95, 10)生成见 detect/val.py对应Metric.all_ap形状(nc, 10)见 metrics.py。Precision 与 Recall精确率与召回率Precision精确率所有被预测为正的检测中真正为正的比例衡量模型不产生误检的能力。对应混淆矩阵中对角线 TP 与非对角线列求和的关系。Recall召回率所有真实为正的目标中被成功检出的比例衡量模型不漏检的能力。两者的区分与关联从 ConfusionMatrix.tp_fp 中可见一斑tp matrix.diagonal()对角线为真阳性fp matrix.sum(1) - tp按行求和的其余为假阳性配合漏检 FN 即可推导出 P 与 R。F1 ScoreF1 Score 是精确率与召回率的调和平均数F1 2·P·R / (P R)同时兼顾假阳性与假阴性适合在两者需要平衡的场景下使用。该计算同样出现在 ap_per_class 中f1_curve 2 * p_curve * r_curve / (p_curve r_curve eps)并会进一步找出使平均 F1 最大的置信度阈值作为报告 P/R/F1 的依据i smooth(f1_curve.mean(0), 0.1).argmax()见同一函数的末尾。如何用 Val 模式计算 YOLO 指标有了训练好的模型只需调用 Val 模式 的model.val()即可在验证集上处理全部图像并返回上述指标。!!! example Python 调用示例python from ultralytics import YOLO # 加载模型官方预训练权重或自定义权重 model YOLO(yolo26n.pt) # 运行验证不传参数时自动沿用模型训练时的数据集与参数 metrics model.val(datacoco8.yaml, imgsz640, batch16, conf0.25, iou0.7, device0) !!! example CLI 等价写法bash yolo detect val modelyolo26n.pt yolo val modelpath/to/best.pt datacoco8.yaml imgsz640 batch16 conf0.25 iou0.7 device0 验证相关的可调参数定义在 cfg/default.yaml其中与指标结果直接相关的几个关键参数包括参数默认值说明conf验证 0.001 / 预测 0.25置信度阈值验证时取极低值以尽量纳入全部检测从而还原完整 PR 曲线iou0.7NMS 用的 IoU 阈值max_det300每张图像最多保留的检测数splitval评估的数据划分val/test/trainplotsTrue是否保存可视化曲线与混淆矩阵等图像rectFalse验证时按宽高比分批矩形推理以保留原始宽高比save_jsonFalse保存 COCO 格式 JSON触发 COCO 评估关于图像尺寸验证时可用imgsz指定方形推理尺寸若不显式指定模型会沿用自身保存的设置官方预训练模型通常为 640。开启rectTrue后验证器会把较长边约束到imgsz、把较短边补齐到 stride 的整数倍从而避免把矩形图强行压成正方形。此外max_det若小于数据集中单图最大目标数会封顶召回并导致验证指标失真——DetectionValidator._check_max_det 会自动检测该情况并给出告警甚至自动调高上限。解读model.val()的输出逐类指标Class-wise Metrics输出顶部是逐类性能明细表。表头格式定义于 DetectionValidator.get_desc逐行含义如下Class目标类别名称如 person、car、dog。Images验证集中包含该类别的图像数量源码中对应nt_per_image由 DetMetrics.process 统计。Instances该类在整个验证集中出现的实例总数对应nt_per_class。Box(P, R, mAP50, mAP50-95)检测框维度的四项核心指标——PPrecision检出的目标有多少是正确的RRecall真实目标有多少被识别出来mAP50IoU 阈值 0.50 下的平均精度mAP50-95IoU 阈值从 0.50 到 0.95 平均的平均精度代表不同检测难度下的综合表现。这些逐类数值由 DetectionValidator.print_results 在日志中逐行打印。若想以结构化方式读取逐类指标可调用验证结果的summary()其实现见 DetMetrics.summary返回含Class / Images / Instances / P / R / F1 / mAP50 / mAP50-95的字典列表便于转存 CSV 等格式。速度指标Speed Metrics对实时目标检测而言推理速度与精度同等重要。验证输出末尾的Speed: X ms preprocess, Y ms inference, Z ms loss, W ms postprocess per image逐阶段给出每张图像的平均耗时。这些计时在 BaseValidator 中用Profile对数据预处理、模型推理、损失计算、后处理四段分别打点最终按数据集图像数归一化为毫秒/张。COCO 指标评估COCO Metrics Evaluation当验证数据集为 COCO或 LVIS时验证器会额外调用 COCO 官方评估脚本仓库中使用faster-coco-eval见 DetectionValidator.coco_evaluate报告不同 IoU 阈值0.50 / 0.75 / 0.50:0.95与不同目标尺寸small / medium / large下的精确率与召回率并据此计算 COCO 风格的fitness 0.9 * AP_all 0.1 * AP_50。判断是否为 COCO 数据集的逻辑见 init_metrics路径含coco且以val2017.txt/test-dev2017.txt结尾才会触发。可视化输出Visual Outputs除数值指标外开启plotsTrue默认开启后验证会产出多张可视化图帮助你直观判断模型行为F1 Score CurveBoxF1_curve.pngF1 随置信度阈值变化的曲线反映不同阈值下误检与漏检的平衡点。Precision-Recall CurveBoxPR_curve.png分类问题最核心的可视化展示不同阈值下精度与召回率的权衡在类别不均衡时尤其重要。Precision CurveBoxP_curve.png精度随阈值的变化曲线。Recall CurveBoxR_curve.png召回随阈值的变化曲线。Confusion Matrixconfusion_matrix.png逐类展示 TP / FP / FN 计数的详细矩阵。Normalized Confusion Matrixconfusion_matrix_normalized.png按列归一化的混淆矩阵以比例代替原始计数便于跨类别横向比较。Validation Batch Labelsval_batchX_labels.jpg验证集各 batch 的真实标注可视化。Validation Batch Predictionsval_batchX_pred.jpg同一批次的模型预测可视化与标注图对照即可快速目测检测质量。曲线的绘制由 ap_per_class 触发当plotTrue时调用plot_pr_curve与plot_mc_curve分别定义于 metrics.py输出 PR / F1 / P / R 曲线。混淆矩阵的构造与保存则见 ConfusionMatrix.plot。需要留意文件前缀与任务的对应关系detect 任务写Box*曲线segment 任务同时写Box*与Mask*曲线pose 任务同时写Box*与Pose*曲线——这是因为 SegmentMetrics 与 PoseMetrics 分别在ap_per_class中以prefixMask/prefixPose重复计算了掩码与关键点维度。此外语义分割任务以像素级混淆矩阵计算mIoU与pixel accuracy并输出逐类 IoU 柱状图见 SemanticMetrics深度估计任务则输出 delta1-3、abs_rel、rmse、silog 等单目深度指标见 DepthMetrics。结果的存储位置所有结果默认保存到独立运行目录检测任务通常为runs/detect/val若重复运行会自动追加序号。同一目录下包含指标日志、上述曲线与混淆矩阵、val_batch*_labels.jpg/val_batch*_pred.jpg以及开启save_json后生成的predictions.json便于日后复盘对比。通过 Python 属性访问指标进行深度分析在脚本化评估、超参搜索或自动调优可参考 超参数调优指南时你通常需要把指标读成数值而非只看日志。验证返回的结果对象已封装了这些属性from ultralytics import YOLO # 加载模型 model YOLO(yolo26n.pt) # 在指定数据集上运行验证 results model.val(datacoco8.yaml) # ---- 总体指标Detect 的 Box 维度---- print(mAP50-95:, results.box.map) # IoU 0.50:0.95 的平均精度 print(mAP50:, results.box.map50) # IoU 0.50 的平均精度 print(mAP75:, results.box.map75) # IoU 0.75 的平均精度 print(Mean precision:, results.box.mp) print(Mean recall:, results.box.mr) print(Fitness:, results.box.fitness()) # 加权综合分括号调用 # ---- 逐类指标 ---- print(Class indices evaluated:, results.box.ap_class_index) print(Per-class mAP50-95:, results.box.maps) # ---- 逐张图片指标IoU0.5---- print(Per-image metrics:, results.box.image_metrics) # ---- 分阶段耗时毫秒/张---- print(Timing breakdown (ms/image):, results.speed)几个容易踩坑的细节均有源码依据fitness()是方法必须带括号调用。其实现见 Metric.fitness权重为w [0.0, 0.0, 0.0, 1.0]即只对 mAP50-95 加权用于跨实验的模型选择排序而map、map50、mp、mr、maps等都是property属性直接读取即可见 metrics.py。results.box.image_metrics是以图片文件名为键的字典逐张记录该图在 IoU0.5 下的precision、recall、f1、tp、fp、fn由 Metric.update_image_metrics 在验证过程中累积可据此定位模型表现最差的图像。检测/OBB 用results.box.image_metrics分割用results.seg.image_metrics姿态用results.pose.image_metrics。results.speed是一个字典分别给出 preprocess / inference / loss / postprocess 每张图耗时。如何选择正确的评估指标指标选择应服从具体应用场景mAP适合对模型性能做全面、宏观的评估与跨模型横向比较。IoU当精确定位如测量、抓取、自动驾驶的边界框回归至关重要时是首要指标。Precision当减少误检是优先目标如安防误报会让成本骤增时更关键。Recall当必须检测到每一个实例如医疗筛查、质检漏判代价高时更重要。F1 Score在精度与召回需要平衡时使用例如面对类别不均衡的数据集。速度指标对实时应用视频流、边缘部署FPS帧每秒与延迟决定方案能否落地。常见低分现象的诊断与对策看懂数字之后更要能据此行动。常见现象的指向如下低 mAP模型整体精度不足可能需要更长的训练、更大的模型规模或更强的数据增强参见 模型训练技巧。低 IoU模型难以精确定位目标可尝试改进边界框回归头、检查标注质量粗糙的标注会直接拉低 IoU或使用更合理的imgsz推理尺寸。低 Precision模型输出了过多不存在的目标。提高置信度阈值conf可以过滤低分误检但这通常以牺牲召回为代价。低 Recall模型漏掉了真实目标。可从增强特征提取能力换更大/更新的骨干、补充更多样化的训练数据、降低置信度阈值三方面入手。F1 失衡P 与 R 悬殊说明误检与漏检严重不对等需要针对性调节阈值或类别权重。个别类别 AP 显著偏低提示该类别对模型较难样本少、外观多变或标注噪声大。可参考 定义项目目标指南 与 微调指南 补充该类别数据或在训练时调整cls_pw类权重参数。从指标到行动三个实战案例案例 1mAP 与 F1 不理想Recall 尚可但 Precision 偏低。可能的根因是误检过多。对策适当提高置信度阈值过滤低置信度框代价是 Recall 可能轻微下降。在 yolo-common-issues 中排查数据标注冲突如大量未标注的真实目标被当作负样本往往同样有效。案例 2mAP 与 Recall 可接受但 IoU 偏低。模型找得到却框不准。对策聚焦边界框回归精度的优化——提高imgsz、检查标注框是否紧贴目标轮廓或引入更精细的回归损失。案例 3整体 mAP 尚可但个别类别 AP 远低于其他类。这些类别对模型更困难。对策为该类补充更多训练样本含不同姿态、光照与遮挡或在训练中加大其权重。若问题来自小目标可考虑 SAHI 分块推理指南 中的图像切片方案把大图切块以保留小目标的分辨率信息。把评估接入工作流纵向对比每次改动调参、加数据、换模型后跑一次 Val记录results.box.fitness()与逐类 AP用同一套指标比较新旧 checkpoint。组合调参结合 超参数调优指南 以 mAP50-95 为目标函数搜索学习率、批量大小、增强策略等。自动化日志利用results.box.results_dict与summary()输出到 CSV/JSON配合 TensorBoard 或 MLflow 等记录每一次实验。常见问题FAQmAP 在评估 YOLO 模型性能中的意义是什么mAP 用一个数值同时概括多类别上的精度与召回表现mAP0.50衡量 IoU0.50 下大致找对的能力mAP0.50:0.95则跨 0.50~0.95 的 10 个 IoU 阈值取平均对定位精度要求更苛刻、更全面。高 mAP 意味着模型在检得对与不漏检之间取得了良好平衡。如何解读 IoU 数值IoU 衡量预测框与真实框的重叠比例取值 0~1。1.0 代表完全重合常规以 0.50 作为 TP 判定阈值mAP50 的由来。IoU 持续偏低通常指向定位不准改善方向包括精修边界框回归、提高推理分辨率或提升训练标注精度参考 数据标注相关指引。为什么 F1 Score 也很重要F1 是 P 与 R 的调和平均同时惩罚误检与漏检在类别不均衡或单一指标失真的场景下更有参考价值。高 F1 表示模型在减少漏检的同时也控制了误报适合 安防告警系统、医疗影像 类对两种错误都敏感的应用。验证指标如何帮助提升模型性能Precision 指引你压低误检调高阈值、清理伪标注Recall 指引你补足漏检加数据、增强特征、降低阈值mAP 给出总体快照IoU 专攻定位精度。逐类 AP 则暴露具体薄弱类别。定位问题后回到 模型评估与微调指南 与 超参数调优指南 采取针对性动作形成评估 → 调优 → 再评估的闭环。结语性能指标是把训练好的模型变成可部署、可信赖的模型的度量衡IoU、AP、mAP、Precision、Recall、F1 Score 与分阶段速度共同拼出模型精度与效率的完整画像。本文以 YOLO 性能指标指南 为主线结合 metrics.py 的计算实现与 DetectionValidator 的验证流程说明每个数字从何而来、如何读取、如何行动。建议先从 Val 模式 跑通一次基准评估再依据逐类指标与可视化曲线持续迭代让每一次实验都有可量化的进步依据。【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表