Ultralytics-中文文档-十四-
Ultralytics 中文文档(十四)
理解计算机视觉项目中的关键步骤
介绍
计算机视觉是人工智能(AI)的一个子领域,帮助计算机像人类一样看见和理解世界。它处理和分析图像或视频,以提取信息、识别模式,并基于这些数据做出决策。
www.youtube.com/embed/CfbHwPG01cE
观看: 如何进行计算机视觉项目 | 一步一步的指南
计算机视觉技术,如目标检测、图像分类和实例分割,可以应用于各个行业,从自动驾驶到医学成像,以获得有价值的见解。

在自己的计算机视觉项目上工作是理解和学习计算机视觉的好方法。然而,一个计算机视觉项目可能包含许多步骤,起初可能会让人感到困惑。在本指南结束时,你将熟悉计算机视觉项目中涉及的步骤。我们将从项目的开始到结束逐步讲解,解释每个部分的重要性。让我们开始吧,让你的计算机视觉项目取得成功!
计算机视觉项目概述
在讨论计算机视觉项目中每个步骤的细节之前,让我们看看整体过程。如果你今天开始一个计算机视觉项目,你将采取以下步骤:
-
你的首要任务是理解项目的要求。
-
然后,你会收集并准确标记将帮助训练模型的图像。
-
接下来,你会清理数据并应用增强技术,以准备模型训练。
-
在模型训练后,你会彻底测试和评估模型,以确保它在不同条件下表现一致。
-
最后,你会将模型部署到现实世界中,并根据新的见解和反馈进行更新。

现在我们知道了预期的内容,让我们直接进入步骤,推动你的项目向前发展。
第一步:定义项目目标
任何计算机视觉项目的第一步是清晰地定义你要解决的问题。了解最终目标有助于你开始构建解决方案。尤其在计算机视觉领域,这一点尤为重要,因为项目的目标将直接影响你需要关注的计算机视觉任务。
这里有一些项目目标的示例以及可以用来实现这些目标的计算机视觉任务:
-
目标: 开发一个系统,可以监控和管理高速公路上不同车辆类型的流动,以改善交通管理和安全性。
- 计算机视觉任务: 对象检测非常适合交通监控,因为它能够有效地定位和识别多个车辆。相比于图像分割,它的计算需求更低,为实时分析提供了更快的速度,而后者则提供了此任务不需要的过多细节。
-
目标: 开发一个工具,通过提供精确的像素级肿瘤轮廓,来辅助放射科医生在医学影像扫描中。
- 计算机视觉任务: 图像分割适用于医学影像,因为它提供了关键的肿瘤准确和详细的边界,这对评估大小、形状和治疗计划至关重要。
-
目标: 创建一个数字系统,分类各种文档(如发票、收据、法律文件),以提高组织效率和文档检索。
- 计算机视觉任务: 在这里,图像分类非常理想,因为它一次处理一个文档,无需考虑文档在图像中的位置。这种方法简化并加速了排序过程。
步骤 1.5:选择合适的模型和训练方法
在理解项目目标和合适的计算机视觉任务之后,定义项目目标的重要部分是选择合适的模型和训练方法。
根据目标的不同,您可以选择先选择模型,还是在第 2 步收集数据后再选择模型。例如,如果您的项目高度依赖于特定类型数据的可用性,那么先收集和分析数据可能更实际。另一方面,如果您清楚模型要求,可以先选择模型,然后收集符合这些规格的数据。
在选择从零开始训练还是使用迁移学习时,会影响您如何准备数据。从零开始训练需要一个多样化的数据集,从头开始建立模型的理解。另一方面,迁移学习允许您使用预训练模型,并用较小、更具体的数据集进行调整。此外,选择特定的训练模型还将决定您如何准备数据,例如根据模型的特定要求调整图像大小或添加注释。

注意:在选择模型时,考虑其部署以确保兼容性和性能。例如,轻量级模型非常适合边缘计算,因为它们在资源受限设备上效率高。要了解更多关于定义项目目标和选择合适模型的关键点,请阅读我们的指南。
在进行计算机视觉项目的实际操作之前,了解这些细节非常重要。在进入第二步之前,请确保您已考虑以下内容:
-
清晰定义您试图解决的问题。
-
确定项目的最终目标。
-
确定所需的具体计算机视觉任务(例如目标检测、图像分类、图像分割)。
-
决定是从头开始训练模型还是使用迁移学习。
-
选择适合您任务和部署需求的合适模型。
第二步:数据收集和数据标注
您的计算机视觉模型的质量取决于数据集的质量。您可以从互联网上收集图像、拍摄自己的照片,或使用预先存在的数据集。以下是一些下载高质量数据集的好资源:Google 数据集搜索引擎,UC Irvine 机器学习库,以及Kaggle 数据集。
一些库,如 Ultralytics,提供对各种数据集的内置支持,使您能够更轻松地开始使用高质量数据。这些库通常包括使用流行数据集的实用程序,可以在项目的初始阶段节省大量时间和精力。
但是,如果您选择收集图像或拍摄自己的照片,您将需要对数据进行标注。数据标注是将标签分配给数据以向模型传授知识的过程。您将处理的数据标注类型取决于您的具体计算机视觉技术。以下是一些示例:
-
图像分类: 您将整个图像标记为一个单一类别。
-
目标检测: 您将在图像中的每个对象周围绘制边界框并标记每个框。
-
图像分割: 您将根据其所属对象标记图像中的每个像素,创建详细的对象边界。

数据收集和标注可能是一项耗时的手动工作。标注工具可以帮助简化这一过程。以下是一些有用的开源标注工具:LabeI Studio,CVAT,以及Labelme。
第三步:数据增强和数据集分割
在收集和标注图像数据之后,在执行数据增强之前,将数据集分割为训练、验证和测试集是非常重要的。在增强数据之前对数据集进行分割对于在原始、未改变的数据上测试和验证您的模型非常关键。这有助于准确评估模型在新的、未见过的数据上的泛化能力。
这是如何拆分您的数据:
-
训练集: 它是您数据的最大部分,通常占总量的 70-80%,用于训练您的模型。
-
验证集: 通常约占您数据的 10-15%;此集用于在训练过程中调整超参数和验证模型,有助于防止过拟合。
-
测试集: 剩余的 10-15% 数据作为测试集保留。在训练完成后,它用于评估模型在未见数据上的表现。
在分割数据后,您可以通过应用旋转、缩放和翻转图像等转换来进行数据增强,从而人为地增加数据集的大小。数据增强使您的模型对变化更为鲁棒,并提高其在未见图像上的性能。

类似 OpenCV、Albumentations 和 TensorFlow 提供灵活的增强功能。此外,一些库如 Ultralytics 在其模型训练功能中直接内置了增强设置,简化了该过程。
要更好地理解数据,您可以使用诸如 Matplotlib 或 Seaborn 的工具可视化图像并分析其分布和特征。可视化数据有助于识别模式、异常情况以及增强技术的有效性。您还可以使用 Ultralytics Explorer,这是一个探索计算机视觉数据集的工具,支持语义搜索、SQL 查询和向量相似性搜索。

通过正确理解、分割和增强数据,您可以开发出在实际应用中表现良好的经过良好训练、验证和测试的模型。
第四步:模型训练
一旦您的数据集准备好进行训练,您可以专注于设置必要的环境、管理数据集和训练模型。
首先,您需要确保环境配置正确。通常包括以下内容:
-
安装 TensorFlow、PyTorch 或 Ultralytics 等必要的库和框架。
-
如果您使用 GPU,安装 CUDA 和 cuDNN 等库将有助于启用 GPU 加速并加快训练过程。
然后,您可以将训练和验证数据集加载到您的环境中。通过调整大小、格式转换或增强,对数据进行归一化和预处理。选择您的模型后,配置层并指定超参数。通过设置损失函数、优化器和性能指标来编译模型。
类似 Ultralytics 这样的库简化了训练过程。您可以通过少量代码将数据馈送到模型中开始训练。这些库自动处理权重调整、反向传播和验证。它们还提供工具来轻松监控进展并调整超参数。训练完成后,只需几个命令即可保存模型及其权重。
需要牢记的是,高效的训练需要良好的数据集管理。使用数据集的版本控制来跟踪更改并确保可重现性。像 DVC(数据版本控制)这样的工具可以帮助管理大型数据集。
第 5 步:模型评估和模型微调
评估您的模型性能使用各种指标非常重要,并对其进行改进以提高准确性。评估有助于识别模型表现优异和需要改进的领域。微调确保模型优化以获得最佳性能。
-
性能指标: 使用准确率、精确率、召回率和 F1 分数等指标评估您的模型性能。这些指标提供了关于您的模型做出预测效果的见解。
-
超参数调整: 调整超参数以优化模型性能。像网格搜索或随机搜索这样的技术可以帮助找到最佳的超参数值。
-
微调:对模型架构或训练过程进行小幅调整以增强性能。这可能涉及调整学习率、批次大小或其他模型参数。
第 6 步:模型测试
在此步骤中,您可以确保您的模型在完全未见数据上表现良好,确认其准备部署。模型测试和模型评估的不同之处在于它侧重于验证最终模型的性能,而不是迭代地改进它。
彻底测试和调试可能出现的任何常见问题是非常重要的。在未用于训练或验证的独立测试数据集上测试您的模型。该数据集应该代表真实场景,以确保模型的性能一致和可靠。
同时,解决常见问题,如过拟合、欠拟合和数据泄漏。使用交叉验证和异常检测等技术来识别和修复这些问题。
第 7 步:模型部署
一旦您的模型经过彻底测试,就该是部署它的时候了。部署涉及使您的模型在生产环境中可用。以下是部署计算机视觉模型的步骤:
-
设置环境:为您选择的部署选项配置必要的基础设施,无论是基于云的(AWS、Google Cloud、Azure)还是基于边缘的(本地设备、物联网)。
-
导出模型: 将您的模型导出为适当的格式(例如 ONNX、TensorRT、YOLOv8 的 CoreML),以确保与您的部署平台兼容。
-
模型部署: 通过设置 API 或端点部署模型,并将其与您的应用程序集成。
-
确保可伸缩性: 实施负载均衡器、自动扩展组和监控工具,以管理资源并处理不断增加的数据和用户请求。
第 8 步:监控、维护和文档化
一旦您的模型部署完毕,持续监控其性能、进行维护以处理任何问题,并对整个过程进行文档化,以便将来参考和改进。
监控工具可以帮助您跟踪关键性能指标(KPI)并检测精度的异常或下降。通过监控模型,您可以了解模型漂移,即由于输入数据变化导致模型性能随时间下降的情况。定期使用更新的数据对模型进行重新训练,以保持精度和相关性。

除了监控和维护外,文档也是关键。彻底记录整个过程,包括模型架构、训练流程、超参数、数据预处理步骤以及部署和维护过程中的任何更改。良好的文档确保可复制性,并使将来的更新或故障排除更加容易。通过有效地监控、维护和记录您的模型,可以确保其在整个生命周期内保持准确、可靠且易于管理。
与社区互动
与计算机视觉爱好者社区互动可以帮助您在自信地处理计算机视觉项目时解决任何问题。以下是学习、故障排除和有效建立网络的一些方法。
社区资源
-
GitHub Issues: 查看YOLOv8 GitHub 代码库,使用 Issues 标签提出问题、报告错误和建议新功能。活跃的社区和维护者将帮助解决具体问题。
-
Ultralytics Discord 服务器: 加入Ultralytics Discord 服务器,与其他用户和开发者互动,获取支持并分享见解。
官方文档
- Ultralytics YOLOv8 文档: 探索官方 YOLOv8 文档,详细指南提供了有关不同计算机视觉任务和项目的实用技巧。
使用这些资源将帮助您克服挑战,并跟上计算机视觉社区的最新趋势和最佳实践。
今天开始您的计算机视觉项目!
承担计算机视觉项目可能会令人兴奋且收获满满。通过遵循本指南中的步骤,您可以为成功建立坚实的基础。每个步骤对于开发符合您目标并在实际场景中表现良好的解决方案至关重要。随着经验的增长,您将发现改进项目的高级技术和工具。保持好奇心,继续学习,并探索新的方法和创新!
常见问题
如何为我的项目选择适合的计算机视觉任务?
选择正确的计算机视觉任务取决于项目的最终目标。例如,如果您想监控交通情况,目标检测是合适的,因为它可以实时定位和识别多种车辆类型。对于医学图像,图像分割非常适合提供肿瘤详细边界,有助于诊断和治疗规划。了解更多关于目标检测、图像分类和实例分割等具体任务的信息。
为什么在计算机视觉项目中数据标注至关重要?
数据标注对于教会模型识别模式至关重要。标注的类型随任务而异:
-
图像分类:整个图像标记为单个类别。
-
目标检测:在对象周围绘制边界框。
-
图像分割:根据所属对象将每个像素标记。
工具如 Label Studio、CVAT 和 Labelme 可以辅助此过程。更多详情,请参阅我们的数据收集和标注指南。
如何有效地增强和分割我的数据集?
在增强之前分割数据集有助于验证模型在原始、未改变的数据上的性能。请遵循以下步骤:
-
训练集:您数据的 70-80%。
-
验证集:用于超参数调整的 10-15%。
-
测试集:剩余的 10-15% 用于最终评估。
在分割后,应用旋转、缩放和翻转等数据增强技术,以增加数据集的多样性。诸如 Albumentations 和 OpenCV 的库可以提供帮助。Ultralytics 还提供了内置的增强设置以便使用。
如何导出我训练好的计算机视觉模型以进行部署?
导出您的模型可以确保与不同的部署平台兼容。Ultralytics 提供多种格式,包括 ONNX、TensorRT 和 CoreML。要导出您的 YOLOv8 模型,请按照本指南操作:
-
使用
export函数并带上所需的格式参数。 -
确保导出的模型符合部署环境的规格(例如边缘设备、云)。
欲了解更多信息,请查阅模型导出指南。
监控和维护部署的计算机视觉模型的最佳实践是什么?
持续监控和维护对于模型的长期成功至关重要。实施跟踪关键绩效指标(KPIs)和检测异常的工具。定期使用更新的数据重新训练模型以抵消模型漂移。记录整个过程,包括模型架构、超参数和变更,以确保可重现性和未来更新的便利性。详见我们的监控和维护指南。
定义您的计算机视觉项目的实用指南
简介
任何计算机视觉项目的第一步都是定义您希望实现的目标。从数据收集到模型部署,从一开始就有清晰的路线图是至关重要的。
如果您需要快速回顾计算机视觉项目基础知识,请花点时间阅读我们关于计算机视觉项目关键步骤的指南。它将为您提供整个过程的扎实概述。一旦您了解完毕,请回到这里深入探讨如何确切地定义和优化您项目的目标。
现在,让我们深入探讨为您的项目定义清晰问题陈述的核心,并探索您沿途需要做出的关键决策。
定义一个清晰的问题陈述
为您的项目设定明确的目标和目的是朝着找到最有效的解决方案迈出的第一大步。让我们了解如何清晰定义您项目的问题陈述:
-
确定核心问题: 确定您的计算机视觉项目旨在解决的具体挑战。
-
确定范围: 确定问题的边界。
-
考虑最终用户和利益相关者: 确定谁将受到解决方案影响。
-
分析项目需求和约束条件: 评估可用资源(时间、预算、人员)并识别任何技术或法规约束。
企业问题陈述的示例
让我们通过一个示例来详细介绍。
考虑一个计算机视觉项目,您希望估算高速公路上车辆的速度。核心问题在于当前的速度监测方法由于过时的雷达系统和手动处理而效率低下且容易出错。该项目旨在开发一个实时计算机视觉系统,可以替代传统的速度估算系统。

