Ultralytics YOLO27:

如何测试计算机视觉模型#

简介#

模型测试用于检查训练好的模型在此前未见过的真实世界数据上的表现——这些数据中的目标可能会移动、光线不足或部分被遮挡,而不是经过精心整理的基准数据集。模型评估会在带标签的数据集上衡量指标,而测试则会在部署前验证模型学到的行为是否符合你的应用目标。本指南介绍如何准备测试数据、测试 Ultralytics YOLO26 模型,以及发现过拟合、欠拟合和数据泄漏。



Watch: How to Test Machine Learning Models | Avoid Data Leakage in Computer Vision 🚀

模型测试与模型评估#

模型测试和模型评估是计算机视觉项目中的两个不同步骤。评估通过带标签的数据集上的指标来衡量性能;测试则检查模型学到的行为能否在类似部署的条件下保持稳定。

假设你已经训练了一个用于识别猫和狗的计算机视觉模型,并希望将其部署在宠物店监控动物。在模型评估阶段,你使用带标签的数据集计算准确率精确率召回率等指标。例如,模型在某个数据集中区分猫和狗的准确率可能达到 98%。

评估之后,你使用来自宠物店的图像测试模型,查看它在更多样、更真实的条件下识别猫和狗的效果。你需要检查:当猫和狗正在移动、处于不同光照条件下,或被玩具、家具等物体部分遮挡时,模型能否正确标注它们。模型测试用于确认模型在受控评估环境之外的行为符合预期。

模型测试准备#

计算机视觉数据集通常会划分为训练集和测试集,以模拟真实世界条件:训练数据用于教会模型,而测试数据用于验证模型在从未见过的示例上的行为。Ultralytics Platform将数据集组织和标注集中在一个地方,有助于构建带标签的测试集。

开始测试前
  • **真实代表性:**此前未见过的测试数据应与模型部署后将要处理的数据相似。这样才能真实反映模型的能力。
  • **足够的数据量:**测试数据集需要足够大,才能可靠地了解模型的表现。

如何测试 YOLO26 模型#

测试训练好的 YOLO26 模型包含两个互补的工作流:在带标签的测试划分上进行验证以获取定量指标,以及在新图像上进行预测以定性检查模型行为。

在带标签的测试划分上进行验证#

验证模式会将模型预测结果与真实标签进行比较,并为检测模型报告精确率、召回率、mAP50 和 mAP50-95。它还会保存混淆矩阵和精确率-召回率曲线等可视化辅助结果,帮助你发现模型可能表现不佳的具体方面。

使用方法
from ultralytics import YOLO

# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")

# Validate; add split="test" if your dataset YAML defines a test split
metrics = model.val(data="coco8.yaml")
print(metrics.box.map)  # mAP50-95

默认情况下,验证会在数据集的 val 划分上运行。若要衡量模型在留出的测试集上的性能,请在数据集 YAML 中定义 test: 划分,并传入 split="test"

在新图像上进行预测#

预测模式会在新、未见过的数据上运行模型,无需标签。它不会生成性能指标,但保存带标注的输出结果后,你可以查看模型在真实世界图像上的行为——例如一次性处理整个测试图像文件夹。

使用方法
from ultralytics import YOLO

# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")

# Run predictions on a folder of test images and save annotated results
results = model.predict(source="path/to/test_images", save=True)
自定义训练前测试预训练模型

若要在投入自定义训练前检查 YOLO26 是否适合你的应用,请使用预训练检查点在你自己的图像上运行预测模式。这些模型在 COCO 等数据集上进行了预训练,因此结果可以快速帮助你了解模型在特定场景中的潜在表现。

验证模式与预测模式#

模式用途需要标签输出
验证根据真实标签量化性能精确率、召回率、mAP50、mAP50-95、混淆矩阵、PR 曲线
预测检查模型在新的无标签数据上的行为带标注的图像和预测结果,无指标

如何分析测试结果#

获得预测结果和指标后,深入分析模型在何处以及为何失败:

  • **错误分类的图像:**找出并检查模型错误分类的图像,了解模型出错的地方。
  • **错误分析:**进行全面的错误分析,了解错误类型(例如假阳性与假阴性)及其潜在原因。
  • **偏差与公平性:**检查模型预测中是否存在偏差。确保模型在数据的不同子集上表现同样良好,尤其是在数据包含种族、性别或年龄等敏感属性时。

机器学习中的过拟合与欠拟合#

测试机器学习模型时,尤其是在计算机视觉领域,务必注意过拟合和欠拟合。这些问题会显著影响模型处理新数据的效果。

