跳至内容

带注释的计算机视觉数据的数据预处理技术

导言

定义计算机视觉 项目的目标 并 收集和批注数据后,下一步是预处理批注数据,并为模型训练做好准备。干净一致的数据对于创建性能良好的模型至关重要。

预处理是 计算机视觉项目工作流 中的一个步骤,包括调整图像大小、规范化像素值、扩充数据集以及将数据拆分为训练集、验证集和测试集。让我们来探讨清理数据的基本技术和最佳实践!

数据预处理的重要性

我们已经在仔细收集和注释我们的数据,并考虑到了多种因素。那么,是什么让数据预处理对计算机视觉项目如此重要呢?好吧,数据预处理就是将数据转换为适合训练的格式,从而减少计算负载并有助于提高模型性能。以下是预处理解决的原始数据中的一些常见问题:

  • 噪声:数据中不相关或随机的变化。
  • 不一致:图像大小、格式和质量的变化。
  • 不平衡:数据集中类或类别的分布不均。

数据预处理技术

数据预处理的首要步骤之一是调整大小。某些型号设计用于处理可变的输入大小,但许多型号需要一致的输入大小。调整图像大小可使它们统一并降低计算复杂性。

调整图像大小

您可以使用以下方法调整图像大小:

  • 双线性插值:通过对四个最接近的像素值进行加权平均来平滑像素值。
  • 最近邻:在不平均的情况下分配最接近的像素值,从而产生块状图像,但计算速度更快。

若要使调整大小任务更简单,可以使用以下工具:

  • OpenCV:一个流行的计算机视觉库,具有广泛的图像处理功能。
  • PIL(枕头):A Python 用于打开、操作和保存图像文件的映像库。

关于 YOLOv8, 模型训练 期间的“imgsz”参数允许灵活的输入大小。当设置为特定大小(如 640)时,模型将调整输入图像的大小,使其最大尺寸为 640 像素,同时保持原始纵横比。

通过评估模型和数据集的特定需求,您可以确定调整大小是否是必要的预处理步骤,或者模型是否可以有效地处理不同大小的图像。

规范化像素值

另一种预处理技术是归一化。归一化将像素值缩放到标准范围,这有助于在训练期间更快地收敛并提高模型性能。以下是一些常见的规范化技术:

  • 最小-最大缩放:将像素值缩放到 0 到 1 的范围内。
  • Z 分数归一化:根据像素值的平均值和标准差缩放像素值。

关于 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 适用于 EDA 的 Explorer

对于更高级的 EDA 方法,您可以使用 Ultralytics 资源管理器工具。它为探索计算机视觉数据集提供了强大的功能。通过支持语义搜索、SQL 查询和向量相似度搜索,该工具可以轻松分析和理解数据。跟 Ultralytics 在资源管理器中,您可以为数据集创建嵌入以查找相似的图像,运行 SQL 查询进行详细分析,并执行语义搜索,所有这些都通过用户友好的图形界面完成。

概述 Ultralytics 资源管理器

伸出援手,建立联系

与其他计算机视觉爱好者讨论您的项目可以从不同的角度为您提供新的想法。以下是一些学习、故障排除和交流的好方法:

与社区联系的渠道

  • GitHub 问题: 访问 YOLOv8 GitHub 存储库,并使用 “问题”选项卡 提出问题、报告错误和建议功能。社区和维护人员随时为您提供帮助,解决您遇到的任何问题。
  • Ultralytics Discord 服务器: 加入 Ultralytics Discord 服务器 ,用于与其他用户和开发人员联系、获得支持、分享知识和集思广益。

官方文件

您的数据集已准备就绪!

适当调整大小、规范化和增强数据可通过减少噪声和改进泛化来提高模型性能。通过遵循本指南中概述的预处理技术和最佳实践,您可以创建实体数据集。准备好预处理的数据集后,您可以放心地继续执行项目中的后续步骤。

常见问题

数据预处理在计算机视觉项目中的重要性是什么?

数据预处理在计算机视觉项目中至关重要,因为它能确保数据干净、一致,并且格式最适合模型训练。通过解决原始数据中的噪音、不一致性和不平衡等问题,预处理步骤(如调整大小、归一化、增强和数据集分割)有助于减少计算负荷并提高模型性能。更多详情,请访问计算机视觉项目步骤。

如何使用Ultralytics YOLO 进行数据扩增?

要使用Ultralytics YOLOv8 进行数据扩增,需要修改数据集配置文件(.yaml)。在该文件中,您可以指定各种增强技术,如随机裁剪、水平翻转和亮度调整。这可以通过此处解释的训练配置有效实现。数据增强有助于创建更稳健的数据集,减少过拟合,提高模型泛化能力。

计算机视觉数据的最佳数据规范化技术是什么?

归一化将像素值缩放至标准范围,以加快收敛速度并提高训练时的性能。常见的技术包括

  • 最小-最大缩放:将像素值缩放到 0 到 1 的范围内。
  • Z 分数归一化:根据像素值的平均值和标准差缩放像素值。

对于YOLOv8 ,会自动进行归一化处理,包括转换为 RGB 和像素值缩放。更多相关信息,请参阅模型训练部分。

我应该如何拆分注释数据集进行训练?

通常的做法是将数据集分成 70% 用于训练,20% 用于验证,10% 用于测试。重要的是,要在这些拆分中保持类的数据分布,并通过仅在训练集上执行增强来避免数据泄漏。使用 scikit-learn 或TensorFlow 等工具进行高效的数据集拆分。请参阅有关数据集准备的详细指南。

我能否在YOLOv8 中处理不同大小的图像,而无需手动调整大小?

可以,Ultralytics YOLOv8 可以在模型训练过程中通过 "imgsz "参数处理不同尺寸的图像。该参数可确保调整图像大小,使其最大尺寸符合指定尺寸(如 640 像素),同时保持纵横比。如需更灵活的输入处理和自动调整,请查看模型训练部分。



创建于 2024-05-31,更新于 2024-07-05
作者:glenn-jocher(4)、abirami-vina(1)

评论