主要用户包括交通管理部门和执法机构,次要利益相关者是高速公路规划者和希望获得更安全道路的公众。关键要求包括评估预算、时间和人员,并解决高分辨率摄像头和实时数据处理等技术需求。此外,还必须考虑隐私和数据安全的法规限制。
设定可衡量的目标
设定可衡量的目标是计算机视觉项目成功的关键。这些目标应该清晰、可实现并具有时间限制。
例如,如果您正在开发一个系统来估算高速公路上的车辆速度。您可以考虑以下可衡量的目标:
-
在六个月内实现至少 95%的速度检测准确率,使用包含 1 万辆车辆图像的数据集。
-
系统应能以每秒 30 帧的速度处理实时视频流,并且延迟最小化。
通过设定具体和可量化的目标,您可以有效地跟踪进展,识别改进的领域,并确保项目按计划进行。
问题陈述与计算机视觉任务之间的连接
您的问题陈述帮助您理解哪种计算机视觉任务可以解决您的问题。
例如,如果您的问题是监测高速公路上的车辆速度,相关的计算机视觉任务是对象追踪。对象追踪是合适的,因为它允许系统在视频流中持续跟踪每辆车,这对准确计算它们的速度至关重要。

其他任务,如对象检测,不适合,因为它们不提供连续的位置或运动信息。一旦确定了合适的计算机视觉任务,它将指导项目中的几个关键方面,如模型选择、数据集准备和模型训练方法。
模型选择、数据集准备或模型训练方法,哪个先来?
模型选择、数据集准备和训练方法的顺序取决于您项目的具体情况。以下是一些帮助您决定的小贴士:
-
清晰的问题理解:如果您的问题和目标已经明确定义,请从模型选择开始。然后,根据模型的要求准备数据集,并选择适当的训练方法。
- 示例:首先选择一个用于估算车辆速度的交通监控系统模型。选择一个对象追踪模型,收集和标注高速公路视频,然后使用实时视频处理技术训练模型。
-
唯一或有限的数据:如果您的项目受唯一或有限数据的限制,请从数据集准备开始。例如,如果您拥有稀有的医学图像数据集,请首先进行标注和数据准备。然后,选择一个在这类数据上表现良好的模型,然后选择适合的训练方法。
- 示例:首先为一个小数据集的人脸识别系统准备数据。进行标注,然后选择适合有限数据的模型,例如用于迁移学习的预训练模型。最后,根据需要进行数据增强,选择一个训练方法来扩展数据集。
-
需要实验:在实验至关重要的项目中,从训练方法开始。这在研究项目中很常见,您可能会最初测试不同的训练技术。在找到有希望的方法后,调整您的模型选择,并根据您的发现准备数据集。
- 示例:在探索新方法检测制造缺陷的项目中,先从小数据子集进行实验。一旦找到有希望的技术,选择一个适合这些发现的模型,并准备一个全面的数据集。
社区中的常见讨论点
接下来,让我们来看看关于计算机视觉任务和项目规划的一些常见讨论点。
不同的计算机视觉任务是什么?
最受欢迎的计算机视觉任务包括图像分类、物体检测和图像分割。

关于各种任务的详细解释,请参阅 YOLOv8 任务的 Ultralytics 文档页面。
预训练模型能记住自定义训练前已知的类别吗?
不,预训练模型不会像传统意义上的“记住”类别。它们从大规模数据集中学习模式,并在自定义训练(微调)期间调整这些模式以适应你的特定任务。模型的容量是有限的,专注于新信息可能会覆盖一些先前的学习。

如果你想使用模型在预训练时已经了解的类别,一个实际的方法是使用两个模型:一个保留原始性能,另一个为你的特定任务进行微调。这样,你可以结合两个模型的输出。还有其他选择,如冻结层、将预训练模型用作特征提取器和任务特定的分支,但这些是更复杂的解决方案,需要更多的专业知识。
部署选项如何影响我的计算机视觉项目?
模型部署选项对你的计算机视觉项目的性能有重大影响。例如,部署环境必须处理模型的计算负载。以下是一些实际示例:
-
边缘设备:在智能手机或物联网设备等边缘设备上部署需要轻量级模型,因为它们的计算资源有限。例如,优化了这些环境的 TensorFlow Lite 和 ONNX Runtime 技术。
-
云服务器:云部署可以处理更复杂的具有较大计算需求的模型。AWS、Google Cloud 和 Azure 等云平台提供了根据项目需求扩展的强大硬件选项。
-
本地服务器:对于需要高数据隐私和安全性的场景,可能需要在本地部署。这需要进行显著的硬件投资,但可以完全控制数据和基础设施。
-
混合解决方案:某些项目可能会从混合方法中受益,其中一些处理在边缘进行,而更复杂的分析则由云端处理。这可以平衡性能需求与成本和延迟考虑。
每种部署选项都提供不同的优势和挑战,选择取决于特定的项目需求,如性能、成本和安全性。
与社区联系
通过与其他计算机视觉爱好者建立联系,可以为您的项目提供支持、解决方案和新想法非常有帮助。以下是一些学习、解决问题和建立网络的好方法:
社区支持渠道
-
GitHub 问题: 前往 YOLOv8 GitHub 仓库。您可以使用Issues 选项卡提出问题、报告错误和建议功能。社区和维护者可以帮助您解决遇到的具体问题。
-
Ultralytics Discord 服务器: 加入Ultralytics Discord 服务器,与其他用户和开发者建立联系,寻求支持,交流知识,讨论想法。
全面的指南和文档
- Ultralytics YOLOv8 文档: 探索官方 YOLOv8 文档,了解深入的指南和有价值的各种计算机视觉任务和项目的技巧。
结论
定义明确的问题和设定可衡量的目标是成功的计算机视觉项目的关键。我们强调从一开始就保持清晰和专注的重要性。设定具体的目标有助于避免疏忽。此外,通过 GitHub 或 Discord 等社区平台与他人保持联系对于学习和保持最新信息至关重要。简言之,良好的规划和参与社区对于成功的计算机视觉项目至关重要。
常见问题解答
如何为我的 Ultralytics 计算机视觉项目定义清晰的问题陈述?
要为您的 Ultralytics 计算机视觉项目定义明确的问题陈述,请按照以下步骤操作:
-
确定核心问题: 确定您的项目旨在解决的具体挑战。
-
确定范围: 清楚地勾画出您问题的边界。
-
考虑最终用户和利益相关者: 确定谁会受到您解决方案的影响。
-
分析项目需求和约束条件: 评估可用资源以及任何技术或法规限制。
提供明确的问题陈述确保项目保持专注并与您的目标保持一致。有关详细指南,请参考我们的实用指南。
为什么我应该在我的计算机视觉项目中使用 Ultralytics YOLOv8 进行速度估计?
Ultralytics YOLOv8 由于其实时物体追踪能力、高准确性以及在检测和监控车辆速度方面的强大性能,非常适合速度估计。通过利用前沿的计算机视觉技术,它克服了传统雷达系统的低效率和不准确性。查看我们关于使用 YOLOv8 进行速度估计的博客以获取更多见解和实际示例。
如何为我的计算机视觉项目使用 Ultralytics YOLOv8 设定有效的可衡量目标?
使用 SMART 标准设定有效且可衡量的目标:
-
具体: 定义清晰和详细的目标。
-
可衡量性: 确保目标是可量化的。
-
可实现性: 在你的能力范围内设定实际可达的目标。
-
相关性: 将目标与你的整体项目目标对齐。
-
有时间限制: 为每个目标设定截止日期。
例如,“使用一万辆车辆图像数据集在六个月内实现 95%的速度检测准确率。”这种方法有助于跟踪进展并识别改进的领域。阅读更多关于设定可衡量目标的内容。
部署选项如何影响我的 Ultralytics YOLO 模型的性能?
部署选项对你的 Ultralytics YOLO 模型的性能产生重要影响。以下是关键选项:
-
边缘设备: 使用像 TensorFlow Lite 或 ONNX Runtime 这样的轻量级模型,在资源有限的设备上部署。
-
云服务器: 利用强大的云平台,如 AWS、Google Cloud 或 Azure 来处理复杂的模型。
-
本地服务器: 高数据隐私和安全需求可能需要本地部署。
-
混合解决方案: 结合边缘和云计算方法,以实现平衡的性能和成本效益。
欲了解更多信息,请参考我们关于模型部署选项的详细指南。
计算机视觉项目中定义问题的最常见挑战是什么?
常见挑战包括:
-
问题陈述模糊或过于广泛。
-
不切实际的目标。
-
缺乏利益相关者的一致性。
-
技术约束的理解不足。
-
低估数据需求。
通过深入的初步研究、与利益相关者的清晰沟通以及问题陈述和目标的迭代精化来应对这些挑战。在我们的计算机视觉项目指南中了解更多有关这些挑战的信息。
计算机视觉的数据收集和注释策略
原文:
docs.ultralytics.com/guides/data-collection-and-annotation/
引言
在任何计算机视觉项目中取得成功的关键在于有效的数据收集和注释策略。数据的质量直接影响模型的性能,因此理解与数据收集和数据注释相关的最佳实践非常重要。
所有关于数据的考虑都应与项目的目标紧密对齐。您的注释策略的变化可能会改变项目的重点或有效性,反之亦然。在此基础上,让我们更详细地探讨数据收集和注释的最佳方法。
设置类别和数据收集
为计算机视觉项目收集图像和视频涉及定义类别数量、收集数据以及考虑道德问题。在开始收集数据之前,您需要明确以下内容:
为您的项目选择正确的类别
在开始计算机视觉项目时的第一个问题之一是包括多少类别。您需要确定类别成员资格,这涉及您希望模型识别和区分的不同类别或标签。类别的数量应由项目的具体目标决定。
例如,如果您想监控交通情况,您的类别可能包括“汽车”、“卡车”、“公共汽车”、“摩托车”和“自行车”。另一方面,如果要跟踪商店中的物品,则您的类别可以是“水果”、“蔬菜”、“饮料”和“零食”。根据项目目标定义类别有助于保持数据集的相关性和专注。
在定义类别时,另一个重要的区分是选择粗略或精细的分类计数。'计数'指的是您感兴趣的不同类别的数量。此决定影响您数据的粒度和模型的复杂性。以下是每种方法的考虑因素:
-
粗略分类计数:这些是更广泛、更包容的类别,如“车辆”和“非车辆”。它们简化了注释过程,需要较少的计算资源,但提供的信息较少,可能会限制模型在复杂场景中的有效性。
-
精细分类计数:包含更多精细区分的类别,如“轿车”、“SUV”、“皮卡车”和“摩托车”。它们捕捉了更详细的信息,提高了模型的准确性和性能。然而,它们需要更多的时间和人力来进行注释,并且需要更多的计算资源。
需要注意的是,在复杂项目中,从更具体的类别开始可能非常有帮助。更具体的类别让您能收集到更详细的数据,并获得更深入的见解和更清晰的分类。这不仅可以提高模型的准确性,还可以在需要时更容易调整模型,节省时间和资源。
数据来源
您可以使用公共数据集或收集自己的定制数据。像Kaggle和Google Dataset Search Engine上的公共数据集提供了经过良好标注和标准化的数据,这使它们成为训练和验证模型的良好起点。
另一方面,定制数据收集使您能够根据特定需求定制数据集。您可以使用摄像机或无人机捕获图像和视频,从网上抓取图像,或使用组织内现有的内部数据。定制数据使您能更好地控制其质量和相关性。结合公共和定制数据源有助于创建多样化和全面的数据集。
在数据收集中避免偏见
当您的数据集中某些群体或情景被低估或高估时,就会出现偏见。这会导致模型在某些数据上表现良好,而在其他数据上表现不佳。避免偏见至关重要,以确保您的计算机视觉模型在各种场景中都能表现良好。
下面是在收集数据时如何避免偏见的方法:
-
多样化来源:从多个来源收集数据,以捕捉不同的视角和场景。
-
平衡的代表性:包括来自所有相关群体的平衡代表性。例如,考虑不同的年龄、性别和种族。
-
持续监控:定期审查和更新您的数据集,以识别和解决任何新出现的偏见。
-
偏见缓解技术:使用过采样少数类别、数据增强和关注公平性的算法等方法。
遵循这些实践有助于创建更健壮和公平的模型,可以在真实世界的应用中进行良好的泛化。
什么是数据标注?
数据标注是将数据进行标记以使其可用于训练机器学习模型的过程。在计算机视觉中,这意味着为图像或视频打上模型需要学习的信息标签。没有正确标注的数据,模型就无法准确地学习输入与输出之间的关系。
数据标注类型
根据计算机视觉任务的具体要求,有不同类型的数据标注。以下是一些例子:
-
边界框:绘制在图像中物体周围的矩形框,主要用于目标检测任务。这些框由它们的左上角和右下角坐标定义。
-
多边形:对象的详细轮廓,比边界框标注更精确。多边形在实例分割等任务中使用,对象的形状非常重要。
-
掩模:二进制掩模,每个像素要么是对象的一部分,要么是背景。掩模在语义分割任务中使用,提供像素级的细节。
-
关键点:图像内标记的特定点,用于识别感兴趣的位置。关键点在姿势估计和面部标记检测等任务中使用。