问题常见迹象应对方法
过拟合训练准确率高但验证准确率低;对图像中的细微变化或无关细节过于敏感应用 正则化(如 dropout),增大训练数据集,简化模型架构
欠拟合即使在训练集上准确率也很低;持续无法识别明显的特征或目标使用更复杂的模型,提供更多相关特征,增加训练 轮次

关键是找到平衡点,使模型在训练集和验证集上都能表现良好。在测试期间定期监控指标并目视检查预测结果,有助于你发现模型是否向任一极端偏移。

Comparison of underfitting, appropriate fitting, and overfitting on the same dataset

计算机视觉中的数据泄漏及其避免方法#

数据泄漏是指训练数据集之外的信息意外被用于训练模型。发生数据泄漏时,模型在训练期间可能看起来非常准确,但在新的、未见过的数据上表现不佳。

数据泄漏很难发现,而且通常源于训练数据中的隐性偏差:

偏差类型表现形式
相机偏差不同角度、光照、阴影和相机运动引入不需要的模式
叠加层偏差图像中的徽标、时间戳或其他叠加层误导模型
字体和目标偏差经常出现在特定类别中的字体或目标使模型学习产生偏差
空间偏差前景与背景的不平衡、边界框分布以及目标位置会影响训练
标签和域偏差错误标签或数据类型的变化会导致数据泄漏

如何检测和避免数据泄漏#

要发现数据泄漏,请检查模型结果是否好得出奇,观察某个特征是否比其他特征重要得多,重新确认模型的决策是否符合直觉,并验证数据是否在任何处理之前就已正确划分。

为防止数据泄漏,请使用包含来自不同相机和环境的图像或视频的多样化数据集,并仔细检查数据中的隐性偏差——例如所有正样本是否都采集于一天中的特定时段。避免数据泄漏能让你的计算机视觉模型在真实世界场景中更加可靠。

模型测试之后#

测试模型后,下一步取决于结果。如果模型表现良好,你可以将其部署到真实世界环境中。如果结果不理想,则需要进行改进。这可能包括分析错误、收集更多数据、提升数据质量、调整超参数以及重新训练模型。

结论#

严格的模型测试——在留出的测试划分上进行验证、在真实世界图像上进行预测,以及检查过拟合和数据泄漏——能将经过充分评估的模型转变为可靠的模型。在部署前解决测试发现的问题,模型就更有可能在生产环境中按预期运行。如果过程中遇到问题,可以在 Ultralytics GitHub 仓库Ultralytics Discord 服务器中向社区提问。

常见问题#

  • 模型评估使用带标签的数据集上的指标来衡量性能,而模型测试则检查模型在类似部署条件的新、未见过数据上的行为。评估会根据受控数据集生成精确率和 mAP 等数值;测试则会揭示模型学到的行为能否经受不同光照、运动或遮挡的考验。请参阅模型测试与模型评估了解完整示例。

  • 使用预测模式,并将文件夹路径作为 source 传入——YOLO26 会处理文件夹中的每张图像,并可保存带标注的结果供你检查。预测模式不会计算指标;若要量化带标签数据集上的性能,请改用验证模式如何测试 YOLO26 模型中展示了这两种工作流。

  • 对于检测模型,验证会报告精确率、召回率、mAP50 和 mAP50-95,并保存包括混淆矩阵和精确率-召回率曲线在内的图表。若要在专用测试划分上进行验证,而不是默认的 val 划分,请在数据集 YAML 中定义 test:,并传入 split="test"。有关如何解读各项指标,请参阅性能指标指南

  • 对于过拟合,应用 dropout 等正则化技术,增大训练数据集,或简化模型架构。对于欠拟合,使用更复杂的模型,提供更多相关特征,或增加训练轮次。机器学习中的过拟合与欠拟合总结了各类问题的迹象及相应的修复方法。

  • 当测试性能好得出奇、单个特征主导预测,或模型的决策不符合直觉时,应怀疑存在数据泄漏。使用来自不同相机和环境的多样化数据集,检查数据中的隐性偏差,并验证训练集与测试集是否在任何处理之前完成划分,从而防止数据泄漏。有关常见偏差类型,请参阅计算机视觉中的数据泄漏

  • 如果结果符合项目目标,就部署模型;如果不符合,就在部署前进行改进。这可能意味着分析错误、收集更多样化的数据、提升数据质量、调整超参数以及重新训练。每轮修改后都要重复测试,以确认修复有效。

评论