模型评估与微调见解#
训练 YOLO 模型后,下一步是衡量模型的表现,并通过微调弥补差距。评估会使用 mAP 和 IoU 等指标来量化准确率,而微调则通过调整训练参数来强化薄弱环节,使模型达到你的项目目标。本指南将介绍关键评估指标、如何解读这些指标,以及如何根据指标反映的情况采取行动。
观看: 深入了解模型评估与微调 | 提升平均精度均值的技巧
在计算机视觉项目工作流中,评估和微调通常处于后期阶段,此时训练已经开始,你需要确认模型准确、高效,并已做好部署准备。
关键评估指标#
有多种指标可用于衡量模型的性能。这些性能指标提供清晰的数值参考,帮助你有针对性地改进模型,确保模型达到预期目标。
置信度分数#
置信度分数表示模型认为检测到的对象属于某个特定类别的确定程度。取值范围为 0 到 1,分数越高表示置信度越高。置信度分数可用于筛选预测结果;只有置信度分数高于指定阈值的检测结果才会被视为有效。
运行推理时,如果你没有看到任何预测结果,并且已经排查了其他问题,可以尝试降低置信度阈值。有时阈值设置过高,导致模型忽略有效的预测结果。降低阈值可以让模型考虑更多可能性。虽然这样做未必能满足项目的最终目标,但这是了解模型能力并决定如何微调模型的好方法。
交并比#
交并比 (IoU) 是对象检测中的一项指标,用于衡量预测的边界框与真实边界框的重叠程度。IoU 的取值范围为 0 到 1,其中 1 表示完全匹配。IoU 至关重要,因为它可以衡量预测边界与对象实际边界的接近程度。
平均精度均值#
平均精度均值 (mAP) 用于衡量对象检测模型的整体性能。它会评估模型检测每个对象类别时的精确率,对这些得分取平均值,最终得到一个数值,用于表示模型识别和分类对象的准确程度。
最常报告的 mAP 指标有两个:
- mAP@.5: 衡量单个 IoU 阈值 0.5 下的平均精度。此指标用于检查模型能否在较宽松的准确度要求下正确找到对象。它关注对象是否大致处于正确位置,而不要求完全精确,有助于判断模型整体上是否善于发现对象。
- mAP@.5:.95: 对多个 IoU 阈值下计算出的 mAP 值取平均值,阈值范围为 0.5 到 0.95,步长为 0.05。此指标更加细致严格,能够更全面地反映模型在不同严格程度下定位对象的准确度,尤其适用于需要精确检测对象的应用。
其他 mAP 指标包括 mAP@0.75(使用更严格的 0.75 IoU 阈值),以及 mAP@small、mAP@medium 和 mAP@large(用于评估不同尺寸对象的精确率)。
评估 YOLO26 模型#
你可以使用验证模式评估训练好的 YOLO26 模型。如需深入了解各项指标的计算和解读方式,请参阅 YOLO26 性能指标指南。
处理不同尺寸的图像#
使用不同尺寸的图像评估模型,有助于你了解模型在不同数据集上的表现。验证默认使用矩形批处理(rect=True 位于 model.val()):它会按宽高比分组图像,并将每个批次填充到能够容纳图像的最小尺寸,因此矩形图像无需强行调整为正方形也能参与评估。
imgsz 参数用于设置验证时采用的图像尺寸,并将图像调整为正方形。如果你没有明确设置该参数,YOLO26 会沿用模型设置中保存的值(官方预训练模型为 640,或自定义检查点训练时使用的尺寸)。使用 rect=true 时,YOLO26 会将较长边限制为 imgsz,并将较短边填充到步长的整数倍,以保留宽高比。请根据数据集的尺寸和可用 GPU 内存调整 imgsz。
查看 YOLO26 指标#
你只需几行 Python 代码,就能查看特定评估指标,详细了解模型的表现。下面的代码片段会加载模型、运行验证并打印最有用的指标。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n.pt")
# 在你的数据集上运行验证
results = model.val(data="coco8.yaml")
# 整体指标
print("mAP50-95:", results.box.map) # IoU 0.50:0.95 下的 mAP
print("mAP50:", results.box.map50) # IoU 0.50 下的 mAP
print("mAP75:", results.box.map75) # IoU 0.75 下的 mAP
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)
# 各图像的精确率、召回率、F1、TP、FP 和 FN
print("Per-image metrics:", results.box.image_metrics)
# 每张图像各阶段的耗时明细(毫秒)
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等参数有助于有效处理不同尺寸的图像。有关需要调整的训练参数,请参阅微调指南。要在评估期间处理不同尺寸的图像,可以使用矩形验证(
rect=True,model.val()的默认设置)。矩形验证会按宽高比分组图像,并对每个批次进行填充,而不是强行将所有图像调整为正方形。imgsz参数用于设置验证时的图像尺寸;如果不覆盖该参数,YOLO26 会沿用模型保存的值(官方预训练模型为 640)。根据你的数据集和 GPU 内存调整imgsz。更多详情请参阅处理不同尺寸图像一节。运行验证后,你可以使用 Python 访问 YOLO26 模型的评估指标:
用法from ultralytics import YOLO # 加载模型 model = YOLO("yolo26n.pt") # 运行验证 results = model.val(data="coco8.yaml") # 访问关键指标 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 性能指标指南。