常见标注格式
在选择标注类型后,选择适当的格式来存储和共享标注是非常重要的。
常用的格式包括 COCO,支持对象检测、关键点检测、材质分割、全景分割和图像字幕等各种标注类型,存储在 JSON 中。Pascal VOC 使用 XML 文件,主要用于对象检测任务。另一方面,YOLO 每张图像创建一个 .txt 文件,包含对象类别、坐标、高度和宽度的标注,非常适合对象检测任务。
标注技术
现在,假设您已选择了标注类型和格式,现在是时候建立清晰和客观的标签规则了。这些规则就像一张标注过程中的一致性和准确性的路线图。这些规则的关键方面包括:
-
清晰和细节:确保您的说明清晰明了。使用示例和插图来理解预期的标注内容。
-
一致性:保持标注的一致性。设定不同数据类型的标注标准,确保所有标注都遵循相同的规则。
-
减少偏见:保持中立。训练自己客观,尽量减少个人偏见,确保公平的标注。
-
效率:工作更智能,而不是更辛苦。使用能够自动化重复任务的工具和工作流程,使标注过程更快速、更高效。
定期审查和更新您的标签规则将有助于保持标注的准确性、一致性,并与项目目标保持一致。
热门标注工具
现在假设您已准备好进行标注。有几种开源工具可帮助简化数据标注过程。以下是一些有用的开放式标注工具:
-
Label Studio:一个灵活的工具,支持各种标注任务,并包括项目管理和质量控制功能。
-
CVAT:一个强大的工具,支持各种标注格式和可定制的工作流程,非常适合复杂项目。
-
Labelme:一个简单易用的工具,可以快速用多边形对图像进行标注,非常适合简单的任务。

这些开源工具价格友好,并提供各种功能,以满足不同的标注需求。
在标注数据之前需要考虑的更多事项
在开始标注数据之前,还有一些事项需要牢记。您应了解准确性、精确度、离群值和质量控制,以避免以逆向方式标记数据。
理解准确性和精确度
了解准确性和精确度之间的差异及其与标注的关系非常重要。准确性指标度量标注数据与真实值之间的接近程度。它帮助我们衡量标签如何反映现实场景。精确度指标评估标注的一致性。它检查您是否在整个数据集中给同一对象或特征分配相同的标签。高准确性和精确度通过减少噪音和改善模型从训练数据中泛化的能力,从而带来更好的训练模型。

识别离群值
离群值是与数据集中其他观察结果相差较大的数据点。在标注方面,离群值可能是错误标记的图像或与数据集其余部分不匹配的标注。离群值令人关注,因为它们可能扭曲模型的学习过程,导致预测不准确和泛化能力差。
可以使用各种方法检测和纠正离群值:
-
统计技术:用于检测数值特征如像素值、边界框坐标或物体尺寸中的离群值,可以使用诸如箱线图、直方图或 z 分数等方法。
-
视觉技术:用于发现类别特征如物体类别、颜色或形状中的异常值,使用绘制图像、标签或热图等视觉方法。
-
算法方法:使用聚类工具(例如 K 均值聚类、DBSCAN)和异常检测算法,基于数据分布模式识别离群值。
标注数据的质量控制
就像其他技术项目一样,标注数据的质量控制是必不可少的。定期检查标注以确保准确性和一致性是一个好习惯。可以通过几种不同的方式来实现这一点:
-
审查标注数据样本
-
使用自动化工具检测常见错误
-
另一人检查标注是否正确
如果你与多人合作,不同标注者之间的一致性非常重要。良好的标注者间协议意味着指导方针清晰,每个人都以相同的方式遵循它们。这样可以保持所有人在同一页面上,并使标注保持一致。
在审查过程中,如果发现错误,请及时更正并更新指南,以避免未来的错误。向标注者提供反馈,并定期进行培训以帮助减少错误。建立处理错误的强大流程有助于保持数据集的准确性和可靠性。
与社区分享您的想法
与其他计算机视觉爱好者交流想法和疑问可以帮助加速您的项目。以下是一些学习、故障排除和建立网络的好方法:
如何寻求帮助和支持
-
GitHub 问题: 访问 YOLOv8 GitHub 仓库,使用 Issues 选项卡 提出问题、报告错误和建议功能。社区和维护者将帮助您解决面临的任何问题。
-
Ultralytics Discord 服务器: 加入 Ultralytics Discord 服务器,与其他用户和开发者连接,获取支持,分享知识,并集思广益。
官方文档
- Ultralytics YOLOv8 文档: 参考官方 YOLOv8 文档,获取关于多种计算机视觉任务和项目的详尽指南和宝贵见解。
结论
通过遵循数据收集和注释的最佳实践、避免偏见以及使用正确的工具和技术,您可以显著提升模型的性能。参与社区并利用可用资源将使您保持信息更新,并帮助您有效地解决问题。请记住,优质数据是成功项目的基础,正确的策略将帮助您构建强大和可靠的模型。
常见问题解答
如何避免计算机视觉项目中数据收集中的偏见?
避免在数据收集中存在偏见,可以确保您的计算机视觉模型在各种场景下表现良好。为了减少偏见,考虑从多样化的来源收集数据,以捕捉不同的观点和场景。确保在所有相关群体中实现平衡的代表性,例如不同年龄、性别和种族。定期审查和更新数据集,以识别和解决任何新出现的偏见。过采样少数群体、数据增强和关注公平的算法等技术也可以帮助减少偏见。通过采用这些策略,您可以维护一个强大和公平的数据集,增强模型的泛化能力。
如何确保数据标注的高一致性和准确性?
确保数据标注的高一致性和准确性包括建立清晰和客观的标注指南。您的说明应该详细,包括示例和插图,以澄清期望。通过设定标准的标注各种数据类型的标准化标准来实现一致性,确保所有标注都遵循相同的规则。为了减少个人偏见,训练标注者保持中立和客观。定期审查和更新标注规则有助于保持准确性和与项目目标的一致性。使用自动化工具检查一致性,并从其他标注者那里获得反馈也有助于维持高质量的标注。
我需要多少张图像来训练 Ultralytics YOLO 模型?
对于使用 Ultralytics YOLO 模型进行有效的迁移学习和目标检测,每个类别至少需要几百个注释对象起步。如果只训练一个类别,至少从 100 张注释图像开始,然后训练大约 100 个周期。更复杂的任务可能需要每类数千张图像以实现高可靠性和性能。质量的注释至关重要,因此确保您的数据收集和注释过程严格符合项目的具体目标。在 YOLOv8 训练指南中探索详细的训练策略。
哪些数据标注工具比较流行?
几个流行的开源工具可以简化数据标注过程:
-
Label Studio:一款灵活的工具,支持各种注释任务、项目管理和质量控制功能。
-
CVAT:提供多种注释格式和可定制的工作流程,适用于复杂项目。
-
Labelme:适合快速且简单的多边形图像注释。
这些工具可以帮助增强您的注释工作流程的效率和准确性。有关详细的功能列表和指南,请参阅我们的数据标注工具文档。
计算机视觉中常用的数据标注类型有哪些?
不同类型的数据标注适用于各种计算机视觉任务:
-
边界框:主要用于对象检测,这些是围绕图像中对象的矩形框。
-
多边形:提供更精确的对象轮廓,适合实例分割任务。
-
掩模:提供像素级的详细信息,在语义分割中用于区分对象和背景。
-
关键点:识别图像中特定的兴趣点,适用于姿态估计和面部特征点检测等任务。
选择合适的注释类型取决于您项目的需求。在我们的数据标注指南中了解更多如何实施这些注释及其格式。
用于标注计算机视觉数据的数据预处理技术
原文:
docs.ultralytics.com/guides/preprocessing_annotated_data/
简介
在定义了计算机视觉项目的目标并收集和标注数据之后,下一步是预处理标注数据并为模型训练做准备。干净一致的数据对于创建性能良好的模型至关重要。
数据预处理是计算机视觉项目工作流程中的一步,包括调整图像大小、归一化像素值、增强数据集以及将数据拆分为训练、验证和测试集。让我们探索清理数据的基本技术和最佳实践!
数据预处理的重要性
我们已经在考虑多方面仔细收集和标注我们的数据。那么,是什么让数据预处理在计算机视觉项目中如此重要呢?数据预处理关乎将数据格式化为适合训练的格式,从而减少计算负载并提高模型性能。以下是预处理解决的一些原始数据常见问题:
-
噪声:数据中不相关或随机的变化。
-
不一致性:图像尺寸、格式和质量的变化。
-
不平衡:数据集中类别或类的分布不均。
数据预处理技术
数据预处理中的首要步骤之一是调整大小。有些模型设计用于处理可变输入大小,但许多模型要求一致的输入大小。调整图像大小使它们统一,并减少计算复杂性。
调整图像大小
你可以使用以下方法调整你的图片大小:
-
双线性插值:通过四个最近像素值的加权平均来平滑像素值。
-
最近邻插值:不进行平均,直接赋予最近的像素值,导致图像块状但计算速度更快。
为了简化调整大小的任务,你可以使用以下工具:
-
OpenCV:一个流行的计算机视觉库,具有丰富的图像处理功能。
-
PIL(Pillow):用于打开、操作和保存图像文件的 Python 图像处理库。
关于 YOLOv8,在模型训练期间的 'imgsz' 参数允许灵活的输入尺寸。设置为特定尺寸(如 640),模型将调整输入图像大小,使其最大尺寸为 640 像素,同时保持原始纵横比。
通过评估模型和数据集的具体需求,可以确定调整大小是否是必要的预处理步骤,或者你的模型是否可以有效处理各种大小的图像。
归一化像素值
另一种预处理技术是归一化。归一化将像素值缩放到标准范围,有助于在训练过程中更快地收敛并提高模型性能。以下是一些常见的归一化技术:
-
最小-最大缩放:将像素值缩放到 0 到 1 的范围内。
-
Z-Score 标准化:根据像素值的均值和标准差进行像素值缩放。
关于 YOLOv8,归一化是在模型训练过程中作为其预处理流水线的一部分无缝处理的。YOLOv8 自动执行多个预处理步骤,包括转换为 RGB、将像素值缩放到范围[0, 1]以及使用预定义的均值和标准差进行标准化。
拆分数据集
清理完数据之后,您可以开始拆分数据集。将数据分为训练集、验证集和测试集是为了确保可以评估模型在未见过的数据上的泛化性能。常见的划分是 70%用于训练、20%用于验证、10%用于测试。您可以使用诸如 scikit-learn 或 TensorFlow 等工具和库来拆分数据。
在拆分数据集时请考虑以下内容:
-
保持数据分布:确保在训练、验证和测试集之间保持类别的数据分布。
-
避免数据泄露:通常,在数据集拆分后进行数据增强。数据增强和任何其他预处理应仅应用于训练集,以防止验证集或测试集的信息影响模型训练。- 平衡类别:对于不平衡的数据集,考虑使用过抽样少数类或欠抽样多数类的技术来平衡训练集。
什么是数据增强?
最常讨论的数据预处理步骤之一是数据增强。数据增强通过创建图像的修改版本来人工增加数据集的大小。通过增强您的数据,您可以减少过拟合并改善模型的泛化能力。
这里还有一些数据增强的其他好处:
-
创建更强大的数据集:数据增强可以使模型对输入数据中的变化和扭曲更加稳健。这包括光照、方向和尺度的变化。
-
成本效益:数据增强是一种成本效益高的方法,可以增加训练数据的量,而无需收集和标记新数据。
-
更好地利用数据:通过创建新的变化,充分利用每一个可用的数据点。
数据增强方法
常见的增强技术包括翻转、旋转、缩放和颜色调整。多个库如 Albumentations、Imgaug 和 TensorFlow 的 ImageDataGenerator 都可以生成这些增强。

关于 YOLOv8,您可以通过修改数据集配置文件(.yaml 文件)对自定义数据集进行增强。在这个文件中,您可以添加一个增强部分,其中包含指定如何增强数据的参数。
Ultralytics YOLOv8 代码库 支持多种数据增强。您可以应用各种转换,例如:
-
随机裁剪
-
翻转:图像可以水平或垂直翻转。
-
旋转:图像可以按特定角度旋转。
-
扭曲
此外,您可以通过特定参数调整这些增强技术的强度,以生成更多的数据变化。
预处理案例研究
假设有一个项目旨在开发模型以检测和分类交通图像中不同类型的车辆,使用 YOLOv8。我们收集了交通图像并用边界框和标签进行了注释。
对于这个项目,预处理的每个步骤如下:
-
调整图像大小:由于 YOLOv8 处理灵活的输入尺寸并在训练期间自动调整图像大小,因此不需要手动调整大小。模型将根据指定的“imgsz”参数调整图像大小。
-
标准化像素值:YOLOv8 在预处理期间会自动将像素值归一化为 0 到 1 的范围,因此不需要额外处理。
-
分割数据集:使用像 scikit-learn 这样的工具将数据集分割为训练(70%)、验证(20%)和测试(10%)集。
-
数据增强:修改数据集配置文件(.yaml),包括随机裁剪、水平翻转和亮度调整等数据增强技术。
这些步骤确保数据集在没有潜在问题的情况下准备就绪,可以用于探索性数据分析(EDA)。
探索性数据分析技术
在预处理和增强数据集之后,下一步是通过探索性数据分析获得洞见。EDA 利用统计技术和可视化工具来理解数据的模式和分布。您可以识别类别不平衡或异常值等问题,并基于这些发现做出进一步的数据预处理或模型训练调整的决策。
统计 EDA 技术
统计技术通常从计算基本指标如均值、中位数、标准差和范围开始。这些指标快速概述了您的图像数据集的特性,如像素强度分布。理解这些基本统计有助于把握数据的整体质量和特征,早期发现任何异常情况。
视觉 EDA 技术
可视化在图像数据集的探索性数据分析(EDA)中至关重要。例如,类别不平衡分析是 EDA 的另一个关键方面。它有助于确定数据集中某些类别是否代表不足,使用条形图可视化不同图像类别或分类的分布能够快速显示任何不平衡情况。同样,使用箱线图等可视化工具可以识别异常值,突出显示像素强度或特征分布中的异常。异常值检测可防止异常数据点对结果产生偏斜影响。
常用的可视化工具包括:
-
直方图和箱线图:有助于理解像素值的分布并识别异常值。
-
散点图:有助于探索图像特征或标注之间的关系。
-
热图:用于可视化图像中像素强度的分布或标注特征的空间分布的有效工具。
使用 Ultralytics Explorer 进行探索性数据分析
若要进行更高级的探索性数据分析,你可以使用 Ultralytics Explorer 工具。它提供了强大的功能,用于探索计算机视觉数据集。通过支持语义搜索、SQL 查询和向量相似性搜索,该工具使得分析和理解数据变得轻而易举。使用 Ultralytics Explorer,你可以为数据集创建嵌入以查找相似图像,运行 SQL 查询以进行详细分析,并执行语义搜索,所有这些都通过用户友好的图形界面完成。

