用于标注计算机视觉数据的预处理技术#
数据预处理将原始的、带有标注的图像转化为计算机视觉模型训练所需的高效且一致的输入。借助 Ultralytics YOLO26,核心像素操作(RGB 转换、缩放到 [0, 1] 以及调整大小)会在训练流水线中自动运行,因此你实际需要做的工作是正确划分数据集、平衡类别并选择增强方式。本指南涵盖了这些核心技术:调整大小、归一化、数据集划分、数据增强以及探索性数据分析(EDA)。
Watch: How to Use Data Preprocessing and Augmentation to Improve Model Accuracy in Real-World Scenarios 🚀
这一步骤在明确项目目标以及收集并标注数据之后进行,位于计算机视觉项目工作流的早期阶段。
为什么预处理很重要#
预处理将你的数据转化为一种能降低计算负载并提升模型性能的格式。它解决了原始数据中常见的三个问题:
- 噪声:数据中无关的或随机的干扰。
- 不一致性:图像尺寸、格式和质量方面的差异。
- 不平衡:整个数据集中类别分布不均匀。
预处理技术#
主要技术包括调整大小、归一化、数据集划分和增强。对于 YOLO26,前两项是自动完成的,而划分和增强则需要你进行关键选择。
调整图像大小#
许多模型需要一致的输入尺寸,因此调整大小可以使图像统一并降低计算复杂度。两种常用的插值方法是:
- 双线性插值:通过取最近四个像素的加权平均值来平滑像素值。
- 最近邻插值:直接复制最近的像素值而不进行平均——速度更快,但生成的图像会有块状效应。
像 OpenCV 和 PIL (Pillow) 这样的库提供了这些功能,但使用 YOLO26 时你通常不需要手动调整大小。模型训练过程中的 imgsz 参数会处理这一点:当将其设置为诸如 640 的值时,YOLO 会缩放每张图像,使其最大尺寸达到 640 像素同时保持宽高比,然后填充较短的一侧(默认灰色,值为 114)以达到正方形的 640 × 640 输入。
像素值归一化#
归一化将像素值缩放到标准范围,这有助于模型在训练期间更快收敛。两种常见的技术是:
- 最小-最大缩放 (Min-Max Scaling):将像素值缩放到 0 到 1 的范围。
- Z-Score 归一化:根据平均值和标准差对像素值进行缩放。
作为预处理流水线的一部分,YOLO26 会自动处理归一化:它将图像转换为 RGB,并通过除以 255(最小-最大缩放)将像素值缩放到 [0, 1] 范围内。YOLO 默认不应用 ImageNet 风格的均值/标准差(z-score)归一化,因此无需执行手动归一化步骤。
拆分数据集#
将数据划分为训练集、验证集和测试集可以让你在未见过的数据上评估模型并衡量其泛化能力。常见的划分比例是 70% 用于训练,20% 用于验证,10% 用于测试。像 scikit-learn 或 TensorFlow 这样的工具可以使此操作变得非常简单。
划分时请记住以下几点:
- 保持类别分布:确保每个类别在训练集、验证集和测试集中按比例呈现。
- 平衡类别:对于不平衡的数据集,考虑对少数类进行过采样或对多数类进行欠采样——且仅限于在训练集中进行。
在应用任何增强或其他预处理之前先划分数据集,并且仅将这些转换应用到训练集。如果在划分之前进行增强,验证集或测试集中的信息就会通过增强过程流入训练集,从而产生在现实世界中失效的虚高评分。
增强数据集#
数据增强通过创建现有图像的修改版本来人为增加数据集的大小。它有助于减少过拟合并提高泛化能力,具有多项优势:
- 模型更稳健:光照、方向和比例的变化使模型能够抵御现实世界的畸变。
- 经济高效:你可以在不收集和标注新数据的情况下扩充训练集。
- 更好地利用数据:每张标注图像都能产出多个训练变体。
在使用 YOLO26 时,增强是通过传递给 model.train() 或等效 CLI 标志的训练参数来控制的——而不是通过编辑定义数据集元数据(如路径、类名和拆分)的数据集 YAML 文件。内置的增强包括:
- 马赛克、MixUp 和 CutMix(
mosaic、mixup、cutmix):将多张图像合并为一个训练样本。 - 翻转(
fliplr、flipud):水平或垂直镜像图像。 - 几何变换(
degrees、translate、scale、shear、perspective):旋转、平移、缩放和扭曲图像。 - HSV 色彩抖动(
hsv_h、hsv_s、hsv_v):改变色调、饱和度和亮度。 - 复制粘贴(
copy_paste):在图像之间粘贴对象以用于分割。
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Augmentation is configured with training arguments, not the dataset YAML
model.train(data="coco8.yaml", epochs=10, hsv_h=0.015, fliplr=0.5, mosaic=1.0, degrees=10.0)有关增强参数及其默认值的完整列表,请参阅增强设置参考以及专用的YOLO 数据增强指南。如果安装了 albumentations 软件包,YOLO 还将自动启用其内置的基于 Albumentations 的增强。
案例研究:车辆检测的预处理#
以使用 YOLO26 检测和分类交通图像中的车辆的项目为例,从带有边界框和标签的注释图像开始。各项预处理决策如下所示:
- 调整大小:无需手动操作——YOLO26 会在训练期间自动调整大小为
imgsz。 - 归一化:无需手动操作——YOLO26 会自动将像素值缩放到
[0, 1]。 - 划分:将数据集划分为 70% 的训练集、20% 的验证集和 10% 的测试集,保持各划分中的类别分布一致。
- 增强:设置适合交通场景的训练参数——例如使用
fliplr应对方向不变性,使用hsv_v应对日间/夜间光照,以及使用mosaic应对多样化的物体密度。
完成这些决策后,数据集就准备好进行探索性数据分析 (EDA) 了。
探索性数据分析 (EDA)#
EDA 利用统计和可视化揭示数据中的模式和分布,帮助你在训练前发现类不平衡或异常值等问题。
统计 EDA 技术#
统计 EDA 从基本指标(平均值、中位数、标准差和范围)开始,计算像素强度分布等属性。这些指标能让你快速概览数据集的质量,并尽早发现异常情况。
视觉 EDA 技术#
可视化能揭示汇总统计无法发现的模式,例如类不平衡和异常值。常用工具包括:
- 直方图和箱线图:展示像素值的分布,并标记强度或特征分布中的异常值。
- 条形图:通过比较每个类的样本数量来揭示类不平衡。
- 散点图:探索图像特征或标注之间的关系。
- 热图:可视化像素强度分布或标注在图像中的空间分布。
用于 EDA 的 Ultralytics 平台#
若要以无代码方式进行 EDA,请将数据集上传到 Ultralytics Platform。数据集的 Charts 选项卡会自动生成关键的 EDA 可视化效果:划分分布、顶级类别计数、图像宽度/高度直方图,以及标注位置和图像维度的 2D 热图。Images 选项卡允许你通过带有标注叠加层的网格、紧凑或表格视图浏览数据,从而无需编写任何代码即可轻松发现标注错误的样本或不平衡的类别。
结论#
经过适当划分、归一化和增强的数据可以减少噪声并提高泛化能力,将原始图像集合转化为可靠的训练集。完成数据集预处理后,下一步是训练你的模型。如果在过程中遇到问题,请在 Ultralytics GitHub 仓库或 Ultralytics Discord 服务器上向社区求助。
常见问题解答#
预处理可确保你的数据干净、一致,并采用针对训练优化的格式。通过解决原始数据中的噪声、不一致和类别不平衡问题,调整大小、归一化、增强和数据集划分等步骤可以减少计算负载并提高模型性能。请参阅计算机视觉项目的步骤,了解它如何融入更广泛的工作流。
通过训练参数配置增强,而不是通过数据集 YAML。将诸如
fliplr、mosaic、hsv_h和degrees的参数传递给model.train()(或等效的 CLI 标志),以设置每个变换的概率和强度。这些内容在增强设置中定义,并在YOLO 数据增强指南中进行了说明。最常见的两种技术是最小-最大缩放(将像素重新缩放到 0 到 1 的范围)和 z-score 归一化(基于均值和标准差重新缩放)。YOLO26 会自动应用最小-最大缩放——将图像转换为 RGB 并将像素值除以 255——因此你不需要手动执行归一化步骤。它默认不应用 z-score 归一化。
常见的做法是 70% 用于训练,20% 用于验证,10% 用于测试。在所有三个划分中保持类别分布,并通过仅在划分后对训练集应用增强来避免数据泄露。诸如 scikit-learn 或 TensorFlow 的工具可以高效地处理划分。有关上游数据集准备的信息,请参阅数据收集和标注指南。
是的。
imgsz参数在训练和推理期间调整图像大小,使其最大维度与指定大小(例如 640 像素)匹配同时保持宽高比,然后填充短边。你无需自行调整图像大小——详情请参阅模型训练文档。