模型评估与微调见解#
在训练 YOLO 模型后,下一步是衡量其性能,并通过微调弥补不足。评估使用 mAP 和 IoU 等指标量化准确率,而微调则调整训练参数来增强薄弱环节,使模型满足你的项目目标。本指南将介绍关键评估指标、如何解读这些指标,以及如何根据它们反映的问题采取行动。
Watch: Insights into Model Evaluation and Fine-Tuning | Tips for Improving Mean Average Precision
评估和微调通常处于计算机视觉项目工作流的后期,此时训练已经开始,你需要确认模型是否准确、高效并已准备好部署。
关键评估指标#
各种指标用于衡量模型的表现效果。这些性能指标提供清晰的数值化见解,指导改进,确保模型满足预期目标。
置信度分数#
置信度分数表示模型确定检测到的对象属于某个特定类别的程度。其范围为 0 到 1,分数越高表示置信度越高。置信度分数有助于筛选预测结果;只有置信度分数高于指定阈值的检测结果才会被视为有效。
运行推理时,如果你看不到任何预测结果,并且已经检查过其他所有设置,请尝试降低置信度阈值。有时阈值过高,会导致模型忽略有效预测。降低阈值后,模型会考虑更多可能性。虽然这可能无法满足最终项目目标,但这是了解模型能力并决定如何微调模型的好方法。
交并比#
交并比 (IoU) 是目标检测中的一项指标,用于衡量预测边界框与真实边界框的重叠程度。IoU 的取值范围为 0 到 1,其中 1 表示完全匹配。IoU 非常重要,因为它衡量了预测边界与实际对象边界的接近程度。
平均精度均值#
平均精度均值 (mAP) 用于衡量目标检测模型的整体表现。它会计算检测每个对象类别的精确率,对这些分数取平均,并给出一个数值,表示模型识别和分类对象的准确程度。
最常报告以下两种 mAP 指标:
- mAP@.5: 在单个 0.5 IoU 阈值下测量平均精度。该指标检查模型是否能在较宽松的准确率要求下正确找到对象。它关注对象是否大致位于正确位置,而不要求完美定位,有助于了解模型总体上是否善于发现对象。
- mAP@.5:.95: 对在多个 IoU 阈值下计算的 mAP 值取平均,阈值范围为 0.5 到 0.95,步长为 0.05。该指标更加细致且严格,能够更全面地反映模型在不同严格程度下定位对象的准确性,对于需要精确目标检测的应用尤其有用。
其他 mAP 指标包括 mAP@0.75(使用更严格的 0.75 IoU 阈值),以及 mAP@small、medium 和 large(评估不同尺寸对象的精确率)。
评估 YOLO26 模型#
你可以使用验证模式评估训练好的 YOLO26 模型。有关每个指标如何计算和解读的深入说明,请参阅 YOLO26 性能指标指南。
处理可变图像尺寸#
在不同尺寸的图像上评估模型,有助于了解模型在多样化数据集上的表现。rect=true 验证参数会按宽高比分组图像,并将每个批次填充到能够容纳它的最小形状,因此矩形图像无需强制调整为正方形即可完成评估。
imgsz 参数设置验证期间使用的图像尺寸,并将其应用为正方形。如果你未明确设置该参数,YOLO26 会重新使用模型设置中保存的值(官方预训练模型为 640,或者使用自定义检查点训练时采用的尺寸)。使用 rect=true 时,YOLO26 会将较长边限制为 imgsz,并将较短边填充到步幅的倍数,同时保留宽高比。请根据数据集尺寸和可用 GPU 内存调整 imgsz。
访问 YOLO26 指标#
要详细了解模型的表现,你可以用几行 Python 代码访问特定的评估指标。下面的代码片段会加载模型、运行验证,并输出最有用的指标。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Run validation on your dataset
results = model.val(data="coco8.yaml")
# Overall metrics
print("mAP50-95:", results.box.map) # mAP at IoU 0.50:0.95
print("mAP50:", results.box.map50) # mAP at IoU 0.50
print("mAP75:", results.box.map75) # mAP at IoU 0.75
print("Mean precision:", results.box.mp)
print("Mean recall:", results.box.mr)
print("Fitness:", results.box.fitness()) # weighted score used for model selection
# Per-class metrics
print("Class indices evaluated:", results.box.ap_class_index)
print("Per-class mAP50-95:", results.box.maps)
# Per-image precision, recall, F1, TP, FP, and FN
print("Per-image metrics:", results.box.image_metrics)
# Per-stage timing breakdown in milliseconds per image
print("Timing breakdown (ms/image):", results.speed)请注意,fitness() 是一个方法,必须使用括号调用;而 map、map50 和 mp 等指标是可直接访问的属性。
results.box.image_metrics 属性是一个按图像划分的字典,以图像文件名为键,保存每张图像在 IoU 0.5 下的 precision、recall、f1、tp、fp 和 fn。预处理、推理、损失计算和后处理的耗时会分别记录在 results.speed 字典中。结合这些信息,你可以定位模型在哪些图像上表现不佳,并据此进行微调。
微调模型#
微调会以预训练模型为基础,调整其参数,以提升模型在特定任务或数据集上的表现。微调也称为模型再训练,可以让模型更好地理解并预测其在实际应用中将遇到的数据结果。根据评估结果,你可以使用自己的数据重新训练模型,并调整微调指南中介绍的训练参数。
针对小对象的图像切片#
图像切片可以提升小对象的检测准确率。将较大的图像划分为较小的片段,例如把 1280x1280 图像切分成多个 640x640 片段,可以保留原始分辨率,并让模型从高分辨率片段中学习。Ultralytics 支持在推理时通过 SAHI 切片推理实现这一点。在切片图像上训练时,请确保为每个新片段正确调整标签。
结论#
评估和微调能将训练好的模型转变为可靠且可部署的模型:mAP 和 IoU 等指标可以暴露薄弱环节,有针对性的参数调整则能解决这些问题。先使用验证模式对模型进行基准测试,然后使用微调指南中介绍的参数重新训练,并持续尝试新的参数、技术和数据集。如果过程中遇到问题,可以在 Ultralytics GitHub 仓库或 Ultralytics Discord 服务器向社区提问。
常见问题#
评估 YOLO26 模型性能时,重要指标包括置信度分数、交并比 (IoU) 和平均精度均值 (mAP)。置信度分数衡量模型对每个检测对象类别的确定程度。IoU 评估预测边界框与真实边界框的重叠程度。平均精度均值 (mAP) 汇总各类别的精确率分数,其中 mAP@.5 和 mAP@.5:.95 是针对不同 IoU 阈值的两种常见类型。你可以在我们的 YOLO26 性能指标指南中了解更多信息。
微调预训练 YOLO26 模型包括调整其参数,以提升模型在特定任务或数据集上的表现。先使用指标评估模型,然后基于预训练权重在自己的数据集上重新训练。评估期间,
rect=true等参数有助于有效处理不同尺寸的图像。有关需要调整的训练参数,请参阅微调指南。要在评估期间处理可变图像尺寸,请在 YOLO26 中使用
rect=true参数。该参数会按宽高比分组图像,并对每个批次进行填充,而不是强制将每张图像调整为正方形。imgsz参数设置验证时的图像尺寸;如果你不覆盖该参数,YOLO26 会重新使用模型保存的值(官方预训练模型为 640)。请根据数据集和 GPU 内存调整imgsz。有关更多详情,请访问我们的处理可变图像尺寸章节。运行验证后,你可以使用 Python 访问 YOLO26 模型的评估指标:
使用方法from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Run validation results = model.val(data="coco8.yaml") # Access key metrics print("Mean average precision at IoU=0.50:", results.box.map50) print("Mean average precision at IoU=0.50:0.95:", results.box.map) print("Mean recall:", results.box.mr) print("Class indices evaluated:", results.box.ap_class_index)分析这些指标有助于你微调和优化 YOLO26 模型。要深入了解,请参阅我们的 YOLO 性能指标指南。