建立联系并连接
与其他计算机视觉爱好者讨论项目可以从不同角度获得新想法。以下是学习、解决问题和建立联系的一些好方法:
与社区联系的渠道
-
GitHub 问题: 访问 YOLOv8 GitHub 仓库并使用 Issues 选项卡 提出问题、报告错误并建议功能。社区和维护者会在那里帮助解决你面临的任何问题。
-
Ultralytics Discord 服务器: 加入 Ultralytics Discord 服务器 与其他用户和开发者连接,获取支持,分享知识,并进行头脑风暴。
官方文档
- Ultralytics YOLOv8 文档: 请参阅官方 YOLOv8 文档,获取关于多个计算机视觉任务和项目的详尽指南和宝贵见解。
你的数据集已准备就绪!
经过适当调整大小、归一化和增强的数据通过减少噪声和提升泛化能力来改善模型性能。通过遵循本指南中概述的预处理技术和最佳实践,你可以创建一个坚实的数据集。准备好预处理的数据集后,你可以自信地进入项目的下一步。
常见问题解答
数据预处理在计算机视觉项目中的重要性是什么?
数据预处理在计算机视觉项目中至关重要,因为它确保数据清洁、一致,并且以最佳格式进行模型训练。通过解决原始数据中的噪声、不一致性和不平衡等问题,预处理步骤如调整大小、归一化、增强和数据集分割有助于减少计算负荷并提高模型性能。欲了解更多详细信息,请访问计算机视觉项目的步骤。
我如何使用 Ultralytics YOLO 进行数据增强?
对于使用 Ultralytics YOLOv8 进行数据增强,您需要修改数据集配置文件(.yaml)。在这个文件中,您可以指定各种增强技术,如随机裁剪、水平翻转和亮度调整。这些可以通过这里解释的训练配置有效地完成。数据增强有助于创建更强大的数据集,减少过拟合,并提高模型的泛化能力。
计算机视觉数据的最佳数据归一化技术是什么?
归一化将像素值缩放到标准范围,以便在训练期间实现更快的收敛速度和改善的性能。常见的技术包括:
-
最小-最大缩放:将像素值缩放到 0 到 1 的范围内。
-
Z-Score 标准化:根据均值和标准差来缩放像素值。
对于 YOLOv8,归一化是自动处理的,包括转换为 RGB 并进行像素值缩放。在模型训练部分了解更多信息。
我应该如何将我的带注释数据集拆分用于训练?
将数据集拆分的常见做法是将其分为 70% 用于训练,20% 用于验证,以及 10% 用于测试。重要的是在这些拆分中保持类别的数据分布,并通过仅在训练集上执行增强来避免数据泄漏。使用像 scikit-learn 或 TensorFlow 这样的工具可以高效地拆分数据集。详细的数据集准备指南请参考。
在 YOLOv8 中可以处理不同大小的图像吗,而不需要手动调整大小?
是的,Ultralytics YOLOv8 可以通过模型训练中的 'imgsz' 参数处理不同大小的图像。该参数确保图像被调整大小,使其最大尺寸与指定尺寸(例如 640 像素)匹配,同时保持长宽比。要了解更灵活的输入处理和自动调整,请查看模型训练部分。
机器学习最佳实践和模型训练技巧
引言
在进行计算机视觉项目的模型训练时,最重要的一步之一是模型训练。在达到这一步之前,您需要明确您的目标,并收集和注释您的数据。在预处理数据以确保其干净一致后,您可以开始训练模型。
那么,什么是模型训练?模型训练是教授您的模型识别视觉模式并基于数据进行预测的过程。它直接影响您的应用程序的性能和准确性。在本指南中,我们将介绍有效训练计算机视觉模型的最佳实践、优化技术和故障排除技巧。
如何训练机器学习模型
计算机视觉模型通过调整其内部参数来最小化误差进行训练。最初,模型被提供一组大量带标签的图像。它对这些图像进行预测,预测结果与实际标签或内容进行比较,以计算误差。这些误差显示了模型预测与真实值之间的偏差有多大。
在训练过程中,模型通过一种称为反向传播的过程,迭代地进行预测、计算误差,并更新其参数。在这个过程中,模型调整其内部参数(权重和偏差),以减少误差。通过多次重复这一周期,模型逐渐提高其准确性。随着时间的推移,它学会识别复杂的模式,如形状、颜色和纹理。

这一学习过程使得计算机视觉模型能够执行各种任务,包括目标检测、实例分割和图像分类。最终目标是创建一个能够将学习泛化到新的、未见过的图像的模型,从而能够准确理解现实世界应用中的视觉数据。
现在我们知道了在训练模型时发生了什么,让我们来看看在训练模型时需要考虑的要点。
在大型数据集上进行训练
在计划使用大型数据集训练模型时,有几个不同的方面需要考虑。例如,可以调整批处理大小,控制 GPU 利用率,选择使用多尺度训练等。让我们详细介绍每个选项。
批处理大小和 GPU 利用率
在大型数据集上训练模型时,有效利用 GPU 至关重要。批量大小是一个重要因素。它是机器学习模型在单次训练迭代中处理的数据样本数量。利用 GPU 支持的最大批量大小,您可以充分发挥其性能,并减少模型训练所需的时间。然而,您要避免出现 GPU 内存不足的情况。如果遇到内存错误,可以逐步减少批量大小,直到模型能够平稳训练。
关于 YOLOv8,您可以在训练配置中设置batch_size参数以匹配您的 GPU 容量。此外,在训练脚本中设置batch=-1将自动确定能够高效处理的批量大小,基于您设备的能力。通过微调批量大小,您可以充分利用 GPU 资源,并改进整体训练过程。
Subset Training
Subset training 是一种聪明的策略,它涉及在代表更大数据集的较小数据集上训练模型。这可以节省时间和资源,尤其是在初始模型开发和测试期间。如果时间紧张或者正在尝试不同的模型配置,子集训练是一个很好的选择。
在 YOLOv8 中,您可以通过使用fraction参数轻松实现子集训练。此参数允许您指定用于训练的数据集的分数。例如,设置fraction=0.1将在数据的 10%上训练您的模型。您可以在进行完整数据集训练之前,使用这种技术进行快速迭代和调优模型。子集训练帮助您快速取得进展,并及早发现潜在问题。
Multi-scale Training
Multi-scale training 是一种通过训练具有不同尺寸图像的模型来改进其泛化能力的技术。您的模型可以学习检测不同尺度和距离的对象,并变得更加健壮。
例如,在训练 YOLOv8 时,可以通过设置scale参数来启用多尺度训练。该参数通过指定因子调整训练图像的大小,模拟不同距离的对象。例如,设置scale=0.5将减小图像尺寸一半,而scale=2.0将使其加倍。配置此参数允许您的模型体验各种图像尺度,并改进其在不同对象大小和场景中的检测能力。
缓存
缓存是提高训练机器学习模型效率的重要技术。通过将预处理的图像存储在内存中,缓存减少了 GPU 等待从磁盘加载数据的时间。模型可以持续接收数据,而不会受到由磁盘 I/O 操作引起的延迟影响。
缓存可以通过使用cache参数在训练 YOLOv8 时进行控制:
-
cache=True:将数据集图像存储在 RAM 中,提供最快的访问速度,但以增加内存使用为代价。 -
cache='disk':将图像存储在磁盘上,比 RAM 慢但比每次加载新数据更快。 -
cache=False:禁用缓存,完全依赖磁盘 I/O,这是最慢的选项。
混合精度训练
混合精度训练同时使用 16 位(FP16)和 32 位(FP32)浮点类型。利用 FP16 进行更快的计算和 FP32 在需要时保持精度的优势。大多数神经网络操作都是在 FP16 中进行,以从更快的计算和较低的内存使用中获益。然而,模型权重的主副本保持在 FP32 中,以确保在权重更新步骤中的准确性。您可以在相同的硬件限制内处理更大的模型或更大的批量大小。

要实现混合精度训练,您需要修改您的训练脚本,并确保您的硬件(如 GPU)支持它。许多现代深度学习框架,如 Tensorflow,提供了混合精度的内置支持。
当使用 YOLOv8 时,混合精度训练非常简单。您可以在训练配置中使用amp标志。设置amp=True启用自动混合精度(AMP)训练。混合精度训练是优化模型训练过程的一种简单而有效的方式。
预训练权重
使用预训练权重是加快模型训练过程的聪明方式。预训练权重来自已经在大型数据集上训练过的模型,为您的模型提供了一个良好的起点。迁移学习适应预训练模型到新的相关任务。微调预训练模型涉及使用这些权重开始训练,然后在您特定的数据集上继续训练。这种训练方法能够实现更快的训练时间,通常也能获得更好的性能,因为模型从基本特征开始具有坚实的理解。
pretrained参数使得在 YOLOv8 中进行迁移学习变得容易。设置pretrained=True将使用默认的预训练权重,或者您可以指定自定义预训练模型的路径。有效地利用预训练权重和迁移学习可以显著提升模型的能力并降低训练成本。
在处理大型数据集时考虑的其他技术
在处理大型数据集时,还有一些其他技术值得考虑:
-
学习率调度器:实现学习率调度器可以在训练过程中动态调整学习率。良好调节的学习率可以防止模型过度逼近极小值,并提高稳定性。在训练 YOLOv8 时,
lrf参数通过将最终学习率设置为初始速率的一部分,有助于管理学习率调度。 -
分布式训练:对于处理大数据集,分布式训练可以改变游戏规则。你可以通过将训练工作负载分布到多个 GPU 或机器上来减少训练时间。
训练的迭代次数选择
在训练模型时,一个迭代周期指的是完整地通过整个训练数据集一次。在一个迭代周期内,模型处理训练集中的每个示例,并根据学习算法更新其参数。通常需要多个迭代周期来使模型随着时间的推移学习和优化其参数。
一个常见的问题是如何确定模型训练的迭代次数。一个好的起点是 300 个迭代周期。如果模型早期出现过拟合,可以减少迭代次数。如果在 300 个迭代周期后没有出现过拟合,可以将训练延长至 600、1200 或更多个迭代周期。
然而,理想的迭代次数可以根据你的数据集大小和项目目标而变化。较大的数据集可能需要更多的迭代次数才能有效学习模型,而较小的数据集可能需要较少的迭代次数以避免过拟合。关于 YOLOv8,你可以在训练脚本中设置epochs参数。
早停
早停技术是优化模型训练的一种有价值的技术。通过监控验证性能,可以在模型停止改进时停止训练。这样可以节省计算资源并防止过拟合。
这一过程涉及设置一个耐心参数,用于确定在停止训练之前等待验证指标改善的迭代周期数。如果模型在这些周期内的表现没有改善,就会停止训练,以避免浪费时间和资源。

对于 YOLOv8,你可以通过在训练配置中设置耐心参数来启用早停技术。例如,patience=5表示如果连续 5 个迭代周期内验证指标没有改善,训练将会停止。使用这种方法可以确保训练过程保持高效,并在不过度计算的情况下实现最佳性能。
在云端和本地训练之间进行选择
有两种选项可以用来训练你的模型:云端训练和本地训练。
云端训练提供了可扩展性和强大的硬件,非常适合处理大数据集和复杂模型。像谷歌云、AWS 和 Azure 这样的平台提供按需访问高性能 GPU 和 TPU,加快了训练时间,并能够进行更大模型的实验。然而,云端训练可能成本高昂,特别是在长时间内,并且数据传输可能会增加成本和延迟。
本地训练提供了更大的控制和定制性,让您可以根据特定需求定制环境,并避免持续的云成本。对于长期项目来说,可能更经济,而且由于数据留存在本地,更安全。然而,本地硬件可能存在资源限制并需要维护,这可能会导致大型模型训练时间较长。
选择优化器
优化器是一种调整神经网络权重以最小化损失函数的算法,损失函数衡量模型的性能。简单来说,优化器通过调整参数来减少错误来帮助模型学习。选择正确的优化器直接影响模型学习的速度和准确性。
您还可以微调优化器参数以提高模型性能。调整学习率设置参数更新步骤的大小。为了稳定性,您可以从适度的学习率开始,并随着时间逐渐减小以改进长期学习。此外,设置动量确定过去更新对当前更新的影响程度。动量的常见值约为 0.9,通常提供良好的平衡。
常见优化器
不同的优化器具有各自的优势和劣势。让我们简要看一下几种常见的优化器。
-
随机梯度下降法(SGD - Stochastic Gradient Descent):
-
使用损失函数梯度更新模型参数。
-
简单高效但可能收敛速度较慢,并可能陷入局部最小值。
-
-
Adam(自适应矩估计法 - Adaptive Moment Estimation):
-
结合了随机梯度下降法(SGD)和动量法以及均方根传播(RMSProp)的优点。
-
根据梯度的一阶和二阶矩估计调整每个参数的学习率。
-
适用于嘈杂数据和稀疏梯度。
-
高效且通常需要较少的调整,使其成为YOLOv8推荐的优化器。
-
-
均方根传播(RMSProp - Root Mean Square Propagation):
-
通过损失函数梯度除以最近梯度幅值的运行平均值调整每个参数的学习率。
-
有助于处理梯度消失问题,对递归神经网络有效。
-
对于YOLOv8,optimizer参数允许您从多种优化器中选择,包括 SGD、Adam、AdamW、NAdam、RAdam 和 RMSProp,或者根据模型配置设置为auto以进行自动选择。
与社区连接
成为计算机视觉爱好者社区的一部分可以帮助您解决问题并更快地学习。以下是一些连接、获取帮助和分享想法的方法。
社区资源
-
GitHub Issues: 访问YOLOv8 GitHub 仓库,并使用 Issues 标签提问、报告错误以及建议新功能。社区和维护者非常活跃并愿意提供帮助。
-
Ultralytics Discord 服务器:加入Ultralytics Discord 服务器,与其他用户和开发者交流,获取支持并分享您的经验。
官方文档
- Ultralytics YOLOv8 文档:查看官方 YOLOv8 文档,获取关于各种计算机视觉项目的详细指南和实用技巧。
利用这些资源将帮助您解决挑战,并保持与计算机视觉社区最新趋势和实践的同步。
要点摘要
训练计算机视觉模型涉及遵循良好实践、优化策略以及解决问题。调整批次大小、混合精度训练和使用预训练权重等技术可以使模型工作更加高效和快速。子集训练和提前停止等方法有助于节省时间和资源。与社区保持联系并跟踪新趋势将有助于改进您的模型训练技能。
常见问题解答
在使用 Ultralytics YOLO 训练大型数据集时,如何提高 GPU 利用率?
为了提高 GPU 利用率,请将训练配置中的batch_size参数设置为 GPU 支持的最大尺寸。这确保充分利用 GPU 的能力,缩短训练时间。如果遇到内存错误,请逐步减小批次大小,直到训练顺利进行。对于 YOLOv8,将batch=-1设置在训练脚本中将自动确定高效处理的最佳批次大小。有关详细信息,请参阅训练配置。
什么是混合精度训练,如何在 YOLOv8 中启用它?
混合精度训练利用 16 位(FP16)和 32 位(FP32)浮点类型平衡计算速度和精度。这种方法加快了训练速度,减少了内存使用,而不损失模型准确性。要在 YOLOv8 中启用混合精度训练,请在训练配置中将amp参数设置为True。这将激活自动混合精度(AMP)训练。有关此优化技术的更多详细信息,请参阅训练配置。
多尺度训练如何增强 YOLOv8 模型性能?
多尺度训练通过训练不同尺寸的图像来增强模型性能,使其能够更好地泛化不同的尺度和距离。在 YOLOv8 中,您可以通过在训练配置中设置scale参数来启用多尺度训练。例如,scale=0.5将图像尺寸减小一半,而scale=2.0则将其放大一倍。这种技术模拟不同距离处的对象,使模型在各种场景中更加健壮。有关设置和更多详细信息,请查阅训练配置。
如何使用预训练权重加速 YOLOv8 的训练?
使用预训练权重可以显著减少训练时间,并通过从已经理解基本特征的模型开始来提高模型性能。在 YOLOv8 中,您可以将pretrained参数设置为True,或在训练配置中指定自定义预训练权重的路径。这种称为迁移学习的方法利用大型数据集的知识来适应您的特定任务。在这里了解更多关于预训练权重及其优势的信息。
训练模型的推荐周期数是多少,我如何在 YOLOv8 中设置它?
周期数指的是模型训练过程中完全通过训练数据集的次数。一个典型的起始点是 300 个周期。如果您的模型早期出现过拟合,可以减少周期数。或者,如果没有观察到过拟合,可以将训练延长至 600、1200 或更多个周期。要在 YOLOv8 中设置这一参数,使用您的训练脚本中的epochs参数。有关确定理想周期数的额外建议,请参考关于周期数的这一部分。
模型评估与微调见解
引言
一旦您训练了计算机视觉模型,评估和优化其性能至关重要。仅仅训练模型是不够的。您需要确保模型准确、高效,并实现计算机视觉项目的目标。通过评估和微调您的模型,您可以识别弱点,提高其准确性,并增强整体性能。
在本指南中,我们将分享关于模型评估和微调的见解,这将使计算机视觉项目的这一步骤更易于理解。我们将讨论如何理解评估指标和实施微调技术,为您提供提升模型能力的知识。
使用指标评估模型性能
评估模型性能有助于我们理解其工作效果。各种指标用于衡量性能。这些性能指标提供清晰的数值见解,可指导改进,确保模型达到预期目标。让我们更详细地看看几个关键指标。
置信度分数
置信度分数表示模型确定检测到的对象属于特定类的确信程度。它的范围从 0 到 1,较高的分数表示更大的置信度。置信度分数有助于筛选预测结果;只有置信度分数高于指定阈值的检测结果才被认为有效。
快速提示: 在运行推理时,如果没有看到任何预测结果,并且您已经检查了所有其他问题,请尝试降低置信度分数。有时,阈值设置过高会导致模型忽略有效的预测。降低分数可以让模型考虑更多可能性。这可能不符合您的项目目标,但这是了解模型能力并决定如何微调的一个好方法。
IoU(Intersection over Union)
IoU(Intersection over Union)是物体检测中的一个指标,用于衡量预测边界框与地面真实边界框的重叠程度。IoU 值的范围是从 0 到 1,其中 1 表示完美匹配。IoU 非常重要,因为它衡量了预测边界与实际物体边界的匹配程度。

