如何测试计算机视觉模型#
简介#
模型测试用于检查已训练的模型在从未见过的新鲜真实世界数据(如运动、光线不足或部分遮挡的物体,而非精选基准测试)上的表现。虽然模型评估是在带标签的数据集上测量指标,但测试可验证模型学到的行为在部署前是否符合你的应用目标。本指南涵盖如何准备测试数据、测试 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 等数据集上进行了预训练,因此结果可以让你快速了解模型在你的具体场景中可能表现如何。
验证与预测模式的对比#
如何分析测试结果#
获得预测结果和指标后,深入挖掘模型失败的原因和位置:
- 误分类图像: 识别并审查模型分类错误的图像,以了解出错环节。
- 错误分析: 执行彻底的错误分析,以理解错误类型(例如误报与漏报)及其潜在原因。
- 偏见与公平性: 检查模型预测中是否存在偏见。确保模型在不同数据子集上表现一致,特别是当数据涉及种族、性别或年龄等敏感属性时。
机器学习中的过拟合与欠拟合#
在测试机器学习模型时,特别是在计算机视觉中,务必注意防范过拟合和欠拟合。这些问题会严重影响模型处理新数据时的效果。
| 问题 | 常见征兆 | 如何解决 |
|---|---|---|
| 过拟合 | 训练准确率高但验证准确率低;对图像中的微小变化或无关细节过度敏感 | 应用如 Dropout 等正则化方法,增加训练数据集的大小,简化模型架构 |
| 欠拟合 | 即便是训练集上的准确率也很低;始终无法识别明显的特征或物体 | 使用更复杂的模型,提供更多相关的特征,增加训练轮数 |
关键在于找到平衡点,使模型在训练和验证数据集上都能表现良好。在测试期间定期监控指标并直观检查预测结果,可以帮助你发现模型向任一极端偏移的倾向。
计算机视觉中的数据泄露及其预防方法#
数据泄露是指训练数据集之外的信息意外被用于模型训练。模型在训练过程中可能显得非常准确,但一旦发生数据泄露,它在处理新、未见数据时将表现不佳。
泄露可能很难发现,通常源于训练数据中隐藏的偏见:
| 偏见类型 | 表现形式 |
|---|---|
| 摄像机偏见 | 不同的角度、光照、阴影和摄像机运动引入了不必要的模式 |
| 覆盖偏见 | 图像中的徽标、时间戳或其他叠加层误导了模型 |
| 字体和物体偏见 | 特定类别中频繁出现的特定字体或物体会扭曲模型的学习效果 |
| 空间偏见 | 前景与背景失衡、边界框分布以及对象位置会影响训练 |
| 标签和领域偏见 | 错误的标签或数据类型的转移导致泄露 |
如何检测和避免数据泄露#
要发现数据泄露,请检查模型结果是否好得令人意外,查看是否存在某个特征对结果贡献过大,再次确认模型的决策是否在直觉上合理,并验证数据在任何处理前是否被正确划分。
为了防止泄露,应使用包含来自不同摄像机和环境的图像或视频的多样化数据集,并仔细审查数据中是否存在隐藏偏见——例如所有正样本均在一天中的特定时间采集。避免数据泄露能使你的计算机视觉模型在现实情况下更加可靠。
模型测试之后的步骤#
测试模型后,接下来的步骤取决于结果。如果模型表现良好,你可以将其部署到真实世界环境中。如果结果不理想,则需要进行改进。这可能涉及分析错误、收集更多数据、提高数据质量、调整超参数以及重新训练模型。
结论#
严谨的模型测试——在留出测试集上进行验证、在真实世界图像上进行预测以及检查过拟合和数据泄露——是将经过良好评估的模型转变为可靠模型的关键。在部署前解决测试浮现的问题,你的模型将更有可能在生产环境中按预期运行。如果在过程中遇到问题,请在 Ultralytics GitHub 仓库或 Ultralytics Discord 服务器上向社区寻求帮助。
常见问题解答#
模型评估通过带标签数据集上的指标来衡量性能,而模型测试则检查模型在类似于部署条件的新、未见数据上的表现。评估从受控数据集中产生诸如精确率和 mAP 的数字;测试则揭示学到的行为在多变的光照、运动或遮挡下是否依然成立。查看模型测试与模型评估了解具体示例。
使用预测模式并传入文件夹路径作为
source—— YOLO26 会对文件夹中的每张图像运行并可保存带注释的结果供审查。预测模式不计算指标;若要在带标签的集合上量化性能,请改用验证模式。这两种工作流均显示在如何测试 YOLO26 模型中。对于检测模型,验证会报告精确率、召回率、mAP50 和 mAP50-95,并保存包含混淆矩阵和精确率-召回率曲线在内的图表。要在专门的测试划分(而非默认的
val划分)上进行验证,请在数据集 YAML 中定义test:并传入split="test"。有关如何解读每个指标,请参阅性能指标指南。对于过拟合,请应用 dropout 等正则化技术、增加训练数据集的大小或简化模型架构。对于欠拟合,请使用更复杂的模型、提供更多相关特征或训练更多的轮数。每种问题的迹象和对应的修复方法总结在机器学习中的过拟合与欠拟合中。
如果测试表现好得令人惊奇、某个单一特征主导了预测,或者模型的决策不符合直觉,则需怀疑存在数据泄露。预防方法包括:使用来自不同相机和环境的多样化数据集、审查数据中隐藏的偏见、以及验证训练/测试划分是否发生在任何处理之前。有关常见的偏见类型,请参见计算机视觉中的数据泄露。