YOLO Vision 2026:

关于模型评估与微调的见解#

训练 YOLO 模型后,下一步是衡量其性能表现并进行微调以弥补差距。评估使用 mAPIoU 等指标来量化准确率,而微调则调整训练参数以增强薄弱环节,从而使模型满足你的项目目标。本指南介绍了关键的评估指标、如何解读这些指标,以及提升模型能力的微调技术。



Watch: Insights into Model Evaluation and Fine-Tuning | Tips for Improving Mean Average Precision

评估和微调处于计算机视觉项目工作流的尾声,此时训练正在进行,你需要验证模型是否准确、高效并准备好进行部署。

关键评估指标#

各种指标用于衡量模型的有效性能。这些性能指标提供了清晰的数字见解,指导改进工作以确保模型达到其预定目标。

置信度分数#

置信度分数代表模型对于检测到的物体属于特定类别的确定程度。其范围从 0 到 1,分数越高表示置信度越高。置信度分数有助于过滤预测结果;只有置信度分数高于指定阈值的检测结果才会被视为有效。

没看到预测结果?

在运行推理时,如果你没看到任何预测结果且已检查过其他所有设置,请尝试降低置信度阈值。有时阈值太高,会导致模型忽略有效的预测。降低阈值可以让模型考虑更多的可能性。这可能无法满足你的最终项目目标,但却是了解模型能力并决定如何进行微调的好方法。

交并比#

交并比(IoU)是目标检测中的一项指标,用于衡量预测边界框与真实边界框的重合程度。IoU 值的范围从 0 到 1,其中 1 代表完全匹配。IoU 至关重要,因为它能衡量预测边界与实际物体边界的吻合程度。

Intersection over Union Overview

平均精度均值 (Mean Average Precision)#

平均准确率均值(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、medium 和 large(评估不同尺寸物体的精确度)。

Mean average precision mAP metric

评估 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() 是一个方法,必须带括号调用,而 mapmap50mp 等指标是直接访问的属性。

results.box.image_metrics 属性是一个以图像文件名为键的单图像字典,为每张图像在 IoU 0.5 时保存 precisionrecallf1tpfpfn。预处理、推理、损失和后处理时间在 results.speed 字典中单独报告。这些结合起来可以让你准确定位模型在哪张图像上表现不佳并进行相应微调。

微调你的模型#

微调采用预训练模型并调整其参数,以提高在特定任务或数据集上的性能。这也被称为模型重训练,它让模型能更好地理解并预测它将在现实应用中遇到的数据。根据评估结果,通过密切关注一些关键参数和技术,你可以重新训练模型以获得最佳结果。

从更高的学习率开始#

在正常训练期间,学习率从低开始,在前几个轮次中逐渐增加以稳定早期更新。在微调时,模型已经带有来自预训练的有用特征,因此你可以跳过此热身阶段并立即开始适应新数据。

model.train() 中将 warmup_epochs 训练参数设置为 0 以禁用预热阶段。此时训练直接从配置的基础学习率(lr0)处的预训练权重继续,而不再经历升温过程,从而适应你新数据的细微特征。

在不进行学习率预热的情况下微调
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n.pt")

# Fine-tune with the warmup phase disabled
model.train(data="coco8.yaml", epochs=10, warmup_epochs=0)

针对小目标进行图像平铺#

图像分块可以提高小目标的检测准确率。通过将较大的图像划分为较小的片段(例如将 1280x1280 的图像分割为多个 640x640 的片段),你可以保留原始分辨率并让模型从高分辨率碎片中学习。Ultralytics 在推理时通过 SAHI 分块推理支持此功能。在对分块图像进行训练时,请确保为每个新片段正确调整标签。

结论#

评估和微调是将训练好的模型转变为可靠且可部署的模型的关键:诸如 mAP 和 IoU 等指标揭示了弱点,而有针对性的参数更改则解决了这些弱点。从验证模式开始对你的模型进行基准测试,然后应用上述微调技术,并继续使用新参数、新技术和数据集进行迭代。如果在过程中遇到问题,请在 Ultralytics GitHub 仓库Ultralytics Discord 服务器上向社区寻求帮助。

常见问题解答#

评估 YOLO26 模型性能的关键指标是什么?#

为了评估 YOLO26 模型的性能,重要的指标包括置信度分数、交并比 (IoU) 和平均准确率均值 (mAP)。置信度分数衡量模型对每个检测到的对象类别的确定性。IoU 评估预测边界框与真实情况的重合程度。平均准确率均值 (mAP) 汇集了各个类别的准确率分数,其中 mAP@.5 和 mAP@.5:.95 是针对不同 IoU 阈值的两种常见类型。在我们的YOLO26 性能指标指南中了解有关这些指标的更多信息。

我该如何为我的特定数据集微调预训练的 YOLO26 模型?#

微调预训练的 YOLO26 模型需要调整其参数,以提高在特定任务或数据集上的性能。首先使用指标评估你的模型,然后在 model.train() 中将 warmup_epochs 训练参数设置为 0,这样学习率就会立即从配置的基础值开始,而不再进行升温。在评估过程中,像 rect=true 这样的参数有助于有效地处理不同的图像尺寸。有关更详细的指导,请参阅我们关于微调你的模型的章节。

在评估 YOLO26 模型时,我该如何处理可变的图像尺寸?#

为了在评估期间处理可变的图像大小,请在 YOLO26 中使用 rect=true 参数,该参数按长宽比对图像进行分组并填充每个批次,而不是强制每个图像变成正方形。imgsz 参数设置用于验证的图像大小;如果你不覆盖它,YOLO26 会重复使用模型保存的值(官方预训练模型为 640)。调整 imgsz 以适合你的数据集和 GPU 内存。有关更多详细信息,请访问我们关于处理可变图像大小的部分

我该采取哪些实际步骤来提高 YOLO26 模型的平均精确度均值?#

提高 YOLO26 模型的平均精确度均值 (mAP) 涉及几个步骤:

  1. 调整超参数:尝试不同的学习率、批次大小和图像增强。
  2. 数据增强:使用 Mosaic 和 MixUp 等技术来创建多样化的训练样本。
  3. 图像分块:将大图像拆分为更小的分块,以提高小目标的检测准确性。

请参阅我们关于微调你的模型的详细部分以获取具体策略。

我该如何在 Python 中访问 YOLO26 模型评估指标?#

运行验证后,你可以使用 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 性能指标指南。

评论