平均精度均值
平均精度均值(mAP)是衡量物体检测模型性能的一种方法。它考虑了检测每个对象类的精度,将这些分数求平均,并给出一个总体数字,显示模型能够多么准确地识别和分类对象。
让我们专注于两个具体的 mAP 指标:
-
mAP@.5: 测量单个 IoU(交并比)阈值为 0.5 时的平均精度。此指标检查模型是否能在较宽松的准确性要求下正确找到对象。它关注对象是否大致处于正确位置,而不需要完美放置,有助于判断模型是否总体上能够有效地检测对象。
-
mAP@.5:.95: 对多个 IoU 阈值(从 0.5 到 0.95,每次增加 0.05)计算的 mAP 值进行平均。该指标更详细且严格,全面展示了模型在不同严格程度下发现对象的准确性,特别适用于需要精确目标检测的应用。
其他 mAP 指标包括 mAP@0.75,使用更严格的 IoU 阈值为 0.75,并且 mAP@small、medium 和 large,评估不同大小对象的精度。

评估 YOLOv8 模型性能
关于 YOLOv8,您可以使用验证模式评估模型。此外,请务必查看我们深入解析 YOLOv8 性能指标及其解释的指南。
常见社区问题
在评估您的 YOLOv8 模型时,可能会遇到一些小问题。根据常见社区问题,以下是一些提示,帮助您充分利用您的 YOLOv8 模型:
处理可变图像尺寸
使用不同尺寸的图像评估您的 YOLOv8 模型,有助于了解其在多样数据集上的性能。使用 rect=true 验证参数,YOLOv8 根据图像大小调整每批的网络步幅,使模型能够处理矩形图像而不强制将其调整为单一尺寸。
imgsz 验证参数设置图像调整的最大尺寸,默认为 640。您可以根据数据集的最大尺寸和可用的 GPU 内存进行调整。即使设置了 imgsz,rect=true 也能够通过动态调整步幅有效地处理不同大小的图像。
访问 YOLOv8 指标
如果您希望深入了解您的 YOLOv8 模型性能,可以用几行 Python 代码轻松访问特定评估指标。下面的代码片段将让您加载模型、运行评估,并打印出显示模型表现的各种指标。
使用方法
from ultralytics import YOLO
# Load the model
model = YOLO("yolov8n.pt")
# Run the evaluation
results = model.val(data="coco8.yaml")
# Print specific metrics
print("Class indices with average precision:", results.ap_class_index)
print("Average precision for all classes:", results.box.all_ap)
print("Average precision:", results.box.ap)
print("Average precision at IoU=0.50:", results.box.ap50)
print("Class indices for average precision:", results.box.ap_class_index)
print("Class-specific results:", results.box.class_result)
print("F1 score:", results.box.f1)
print("F1 score curve:", results.box.f1_curve)
print("Overall fitness score:", results.box.fitness)
print("Mean average precision:", results.box.map)
print("Mean average precision at IoU=0.50:", results.box.map50)
print("Mean average precision at IoU=0.75:", results.box.map75)
print("Mean average precision for different IoU thresholds:", results.box.maps)
print("Mean results for different metrics:", results.box.mean_results)
print("Mean precision:", results.box.mp)
print("Mean recall:", results.box.mr)
print("Precision:", results.box.p)
print("Precision curve:", results.box.p_curve)
print("Precision values:", results.box.prec_values)
print("Specific precision metrics:", results.box.px)
print("Recall:", results.box.r)
print("Recall curve:", results.box.r_curve)
结果对象还包括预处理时间、推理时间、损失和后处理时间等速度指标。通过分析这些指标,您可以微调和优化 YOLOv8 模型,提升其在特定用例中的效果。
如何进行微调工作?
微调涉及采用预训练模型并调整其参数,以提高特定任务或数据集上的性能。这个过程也被称为模型重新训练,允许模型更好地理解和预测在实际应用中可能遇到的特定数据结果。根据模型评估重新训练您的模型,以实现最佳结果。
模型微调技巧
对模型进行微调意味着要特别关注几个关键参数和技术,以实现最佳性能。以下是一些重要提示,帮助您完成这一过程。
以较高的学习率开始
通常,在初始训练时期,学习率会从低开始逐渐增加,以稳定训练过程。然而,由于您的模型已经从先前的数据集中学习了一些特征,因此立即使用较高的学习率可能更为有利。
在评估您的 YOLOv8 模型时,您可以将 warmup_epochs 验证参数设置为 warmup_epochs=0,以防止学习率过高。通过这一过程,训练将继续从提供的权重开始,并调整到新数据的细微差别。
小物体的图像分割
图像分割可以提高小物体的检测精度。通过将较大的图像分成更小的片段,例如将 1280x1280 的图像分成多个 640x640 的片段,您可以保持原始分辨率,模型可以从高分辨率片段中学习。在使用 YOLOv8 时,请确保正确调整这些新片段的标签。
参与社区交流
与其他计算机视觉爱好者分享您的想法和问题,可以激发项目中遇到的障碍的创造性解决方案。以下是一些学习、解决问题和交流的绝佳方式。
获取帮助和支持
-
GitHub Issues: 探索 YOLOv8 GitHub 仓库并使用 Issues 标签 提出问题、报告 bug 和建议功能。社区和维护者将为您解决遇到的任何问题。
-
Ultralytics Discord 服务器: 加入 Ultralytics Discord 服务器,与其他用户和开发者建立联系,获取支持,分享知识和构思想法。
官方文档
- Ultralytics YOLOv8 文档: 查看官方 YOLOv8 文档,获取有关各种计算机视觉任务和项目的全面指南和宝贵见解。
最终思考
评估和微调您的计算机视觉模型是成功模型部署的重要步骤。这些步骤确保您的模型准确、高效,并适合您的整体应用。训练最佳模型的关键在于持续的实验和学习。不要犹豫调整参数,尝试新技术,探索不同的数据集。继续实验,推动可能性的边界!
常见问题解答
评估 YOLOv8 模型性能的关键指标是什么?
要评估 YOLOv8 模型的性能,重要的指标包括置信度分数、交并比(IoU)和平均精度(mAP)。置信度分数衡量模型对每个检测到的对象类的确定性。IoU 评估预测边界框与地面实况的重叠程度。平均精度(mAP)汇总了跨类别的精度分数,常见的有 mAP@.5 和 mAP@.5:.95,分别对应不同的 IoU 阈值。了解更多关于这些指标的信息,请参阅我们的 YOLOv8 性能指标指南。
如何为我的特定数据集微调预训练的 YOLOv8 模型?
对预训练的 YOLOv8 模型进行微调涉及调整其参数以改善特定任务或数据集上的性能。首先使用指标评估您的模型,然后通过将 warmup_epochs 参数调整为 0 来设置更高的初始学习率以实现即时稳定性。使用像 rect=true 这样的参数有效处理不同大小的图像。有关更详细的指导,请参考我们关于微调 YOLOv8 模型的部分。
如何在评估我的 YOLOv8 模型时处理可变大小的图像?
在评估期间处理可变大小的图像,使用 YOLOv8 中的 rect=true 参数,它根据图像大小调整每批次的网络步长。imgsz 参数设置图像调整大小的最大尺寸,默认为 640。调整 imgsz 以适应您的数据集和 GPU 内存。有关更多详细信息,请访问我们关于处理可变图像大小的部分。
我如何采取实际步骤来提高我的 YOLOv8 模型的平均精度?
提高 YOLOv8 模型的平均精度 (mAP) 涉及几个步骤:
-
调整超参数:尝试不同的学习率、批量大小和图像增强方法。
-
数据增强:使用 Mosaic 和 MixUp 等技术创建多样化的训练样本。
-
图像平铺:将较大的图像拆分为较小的瓦片,以提高小物体检测精度。有关具体策略,请参考我们详细的模型微调指南。
如何在 Python 中访问 YOLOv8 模型评估指标?
您可以按照以下步骤使用 Python 访问 YOLOv8 模型评估指标:
使用方法
from ultralytics import YOLO
# Load the model
model = YOLO("yolov8n.pt")
# Run the evaluation
results = model.val(data="coco8.yaml")
# Print specific metrics
print("Class indices with average precision:", results.ap_class_index)
print("Average precision for all classes:", results.box.all_ap)
print("Mean average precision at IoU=0.50:", results.box.map50)
print("Mean recall:", results.box.mr)
分析这些指标有助于微调和优化您的 YOLOv8 模型。深入了解,请查看我们关于 YOLOv8 指标的指南。
模型测试指南
引言
在训练和评估您的模型之后,现在是时候进行测试了。模型测试涉及评估它在真实场景中的表现如何。测试考虑因素包括准确性、可靠性、公正性以及理解模型决策的难易程度。目标是确保模型按预期运行,提供期望的结果,并符合应用程序或项目的整体目标。
模型测试与模型评估非常相似,但它们是计算机视觉项目中的两个独立步骤。模型评估涉及指标和图表以评估模型的准确性。另一方面,模型测试检查模型的学习行为是否与预期一致。在本指南中,我们将探讨测试计算机视觉模型的策略。
模型测试与模型评估的比较
首先,让我们通过一个例子了解模型评估和测试之间的区别。
假设您已经训练了一个计算机视觉模型来识别猫和狗,并且您希望将这个模型部署在宠物店以监控动物。在模型评估阶段,您使用带标签的数据集来计算诸如准确度、精确率、召回率和 F1 分数等指标。例如,该模型在一个特定数据集中在区分猫和狗方面可能达到了 98% 的准确度。
在评估之后,您使用来自宠物店的图像来测试模型,以查看它在更加多样化和现实条件下如何识别猫和狗。您检查它在动态、不同光照条件或部分被玩具或家具遮挡的情况下是否能够正确标记猫和狗。模型测试确保模型在受控评估环境之外的情况下表现符合预期。
准备模型测试
计算机视觉模型通过检测模式、进行预测和评估其性能来学习数据集。这些数据集通常分为训练集和测试集,以模拟真实世界的条件。训练数据教导模型,而测试数据验证其准确性。
在测试模型之前,请记住以下两点:
-
真实的代表性: 先前未见的测试数据应该与模型在部署时需要处理的数据类似。这有助于真实地理解模型的能力。
-
足够的数据集大小: 测试数据集的大小需要足够大,以便可靠地了解模型的表现如何。
测试您的计算机视觉模型
以下是测试计算机视觉模型并了解其性能的关键步骤。
-
运行预测: 使用模型对测试数据集进行预测。
-
比较预测结果: 检查模型的预测结果与实际标签(地面真相)的匹配程度。
-
计算性能指标: 计算准确率、精确率、召回率和 F1 分数等指标,以了解模型的优势和劣势。测试侧重于这些指标如何反映实际应用的性能。
-
可视化结果: 创建诸如混淆矩阵和 ROC 曲线之类的视觉辅助工具。这些工具帮助您发现模型在实际应用中可能表现不佳的具体领域。
接下来,可以分析测试结果:
-
错误分类的图像: 识别和审查模型误分类的图像,以了解其错误出现的位置。
-
错误分析: 进行彻底的错误分析,以了解错误类型(例如假阳性与假阴性)及其潜在原因。
-
偏见和公平性: 检查模型预测中是否存在任何偏见。确保模型在数据的不同子集上表现一致,特别是涉及种族、性别或年龄等敏感属性的情况。
测试您的 YOLOv8 模型
要测试您的 YOLOv8 模型,可以使用验证模式。这是了解模型优势和需要改进的领域的直接方式。此外,您需要正确格式化您的测试数据集以供 YOLOv8 使用。有关如何使用验证模式的详细信息,请查看模型验证文档页面。
使用 YOLOv8 对多个测试图像进行预测
如果您想要在存储在文件夹中的多个图像上测试已训练的 YOLOv8 模型,您可以轻松地一次性完成。与通常用于在验证集上评估模型性能并提供详细指标的验证模式不同,您可能只想看到在测试集中所有图像上的预测结果。为此,您可以使用预测模式。
验证模式与预测模式的区别
-
验证模式: 用于通过将预测与已知标签(地面真相)进行比较来评估模型的性能。它提供详细的指标,如准确率、精确率、召回率和 F1 分数。
-
预测模式: 用于在新的未见数据上运行模型以生成预测。它不提供详细的性能指标,但允许您查看模型在实际图像上的表现。
在没有自定义训练的情况下运行 YOLOv8 预测
如果您有兴趣测试基本的 YOLOv8 模型,以了解它是否可以在没有自定义训练的情况下用于您的应用程序,您可以使用预测模式。虽然模型在像 COCO 这样的数据集上进行了预训练,但在您自己的数据集上运行预测可以让您快速了解它在特定环境中的性能。
机器学习中的过拟合和欠拟合
在测试机器学习模型时,特别是在计算机视觉中,需要注意过拟合和欠拟合。这些问题可能会显著影响模型在新数据上的表现。
过拟合
当您的模型过于精确地学习了训练数据,包括噪声和不一般化的细节时,就会发生过拟合。在计算机视觉中,这意味着您的模型可能在训练图像上表现出色,但在新图像上可能会遇到困难。
过拟合的迹象
-
高训练准确率,低验证准确率: 如果模型在训练数据上表现非常好,但在验证或测试数据上表现不佳,可能是过拟合的迹象。
-
视觉检查: 有时,如果您的模型对图像中的微小变化或不相关细节过于敏感,您可能会看到过拟合。
欠拟合
当你的模型无法捕捉数据中的潜在模式时,就会发生欠拟合。在计算机视觉中,一个欠拟合的模型可能甚至无法正确识别训练图像中的物体。
欠拟合的迹象
-
低训练准确率: 如果模型在训练集上无法达到高准确率,可能是欠拟合的表现。
-
视觉误分类: 持续未能识别明显特征或物体表明欠拟合。
平衡过拟合和欠拟合
关键是在过拟合和欠拟合之间找到平衡。理想情况下,模型应在训练和验证数据集上都表现良好。通过指标和视觉检查定期监控模型的性能,以及应用正确的策略,可以帮助您获得最佳结果。

计算机视觉中的数据泄漏及其避免方法
在测试模型时,需要牢记的重要事项是数据泄漏。数据泄漏发生在意外使用训练集外部信息来训练模型时。当数据泄漏发生时,模型在训练过程中可能看起来非常准确,但在新的、未见过的数据上表现不佳。
数据泄漏的原因
数据泄漏可能很难发现,并且常常来自训练数据中的隐藏偏差。以下是计算机视觉中可能发生数据泄漏的一些常见方式:
-
相机偏差: 不同角度、光照、阴影和相机运动可能引入不必要的模式。
-
覆盖偏差: 图像中的标志、时间戳或其他覆盖物可能会误导模型。
-
字体和物体偏差: 特定字体或频繁出现在某些类别中的物体可能会扭曲模型的学习。
-
空间偏差: 前景-背景、边界框分布以及物体位置的不平衡可能影响训练。
-
标签和域偏差: 错误的标签或数据类型的转移可能导致信息泄漏。
检测数据泄漏
要找出数据泄漏,您可以:
-
检查性能: 如果模型的结果出奇的好,可能存在信息泄漏。
-
查看特征重要性: 如果某个特征比其他特征重要得多,可能会提示信息泄露。
-
视觉检查: 双重检查模型的决策是否在直觉上合理。
-
验证数据分离: 在任何处理之前确保数据被正确分割。
避免数据泄漏
为了防止数据泄露,请使用来自不同摄像头和环境的多样化数据集。仔细审查数据,确保没有隐藏的偏差,例如所有正样本都在特定时间拍摄。避免数据泄露将有助于使您的计算机视觉模型在实际情况中更加可靠和有效。
模型测试后的下一步
在测试模型后,下一步取决于结果。如果您的模型表现良好,可以将其部署到实际环境中。如果结果不理想,您需要进行改进。这可能涉及分析错误,收集更多数据,提高数据质量,调整超参数和重新训练模型。
加入 AI 对话
成为计算机视觉爱好者社区的一部分可以帮助解决问题并更高效地学习。以下是一些联系、寻求帮助和分享想法的方法。
社区资源
-
GitHub Issues: 探索YOLOv8 GitHub 代码库,使用 Issues 标签提问、报告错误和建议新功能。社区和维护者非常活跃并愿意提供帮助。
-
Ultralytics Discord 服务器: 加入Ultralytics Discord 服务器,与其他用户和开发者交流,获取支持,并分享您的经验。
官方文档
- Ultralytics YOLOv8 文档: 查看官方 YOLOv8 文档,获取各种计算机视觉项目的详细指南和实用提示。
这些资源将帮助您应对挑战,并了解计算机视觉社区内的最新趋势和实践。
总结
建立可信赖的计算机视觉模型依赖于严格的模型测试。通过使用以前未见过的数据来测试模型,我们可以分析并发现过拟合和数据泄露等问题。在部署之前解决这些问题有助于模型在实际应用中表现良好。重要的是要记住,模型测试与模型评估一样关键,可以确保模型的长期成功和有效性。
常见问题解答
计算机视觉中模型评估和模型测试之间的主要区别是什么?
在计算机视觉项目中,模型评估和模型测试是不同的步骤。模型评估使用标记数据集计算准确率、精度、召回率和 F1 分数等指标,为模型在控制数据集上的表现提供洞察。另一方面,模型测试通过将模型应用于新的未见数据,在实际场景中评估模型的表现,确保模型的学习行为符合评估环境外的预期。有关详细指南,请参考计算机视觉项目的步骤。
如何在多个图像上测试我的 Ultralytics YOLOv8 模型?
若要在多个图像上测试您的 Ultralytics YOLOv8 模型,可以使用预测模式。此模式允许您在新的、未见过的数据上运行模型,生成预测,而无需提供详细的度量标准。这对于在文件夹中存储的大型图像集上进行实际性能测试非常理想。如需评估性能指标,请改用验证模式。
如果我的计算机视觉模型出现过拟合或欠拟合迹象,应该怎么办?
解决过拟合问题:
-
正则化技术如 dropout。
-
增加训练数据集的大小。
-
简化模型架构。
解决欠拟合问题:
-
使用更复杂的模型。
-
提供更相关的特征。
-
增加训练迭代次数或轮数。
审查误分类的图像,进行彻底的错误分析,并定期跟踪性能指标以维持平衡。有关这些概念的更多信息,请查看我们关于过拟合和欠拟合的部分。
如何检测并避免计算机视觉中的数据泄露?
检测数据泄露:
-
确保测试性能不异常高。
-
检查特征重要性以获取意外的见解。
-
直观地审查模型决策。
-
在处理之前确保正确的数据划分。
避免数据泄露:
-
使用不同环境的多样化数据集。
-
仔细审查数据中的潜在偏见。
-
确保训练集和测试集之间没有重叠信息。
有关如何防止数据泄露的详细策略,请参阅我们关于计算机视觉中数据泄露的部分。
在测试完计算机视觉模型后应采取哪些步骤?
测试后,如果模型表现符合项目目标,可以继续部署。如果结果不理想,考虑:
-
错误分析。
-
收集更多多样化和高质量的数据。
-
超参数调优。
-
重新训练模型。
从模型测试与模型评估部分获取见解,以优化和增强模型在实际应用中的有效性。
如何在没有定制训练的情况下运行 YOLOv8 预测?
您可以在您的数据集上使用预训练的 YOLOv8 模型进行预测,以查看它是否适合您的应用需求。利用预测模式快速了解性能结果,无需进行定制训练。
模型部署的最佳实践
介绍
模型部署是计算机视觉项目中将模型从开发阶段引入实际应用的步骤。有多种模型部署选项:云端部署提供可伸缩性和易用性,边缘部署通过将模型靠近数据源来减少延迟,本地部署确保隐私和控制。选择合适的策略取决于您的应用需求,平衡速度、安全性和可伸缩性。
部署模型时遵循最佳实践同样很重要,因为部署可以显著影响模型性能的效果和可靠性。在本指南中,我们将重点介绍如何确保您的模型部署平稳、高效和安全。
模型部署选项
往往,一旦模型训练、评估和测试完成,就需要将其转换为特定格式,以便在云端、边缘或本地设备中有效部署。
关于 YOLOv8,您可以将您的模型导出为不同的格式。例如,当您需要在不同的框架之间传输您的模型时,ONNX 是一个很好的工具,将 YOLOv8 导出到 ONNX 是很容易的。您可以在这里查看更多有关将您的模型集成到不同环境中的平稳有效选项。
选择部署环境
选择在哪里部署您的计算机视觉模型取决于多个因素。不同的环境具有独特的优势和挑战,因此选择最适合您需求的环境至关重要。
云端部署
云端部署非常适合需要快速扩展和处理大量数据的应用。像 AWS、Google Cloud 和 Azure 这样的平台使您能够轻松管理从训练到部署的模型。它们提供像 AWS SageMaker、Google AI Platform 和 Azure Machine Learning 这样的服务,帮助您贯穿整个过程。
然而,使用云端可能会很昂贵,特别是在数据使用量大的情况下,如果用户远离数据中心,可能会面临延迟问题。为了管理成本和性能,优化资源使用并确保遵守数据隐私规定至关重要。
边缘部署
边缘部署非常适合需要实时响应和低延迟的应用,特别是在没有或有限互联网访问的地方。在智能手机或物联网设备等边缘设备上部署模型能够保证快速处理并保持数据本地化,从而增强隐私性。在边缘部署还能通过减少发送到云端的数据来节省带宽。
然而,边缘设备通常具有有限的处理能力,因此您需要优化您的模型。像 TensorFlow Lite 和 NVIDIA Jetson 这样的工具可以帮助。尽管有这些好处,维护和更新多个设备可能是具有挑战性的。
本地部署
当数据隐私至关重要或没有可靠的互联网访问时,本地部署是最佳选择。在本地服务器或台式机上运行模型可以完全控制并保持数据安全。如果服务器靠近用户,还可以减少延迟。
然而,在本地扩展可能会很困难,而且维护可能会耗时。使用像 Docker 进行容器化和 Kubernetes 进行管理的工具可以帮助使本地部署更加高效。定期更新和维护是保持一切运行顺畅所必需的。
模型优化技术
优化您的计算机视觉模型有助于其在部署在资源有限的环境中(如边缘设备)运行高效。以下是一些优化模型的关键技术。
模型修剪
修剪通过删除对最终输出贡献不大的权重来减小模型的大小。它使模型更小更快,而不会显著影响准确性。修剪涉及识别和消除不必要的参数,从而产生一个更轻的模型,需要更少的计算能力。它对于在资源有限的设备上部署模型特别有用。

模型量化
量化将模型的权重和激活从高精度(如 32 位浮点数)转换为低精度(如 8 位整数)。通过减小模型大小,加快推断速度。量化感知训练(QAT)是一种在训练过程中考虑量化的方法,比后期量化更好地保留准确性。通过在训练阶段处理量化,模型学会适应更低的精度,保持性能同时减少计算需求。

知识蒸馏
知识蒸馏涉及训练一个更小、更简单的模型(学生模型),以模仿一个更大、更复杂的模型(教师模型)的输出。学生模型学会近似教师模型的预测结果,从而产生一个保留教师准确性的紧凑模型。这种技术有助于创建适合在资源受限的边缘设备上部署的高效模型。

故障排除部署问题
在部署计算机视觉模型时,您可能会面临一些挑战,但了解常见问题和解决方案可以使过程更加顺利。以下是一些常见故障排除技巧和最佳实践,帮助您应对部署问题。
模型部署后的准确性下降
在部署后模型准确性下降可能令人沮丧。这个问题可能源于各种因素。以下是一些帮助您识别和解决问题的步骤:
-
检查数据一致性: 确保模型在部署后处理的数据与训练时使用的数据一致。数据分布、质量或格式的差异可能会显著影响性能。
-
验证预处理步骤: 验证训练期间应用的所有预处理步骤在部署期间也得到了一致应用。这包括调整图像大小、像素值归一化和其他数据转换。
-
评估模型的环境: 确保在部署期间使用的硬件和软件配置与训练期间使用的配置相匹配。库、版本和硬件能力的差异可能会引入差异。
-
监控模型推理: 在推理流水线的各个阶段记录输入和输出,以检测任何异常情况。这可以帮助识别数据损坏或模型输出处理不当等问题。
-
审查模型导出和转换: 重新导出模型,并确保转换过程保持模型权重和架构的完整性。
-
使用受控数据集进行测试: 在测试环境中部署模型,并使用您控制的数据集比较训练阶段的结果。您可以确定问题是部署环境还是数据本身导致的。
在部署 YOLOv8 时,几个因素可能影响模型准确性。将模型转换为 TensorRT 等格式涉及优化,如权重量化和层融合,可能会导致轻微的精度损失。使用 FP16(半精度)而不是 FP32(全精度)可以加快推理速度,但可能会引入数值精度错误。此外,硬件限制,如 Jetson Nano 上较低的 CUDA 核心数和减少的内存带宽,可能会影响性能。
推理时间超出预期
在部署机器学习模型时,确保它们能够高效运行至关重要。如果推理时间超出预期,可能会影响用户体验和应用程序的效果。以下是一些帮助您识别和解决问题的步骤:
-
实施预热运行: 初始运行通常包括设置开销,这可能会使延迟测量不准确。在测量延迟之前进行几次预热推理。排除这些初始运行可以提供模型性能更准确的测量结果。
-
优化推理引擎: 再次确认推理引擎是否完全针对您特定的 GPU 架构进行了优化。使用适合您硬件的最新驱动程序和软件版本,以确保最大的性能和兼容性。
-
使用异步处理: 异步处理可以帮助更高效地管理工作负载。使用异步处理技术同时处理多个推理,有助于分发负载并减少等待时间。
-
分析推断流水线:识别推断流水线中的瓶颈可以帮助确定延迟的来源。使用性能分析工具分析推断过程的每个步骤,识别并解决导致显著延迟的阶段,例如效率低下的层或数据传输问题。
-
使用适当的精度:使用比必要更高的精度可能会减慢推断时间。尝试使用较低精度,例如 FP16(半精度),而不是 FP32(全精度)。虽然 FP16 可以减少推断时间,但也要记住它可能会影响模型的准确性。
如果在部署 YOLOv8 时遇到此问题,请考虑 YOLOv8 提供了多种模型大小,例如适用于内存容量较低设备的 YOLOv8n(纳米)和适用于更强大 GPU 的 YOLOv8x(额外大)。选择适合您硬件的正确模型变体可以帮助平衡内存使用和处理时间。
还要记住,输入图像的大小直接影响内存使用和处理时间。较低分辨率可以减少内存使用并加快推断速度,而较高分辨率可以提高准确性,但需要更多内存和处理能力。
模型部署中的安全考虑
部署的另一个重要方面是安全性。部署模型的安全性对于保护敏感数据和知识产权至关重要。以下是关于安全模型部署的一些最佳实践。
安全数据传输
确保客户端和服务器之间传输的数据是安全的非常重要,以防止被未经授权的人截取或访问。您可以使用像 TLS(传输层安全)这样的加密协议,在数据传输过程中对数据进行加密。即使有人截取了数据,他们也无法读取它。您还可以使用端到端加密来保护数据从源头到目的地的整个传输过程中,以防中间任何人访问。
访问控制
控制谁可以访问您的模型及其数据以防止未经授权的使用非常重要。使用强身份验证方法验证试图访问模型的用户或系统的身份,并考虑使用多因素认证(MFA)增加额外的安全性。设置基于角色的访问控制(RBAC)以根据用户角色分配权限,确保人员只能访问所需内容。保持详细的审计日志以跟踪对模型及其数据的所有访问和更改,并定期审核这些日志以发现任何可疑活动。
模型混淆
保护您的模型免受反向工程或误用可以通过模型混淆来实现。这涉及对模型参数进行加密,例如神经网络中的权重和偏差,以使未经授权的个人难以理解或更改模型。您还可以通过重命名层和参数或添加虚拟层来混淆模型的架构,使攻击者更难进行反向工程。您还可以在安全环境中提供模型服务,例如安全隔离区或使用受信任的执行环境(TEE),这在推断过程中提供了额外的保护层。
与同行分享想法
成为计算机视觉爱好者社区的一部分可以帮助您更快地解决问题和学习。以下是一些连接、获取帮助和分享想法的方法。
社区资源
-
GitHub Issues:探索YOLOv8 GitHub 仓库,使用 Issues 标签提出问题、报告错误和建议新功能。社区和维护者非常活跃并且随时为您提供帮助。
-
Ultralytics Discord 服务器:加入Ultralytics Discord 服务器与其他用户和开发者聊天,获取支持,并分享您的经验。
官方文档
- Ultralytics YOLOv8 文档:访问官方 YOLOv8 文档,获取有关各种计算机视觉项目的详细指南和实用提示。
使用这些资源将帮助您解决挑战,并与计算机视觉社区的最新趋势和实践保持同步。
结论和下一步
我们讨论了部署计算机视觉模型时的一些最佳实践。通过保护数据、控制访问和混淆模型细节,您可以在保护敏感信息的同时保持模型运行的流畅性。我们还讨论了如何解决常见问题,例如准确率降低和推断速度慢,采用热身运行、优化引擎、异步处理、性能分析流程和选择合适的精度策略。
在部署模型后,下一步将是监控、维护和记录您的应用程序。定期监控有助于快速捕获和修复问题,维护保持您的模型更新和功能,良好的文档跟踪所有变更和更新。这些步骤将帮助您实现计算机视觉项目的目标。
常见问题解答
使用 Ultralytics YOLOv8 部署机器学习模型的最佳实践是什么?
部署机器学习模型,特别是使用 Ultralytics YOLOv8,涉及几个最佳实践以确保效率和可靠性。首先,选择适合您需求的部署环境——云端、边缘或本地。通过修剪、量化和知识蒸馏等技术优化您的模型,以在资源受限环境中高效部署。最后,确保数据一致性和预处理步骤与训练阶段保持一致,以维持性能。您也可以参考模型部署选项获取更详细的指南。
如何解决 Ultralytics YOLOv8 模型的常见部署问题?
故障排除部署问题可以分解为几个关键步骤。如果您的模型在部署后准确性下降,请检查数据一致性,验证预处理步骤,并确保硬件/软件环境与训练时使用的一致。对于推断时间过慢的情况,进行预热运行,优化推断引擎,使用异步处理,并对推断流水线进行分析。详细指南,请参阅故障排除部署问题中的最佳实践。
Ultralytics YOLOv8 如何优化在边缘设备上的模型性能?
优化 Ultralytics YOLOv8 模型以适配边缘设备,涉及使用修剪来减小模型大小,量化将权重转换为低精度,以及知识蒸馏训练较小的模型以模仿较大模型的技术。这些技术确保模型在计算能力有限的设备上高效运行。像 TensorFlow Lite 和 NVIDIA Jetson 这样的工具尤为适用于这些优化。在我们关于模型优化的部分中进一步了解这些技术。
部署使用 Ultralytics YOLOv8 的机器学习模型的安全注意事项是什么?
在部署机器学习模型时,安全性至关重要。使用诸如 TLS 之类的加密协议确保安全数据传输。实施强大的访问控制,包括强身份验证和基于角色的访问控制(RBAC)。模型混淆技术,如加密模型参数并在受信任的执行环境(如 TEE)中提供模型,提供额外保护。详细实践,请参阅安全注意事项。
如何选择适合我的 Ultralytics YOLOv8 模型的正确部署环境?
选择最佳部署环境以适配您的 Ultralytics YOLOv8 模型,依赖于应用程序的特定需求。云端部署提供可伸缩性和便捷性,非常适合处理大数据量的应用。边缘部署则最适合需要实时响应的低延迟应用,可以使用像 TensorFlow Lite 这样的工具。本地部署则适用于需要严格数据隐私和控制的场景。要全面了解每种环境的概述,请参阅我们关于选择部署环境的部分。
部署后的计算机视觉模型维护
原文:
docs.ultralytics.com/guides/model-monitoring-and-maintenance/
介绍
如果您在此,我们可以假设您在计算机视觉项目中完成了许多步骤:从收集需求、标注数据和训练模型到最终部署。您的应用程序现在正在生产环境中运行,但您的项目并未结束。计算机视觉项目最重要的部分是确保您的模型在时间上继续满足项目的目标,这正是监控、维护和文档化您的计算机视觉模型进入画面的地方。
在本指南中,我们将更详细地介绍如何在部署后维护您的计算机视觉模型。我们将探讨模型监控如何帮助您早期发现问题,如何保持模型的准确性和最新状态,以及为何文档对故障排除至关重要。
模型监控至关重要
仔细监视部署的计算机视觉模型至关重要。如果没有适当的监控,模型可能会失去准确性。常见问题包括数据分布偏移或数据漂移,即模型遇到的数据与训练时不同。当模型需要对其不认识的数据进行预测时,可能会导致误解和性能下降。异常值或不寻常的数据点也可能影响模型的准确性。
定期模型监控帮助开发人员追踪模型的性能,发现异常,并快速解决数据漂移等问题。它还通过指示何时需要更新来管理资源,避免昂贵的全面改革,并保持模型的相关性。
模型监控的最佳实践
在生产环境中监控计算机视觉模型时,请记住以下一些最佳实践:
-
定期跟踪性能:持续监控模型的性能,以便及时检测变化。
-
仔细检查数据质量:检查数据中的缺失值或异常。
-
使用多样化数据源:监控来自各种来源的数据,以全面了解模型的性能。
-
结合监控技术:使用漂移检测算法和基于规则的方法结合,以识别各种问题。
-
监控输入和输出:注意模型处理的数据和其生成的结果,确保一切正常运行。
-
设置警报:实施异常行为的警报,例如性能下降,以便能够迅速采取纠正措施。
AI 模型监控工具
您可以使用自动化监控工具来更轻松地监视部署后的模型。许多工具提供实时洞察和警报功能。以下是一些可以协同工作的开源模型监控工具的示例:
-
Prometheus:Prometheus 是一个开源的监控工具,用于收集和存储详细的性能指标。它与 Kubernetes 和 Docker 集成良好,在设定的时间间隔内收集数据并将其存储在时间序列数据库中。Prometheus 还可以抓取 HTTP 端点以收集实时指标。可以使用 PromQL 查询收集的数据。
-
Grafana:Grafana 是一个开源的数据可视化和监控工具,允许您查询、可视化、设置警报并理解存储在任何地方的指标。它与 Prometheus 配合良好,并提供高级数据可视化功能。您可以创建自定义仪表板来显示计算机视觉模型的重要指标,如推断延迟、错误率和资源使用情况。Grafana 将收集的数据转化为易于阅读的仪表板,包括折线图、热力图和直方图。它还支持通过诸如 Slack 等渠道发送警报,以便快速通知团队任何问题。
-
Evidently AI:Evidently AI 是一个专为监控和调试生产环境中的机器学习模型而设计的开源工具。它从 pandas 数据框架生成交互式报告,帮助分析机器学习模型。Evidently AI 可以检测数据漂移、模型性能下降以及其他可能影响已部署模型的问题。
上述介绍的三个工具,Evidently AI、Prometheus 和 Grafana,可以作为一个完全开源的 ML 监控解决方案无缝配合,可用于生产环境。Evidently AI 用于收集和计算指标,Prometheus 存储这些指标,而 Grafana 则用于展示并设置警报。尽管有许多其他工具可供选择,但这套配置是一个令人振奋的开源选择,提供强大的监控和维护模型的能力。

异常检测和警报系统
异常是任何偏离预期的数据点或模式。在计算机视觉模型中,异常可以是与模型训练数据差异很大的图像。这些意外的图像可能是数据分布变化、异常值或可能降低模型性能的行为的迹象。建立警报系统以检测这些异常是模型监控的重要部分。
通过设置关键指标的标准性能水平和限制,可以及早发现问题。当性能超出这些限制时,将触发警报,促使快速修复。定期使用新数据更新和重新训练模型可以使其随着数据变化保持相关和准确。
在配置阈值和警报时需要牢记的事项
在设置警报系统时,请牢记以下最佳实践:
-
标准化警报:使用一致的工具和格式发送所有警报,如电子邮件或消息应用程序如 Slack。标准化使您能够快速理解和响应警报。
-
包含预期行为:警报消息应清楚说明出了什么问题,期望是什么,以及评估的时间范围。这有助于您评估警报的紧急性和背景。
-
可配置警报:使警报易于配置以适应变化的条件。允许自己编辑阈值,延迟,禁用或确认警报。
数据漂移检测
数据漂移检测是一个概念,帮助识别输入数据的统计属性随时间变化,可能会降低模型性能。在决定重新训练或调整模型之前,这种技术帮助发现存在问题。数据漂移处理随时间变化的整体数据格局变化,而异常检测侧重于识别可能需要立即关注的稀有或意外数据点。

下面是几种检测数据漂移的方法:
持续监控:定期监控模型的输入数据和输出,以便发现漂移迹象。跟踪关键指标并与历史数据进行比较,以识别显著变化。
统计技术:使用 Kolmogorov-Smirnov 检验或人口稳定性指数(PSI)等方法检测数据分布的变化。这些测试将新数据的分布与训练数据进行比较,以识别显著差异。
特征漂移:监控单个特征的漂移。有时候,整体数据分布可能保持稳定,但个别特征可能会漂移。确定哪些特征正在漂移有助于微调重新训练过程。
模型维护
模型维护对于保持计算机视觉模型的准确性和相关性至关重要。模型维护包括定期更新和重新训练模型,处理数据漂移,并确保模型在数据和环境变化时保持相关性。也许你会想知道模型维护与模型监控有何不同。监控是指实时观察模型的性能,以便及早发现问题。而维护则是关于修复这些问题。
定期更新和重新训练
一旦模型部署后,在监控过程中,您可能会注意到数据模式或性能发生变化,表明模型漂移。定期更新和重新训练成为模型维护的重要部分,以确保模型能够处理新的模式和场景。根据数据变化情况,您可以使用几种技术。

例如,如果数据随时间逐渐变化,增量学习是一个不错的选择。增量学习涉及使用新数据更新模型,而不是完全从头开始重新训练,从而节省计算资源和时间。然而,如果数据发生了显著变化,定期进行完整的重新训练可能是更好的选择,以确保模型不会在新数据上过拟合,同时不会忽略旧模式。
无论采用何种方法,在更新后都必须进行验证和测试。重要的是在单独的测试数据集上验证模型,以检查性能的改进或退化。
决定何时重新训练您的模型
重新训练计算机视觉模型的频率取决于数据变化和模型性能。当您观察到显著的性能下降或检测到数据漂移时,请重新训练您的模型。定期评估可以通过测试模型与新数据来确定正确的重新训练时间表。监控性能指标和数据模式可以帮助您决定是否需要更频繁地更新模型以保持准确性。

文档
记录计算机视觉项目使其更容易理解、复现和协作。良好的文档涵盖模型架构、超参数、数据集、评估指标等内容。它提供透明性,帮助团队成员和利益相关者理解已经完成的工作及其原因。文档还通过提供对过去决策和方法的清晰参考,有助于故障排除、维护和未来增强。
需要记录的关键元素
这些是项目文档中应包含的一些关键元素:
-
项目概述:提供项目的高层摘要,包括问题陈述、解决方案方法、预期结果和项目范围。解释计算机视觉在解决问题中的作用,并概述阶段和可交付成果。
-
模型架构:详细说明模型的结构和设计,包括其组件、层次和连接。解释选择的超参数及其选择背后的理由。
-
数据准备:描述数据来源、类型、格式、大小和预处理步骤。讨论数据质量、可靠性以及在训练模型之前应用的任何转换。
-
训练过程:记录训练过程,包括使用的数据集、训练参数和损失函数。解释模型是如何训练的,以及训练过程中遇到的任何挑战。
-
评估指标:指定用于评估模型性能的指标,如准确率、精确率、召回率和 F1 分数。包括性能结果和对这些指标的分析。
-
部署步骤:概述部署模型的步骤,包括使用的工具和平台、部署配置以及任何特定的挑战或考虑因素。
-
监控和维护程序:提供监控模型在部署后性能的详细计划。包括检测和解决数据和模型漂移的方法,并描述定期更新和重新训练的过程。
文档工具
在记录 AI 项目时,有许多选择,特别受欢迎的是开源工具。其中两种是 Jupyter Notebooks 和 MkDocs。Jupyter Notebooks 允许您创建交互式文档,内嵌代码、可视化和文本,非常适合分享实验和分析。MkDocs 是一个静态站点生成器,易于设置和部署,非常适合在线创建和托管项目文档。
与社区联系
加入计算机视觉爱好者社区可以帮助您快速解决问题并学习更多。以下是一些连接、获取支持和分享想法的方法。
社区资源
-
GitHub Issues:查看 YOLOv8 GitHub 仓库 并使用 Issues 标签提问,报告 bug,建议新功能。社区和维护者非常活跃和支持。
-
Ultralytics Discord 服务器:加入 Ultralytics Discord 服务器 与其他用户和开发者聊天,获取支持,并分享您的经验。
官方文档
- Ultralytics YOLOv8 文档:访问官方 YOLOv8 文档,获取有关各种计算机视觉项目的详细指南和有用提示。
使用这些资源将帮助您解决挑战,并跟上计算机视觉社区的最新趋势和实践。
关键要点
我们讨论了监控、维护和记录计算机视觉模型的关键提示。定期更新和重新训练有助于模型适应新数据模式。检测和修复数据漂移有助于保持模型的准确性。持续监控能够及早发现问题,良好的文档使协作和未来更新更加容易。遵循这些步骤将有助于使您的计算机视觉项目长期成功和有效。
常见问题解答
我如何监控我部署的计算机视觉模型的性能?
监控部署的计算机视觉模型的性能非常重要,以确保其长期的准确性和可靠性。您可以使用工具如 Prometheus、Grafana 和 Evidently AI 来跟踪关键指标,检测异常,识别数据漂移。定期监控输入和输出,设置异常行为警报,并使用多样化的数据源来全面了解模型的性能。有关更多详情,请参阅我们关于模型监控的部分。
如何在部署后维护计算机视觉模型的最佳实践是什么?
维护计算机视觉模型涉及定期更新、重新训练和监控,以确保持续的准确性和相关性。最佳实践包括:
-
持续监控:定期跟踪性能指标和数据质量。
-
数据漂移检测:使用统计技术识别数据分布的变化。
-
定期更新和重新训练:根据数据变化实施增量学习或定期完整重新训练。
-
文档化:维护模型架构、训练过程和评估指标的详细文档。获取更多见解,请访问我们的模型维护部分。
为什么数据漂移检测对 AI 模型至关重要?
数据漂移检测至关重要,因为它有助于识别输入数据的统计特性随时间变化,这可能会降低模型性能。持续监控、统计检验(例如 Kolmogorov-Smirnov 检验)和特征漂移分析等技术可以帮助及早发现问题。解决数据漂移问题确保您的模型在不断变化的环境中保持准确和相关性。在我们的数据漂移检测部分了解更多。
如何在计算机视觉模型中使用异常检测工具?
对于计算机视觉模型的异常检测,诸如Prometheus、Grafana和Evidently AI等工具非常有效。这些工具可以帮助您建立警报系统,检测异常数据点或与预期行为偏离的模式。可配置的警报和标准化的消息可以帮助您快速响应潜在问题。详细了解我们的异常检测和警报系统部分。
如何有效地记录我的计算机视觉项目?
有效的计算机视觉项目文档应包括:
-
项目概述:高层次摘要、问题陈述和解决方案方法。
-
模型架构:模型结构、组件和超参数的详细信息。
-
数据准备:关于数据来源、预处理步骤和转换的信息。
-
训练过程:训练过程的描述、使用的数据集和遇到的挑战。
-
评估指标:用于性能评估和分析的指标。
-
部署步骤:模型部署所采取的步骤及任何特定挑战。
-
监控和维护程序:规划持续监控和维护。获取更全面的指导,请参考我们的文档部分。
Ultralytics Explorer

Ultralytics Explorer 是一个用于通过语义搜索、SQL 查询、向量相似性搜索甚至使用自然语言探索 CV 数据集的工具。它还是一个 Python API,用于访问相同的功能。
www.youtube.com/embed/3VryynorQeo
Watch: Ultralytics Explorer API | 语义搜索、SQL 查询和 Ask AI 功能
可选依赖项的安装
Explorer 依赖于外部库来实现其某些功能。这些功能在使用时会自动安装。要手动安装这些依赖项,请使用以下命令:
pip install ultralytics[explorer]
提示
Explorer 支持嵌入式/语义搜索和 SQL 查询,并由LanceDB无服务器向量数据库驱动。与传统的内存数据库不同,它在不牺牲性能的情况下持久化存储在磁盘上,因此可以在本地扩展到像 COCO 这样的大型数据集而不会耗尽内存。
Explorer API
这是一个用于探索数据集的 Python API。它还驱动 GUI Explorer。您可以使用它创建自己的探索性笔记本或脚本,以深入了解您的数据集。
在这里了解更多关于 Explorer API 的信息。
GUI Explorer 使用
GUI 演示在您的浏览器中运行,允许您为数据集创建嵌入并搜索相似图像,运行 SQL 查询和执行语义搜索。可以使用以下命令运行它:
yolo explorer
注意
Ask AI 功能使用 OpenAI,因此当您首次运行 GUI 时,将提示您设置 OpenAI 的 API 密钥。您可以像这样设置它 - yolo settings openai_api_key="..."

常见问题解答
什么是 Ultralytics Explorer 及其如何帮助 CV 数据集?
Ultralytics Explorer 是一个功能强大的工具,旨在通过语义搜索、SQL 查询、向量相似性搜索甚至自然语言,探索计算机视觉(CV)数据集。这个多功能工具提供了 GUI 和 Python API,允许用户与其数据集无缝交互。通过利用像 LanceDB 这样的技术,Ultralytics Explorer 确保高效、可扩展地访问大型数据集,而不会过度使用内存。无论是进行详细的数据集分析还是探索数据模式,Ultralytics Explorer 都简化了整个流程。
了解更多关于 Explorer API 的信息。
如何安装 Ultralytics Explorer 的依赖项?
要手动安装 Ultralytics Explorer 所需的可选依赖项,可以使用以下pip命令:
pip install ultralytics[explorer]
这些依赖项对语义搜索和 SQL 查询的完整功能至关重要。通过包含由 LanceDB 提供支持的库,安装确保数据库操作保持高效且可扩展,即使是像 COCO 这样的大型数据集。
如何使用 Ultralytics Explorer 的 GUI 版本?
使用 Ultralytics Explorer 的 GUI 版本非常简单。在安装必要的依赖项后,您可以使用以下命令启动 GUI:
yolo explorer
GUI 提供了一个用户友好的界面,用于创建数据集嵌入、搜索相似图像、运行 SQL 查询以及进行语义搜索。此外,与 OpenAI 的 Ask AI 功能集成,允许您使用自然语言查询数据集,增强了灵活性和易用性。
如需存储和可扩展性信息,请查看我们的安装指南。
Ultralytics Explorer 中的 Ask AI 功能是什么?
Ultralytics Explorer 中的 Ask AI 功能允许用户使用自然语言查询与其数据集进行交互。由 OpenAI 提供支持,此功能使您能够提出复杂问题并获得深刻的答案,无需编写 SQL 查询或类似命令。要使用此功能,您需要在首次运行 GUI 时设置您的 OpenAI API 密钥:
yolo settings openai_api_key="YOUR_API_KEY"
关于此功能及其集成方式的更多信息,请参阅我们的 GUI Explorer 使用部分。
我可以在 Google Colab 上运行 Ultralytics Explorer 吗?
是的,您可以在 Google Colab 中运行 Ultralytics Explorer,为数据集探索提供便捷且强大的环境。您可以通过打开提供的 Colab 笔记本来开始,该笔记本已预先配置了所有必要的设置:
此设置使您能够充分探索您的数据集,利用 Google 的云资源。在我们的 Google Colab 指南中了解更多。
Ultralytics Explorer API
简介
Explorer API 是用于探索数据集的 Python API。支持使用 SQL 查询、向量相似性搜索和语义搜索进行过滤和搜索您的数据集。
www.youtube.com/embed/3VryynorQeo?start=279
Watch: Ultralytics Explorer API 概述
安装
Explorer 依赖于某些功能的外部库。这些会在使用时自动安装。要手动安装这些依赖项,请使用以下命令:
pip install ultralytics[explorer]
用法
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolov8n.pt")
# Create embeddings for your dataset
explorer.create_embeddings_table()
# Search for similar images to a given image/images
dataframe = explorer.get_similar(img="path/to/image.jpg")
# Or search for similar images to a given index/indices
dataframe = explorer.get_similar(idx=0)
注意
为给定的数据集和模型对创建的嵌入表只会创建一次并重复使用。这些在幕后使用 LanceDB,它在磁盘上扩展,因此您可以为像 COCO 这样的大型数据集创建和重复使用嵌入,而无需耗尽内存。
如果您想要强制更新嵌入表,可以将 force=True 传递给 create_embeddings_table 方法。
您可以直接访问 LanceDB 表对象以执行高级分析。在“使用嵌入表”部分了解更多信息
1. 相似性搜索
相似性搜索是一种查找给定图像相似图像的技术。它基于相似图像将具有相似嵌入的想法。一旦建立了嵌入表,您可以以以下任何一种方式运行语义搜索:
-
在数据集中给定索引或索引列表上:
exp.get_similar(idx=[1,10], limit=10) -
对于数据集中不存在的任何图像或图像列表:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
对于多个输入情况,使用它们的嵌入的聚合。
您可以获得一个带有limit个最相似数据点的 pandas 数据框,以及它们在嵌入空间中的距离。您可以使用此数据集进行进一步的过滤。
语义搜索
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(
img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
limit=10,
)
print(similar.head())
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(idx=1, limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())
绘制相似图像
您还可以使用 plot_similar 方法绘制相似图像。此方法接受与 get_similar 相同的参数,并在网格中绘制相似图像。
绘制相似图像
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(idx=1, limit=10)
plt.show()
2. 问答 AI(自然语言查询)
这使您可以以自然语言编写想要如何过滤数据集的方式。您无需精通编写 SQL 查询。我们的 AI 动力查询生成器会在幕后自动生成查询。例如 - 您可以说 - “显示我有正好一个人和两只狗的 100 张图像。也可以有其他对象”,它会在内部生成查询并显示这些结果。注意:这是在幕后使用 LLMs 运行,因此结果是概率性的,有时可能会出错。
问答 AI
from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()
df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())
# plot the results
plt = plot_query_result(df)
plt.show()
3. SQL 查询
您可以使用 sql_query 方法在数据集上运行 SQL 查询。此方法接受 SQL 查询作为输入,并返回包含结果的 pandas 数据帧。
SQL 查询
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()
df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())
绘制 SQL 查询结果
您还可以使用 plot_sql_query 方法绘制 SQL 查询的结果。此方法接受与 sql_query 相同的参数,并在网格中绘制结果。
绘制 SQL 查询结果
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()
# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")
4. 使用嵌入表
您也可以直接使用嵌入表。一旦创建了嵌入表,可以使用 Explorer.table 访问它。
Explorer 内部使用 LanceDB 表。您可以直接访问此表,使用 Explorer.table 对象运行原始查询,推送预过滤器和后过滤器等。
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
以下是您可以使用该表执行的一些示例操作:
获取原始嵌入
示例
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)
使用预过滤器和后过滤器进行高级查询
示例
from ultralytics import Explorer
exp = Explorer(model="yolov8n.pt")
exp.create_embeddings_table()
table = exp.table
# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)
创建向量索引
当使用大型数据集时,您还可以为更快的查询创建专用的向量索引。这可以通过在 LanceDB 表上使用 create_index 方法完成。
table.create_index(num_partitions=..., num_sub_vectors=...)
在此处查找有关可用类型向量索引和参数的更多详细信息 here。未来,我们将支持直接从 Explorer API 创建向量索引。
5. 嵌入应用
您可以使用嵌入表执行各种探索性分析。以下是一些示例:
相似性索引
Explorer 提供了一个 similarity_index 操作:
-
它试图估计每个数据点与数据集中其余数据点的相似度。
-
它通过计算在生成的嵌入空间中比当前图像更接近的图像嵌入的数量,考虑一次
top_k个相似图像来实现。
它返回一个包含以下列的 pandas 数据帧:
-
idx:数据集中图像的索引 -
im_file:图像文件的路径 -
count:比当前图像更接近的数据集中图像数量 -
sim_im_files:路径列表,包含count个相似图像
提示
对于给定的数据集、模型、max_dist 和 top_k,一旦生成相似性索引,将会重复使用。如果您的数据集发生变化,或者仅需重新生成相似性索引,可以传递 force=True。
相似性索引
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()
您可以使用相似性索引来构建自定义条件,以过滤数据集。例如,您可以使用以下代码过滤掉与数据集中任何其他图像不相似的图像:
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
可视化嵌入空间
您还可以使用所选的绘图工具可视化嵌入空间。例如,这里是使用 matplotlib 的简单示例:
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# Reduce dimensions using PCA to 3 components for visualization in 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)
# Create a 3D scatter plot using Matplotlib Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")
# Scatter plot
ax.scatter(reduced_data[:, 0], reduced_data[:, 1], reduced_data[:, 2], alpha=0.5)
ax.set_title("3D Scatter Plot of Reduced 256-Dimensional Data (PCA)")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
ax.set_zlabel("Component 3")
plt.show()
开始使用 Explorer API 创建自己的 CV 数据集探索报告。作为灵感,查看
使用 Ultralytics Explorer 构建的应用程序
尝试我们基于 Explorer API 的 GUI 演示
即将推出
常见问题解答
Ultralytics Explorer API 的用途是什么?
Ultralytics Explorer API 旨在进行全面的数据集探索。它允许用户使用 SQL 查询、向量相似性搜索和语义搜索来过滤和搜索数据集。这个强大的 Python API 可以处理大型数据集,非常适合使用 Ultralytics 模型的各种计算机视觉任务。
我该如何安装 Ultralytics Explorer API?
要安装 Ultralytics Explorer API 及其依赖项,请使用以下命令:
pip install ultralytics[explorer]
这将自动安装 Explorer API 功能所需的所有外部库。有关其他设置细节,请参阅我们文档的安装部分。
我该如何使用 Ultralytics Explorer API 进行相似性搜索?
你可以使用 Ultralytics Explorer API 通过创建嵌入表并查询相似图像来执行相似性搜索。以下是一个基本示例:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolov8n.pt")
explorer.create_embeddings_table()
# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())
欲了解更多详情,请访问相似性搜索部分。
使用 LanceDB 与 Ultralytics Explorer 的好处是什么?
LanceDB 在 Ultralytics Explorer 的底层使用,提供可扩展的磁盘嵌入表。这确保你可以为像 COCO 这样的大型数据集创建和重用嵌入,而不会耗尽内存。这些表只创建一次,可以重复使用,从而提高数据处理的效率。
问 AI 功能在 Ultralytics Explorer API 中是如何工作的?
问 AI 功能允许用户使用自然语言查询来过滤数据集。此功能利用 LLMs 将这些查询转换为后台的 SQL 查询。以下是一个示例:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolov8n.pt")
explorer.create_embeddings_table()
# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())
欲了解更多示例,请查看问 AI 部分。


浙公网安备 33010602011771号