跳至内容

使用Ultralytics YOLO进行数据扩充

图像增强示例

导言

数据增强是计算机视觉领域的一项重要技术,它通过对现有图像进行各种转换,人为地扩展训练数据集。在训练Ultralytics YOLO 等深度学习模型时,数据扩增有助于提高模型的鲁棒性,减少过拟合,并增强对真实世界场景的泛化。

数据扩充为何重要

在训练计算机视觉模型的过程中,数据扩增具有多种重要作用:

  • 扩展数据集:通过创建现有图像的变体,可以有效增加训练数据集的规模,而无需收集新数据。
  • 提高泛化能力:模型学会在各种条件下识别物体,使其在实际应用中更加稳健。
  • 减少过度拟合:通过在训练数据中引入可变性,模型不太可能记住特定的图像特征。
  • 增强性能:经过适当增强训练的模型在验证集和测试集上通常能获得更高的准确性

Ultralytics YOLO 的实现提供了一整套增强技术,每种技术都有特定的用途,并以不同的方式提高模型性能。本指南将详细介绍每种增强参数,帮助您了解何时以及如何在项目中有效使用这些参数。

配置示例

您可以使用Python API、命令行界面CLI) 或配置文件自定义每个参数。下面举例说明如何在每种方法中设置数据增强。

配置示例

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")

# Training with custom augmentation parameters
model.train(data="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training without any augmentations (disabled values omitted for clarity)
model.train(
    data="coco.yaml",
    epochs=100,
    hsv_h=0.0,
    hsv_s=0.0,
    hsv_v=0.0,
    translate=0.0,
    scale=0.0,
    fliplr=0.0,
    mosaic=0.0,
    erasing=0.0,
    auto_augment=None,
)
# Training with custom augmentation parameters
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 hsv_h=0.03 hsv_s=0.6 hsv_v=0.5

使用配置文件

您可以在 YAML 配置文件中定义所有训练参数,包括增强参数(例如 train_custom.yaml).)。 mode 参数只有在使用CLI 时才需要。然后,这个新的 YAML 文件将覆盖 默认的 位于 ultralytics 包装

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo11n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5

然后使用Python API 启动培训:

列车示例

from ultralytics import YOLO

# Load a COCO-pretrained YOLO11n model
model = YOLO("yolo11n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")
# Train the model with custom configuration
yolo detect train model="yolo11n.pt" cfg=train_custom.yaml

色彩空间增强

色调调整 (hsv_h)

  • 范围: 0.0 - 1.0
  • 默认值: 0.015
  • 使用方法:转换图像颜色,同时保留它们之间的关系。颜色 hsv_h 超参数定义了偏移的幅度,最终的调整在以下两个参数之间随机选择 -hsv_hhsv_h.例如 hsv_h=0.3的范围内随机选择移位。-0.30.3.数值超过 0.5由于色相偏移会环绕色轮,因此在不同的色轮之间,增强效果看起来是一样的。 0.5-0.5.
  • 目的:尤其适用于室外场景,因为光照条件会极大地影响物体的外观。例如,香蕉在明亮的阳光下可能看起来更黄,但在室内则更绿。
  • Ultralytics 的实现RandomHSV
-0.5 -0.25 0.0 0.25 0.5
hsv_h_-0.5_augmentation hsv_h_-0.25_augmentation 扩增身份 hsv_h_0.25_augmentation hsv_h_-0.5_augmentation

饱和度调整 (hsv_s)

  • 范围: 0.0 - 1.0
  • 默认值: 0.7
  • 使用方法:修改图像中颜色的强度。颜色 hsv_h 超参数定义了偏移的幅度,最终的调整在以下两个参数之间随机选择 -hsv_shsv_s.例如 hsv_s=0.7,强度在-0.70.7.
  • 目的:帮助模型处理不同的天气条件和相机设置。例如,红色交通标志在晴天可能会显得非常鲜艳,但在雾天则会显得暗淡无光。
  • Ultralytics 的实现RandomHSV
-1.0 -0.5 0.0 0.5 1.0
hsv_s_-1_augmentation hsv_s_-0.5_augmentation 扩增身份 hsv_s_0.5_augmentation hsv_s_1_augmentation

亮度调节 (hsv_v)

  • 范围: 0.0 - 1.0
  • 默认值: 0.4
  • 使用方法:改变图像亮度。亮度 hsv_v 超参数定义了偏移的幅度,最终的调整在以下两个参数之间随机选择 -hsv_vhsv_v.例如 hsv_v=0.4,强度在-0.40.4.
  • 目的:对于训练需要在不同光照条件下工作的模型至关重要。例如,红苹果在阳光下可能看起来很亮,但在阴暗处就会暗淡很多。
  • Ultralytics 的实现RandomHSV
-1.0 -0.5 0.0 0.5 1.0
hsv_v_-1_augmentation HSV_V_-0.5_AUgmentation 扩增身份 HSV_V_0.5_AUgmentation hsv_v_1_augmentation

几何变换

旋转 (degrees)

  • 范围: 0.0180
  • 默认值: 0.0
  • 使用方法:在指定范围内随机旋转图像。旋转 degrees 超参数定义了旋转角度,最终的调整在以下两个参数之间随机选择 -degreesdegrees.例如 degrees=10.0的范围内随机选择旋转-10.010.0.
  • 目的:对于物体可能以不同方向出现的应用至关重要。例如,在无人机航拍图像中,车辆可以朝任何方向移动,这就要求模型能够识别物体的旋转方向。
  • Ultralytics 的实现随机视角
-180 -90 0.0 90 180
度数_180_增量 度数_90_增量 扩增身份 90 度增量 180 度增量

翻译 (translate)

  • 范围: 0.0 - 1.0
  • 默认值: 0.1
  • 使用方法:以图像大小的随机分数水平和垂直移动图像。图像 translate 超参数定义了偏移幅度,最终调整值在一定范围内随机选择两次(每个轴一次)。 -translatetranslate.例如 translate=0.5的范围内随机选择译文。-0.50.5 在 x 轴上,在相同范围内选择另一个独立随机值在 y 轴上。
  • 目的:帮助模型学习检测部分可见的物体,并提高对物体位置的鲁棒性。例如,在车辆损坏评估应用中,根据摄影师的位置和距离,汽车零件可能完全或部分出现在画面中,平移增强功能将教会模型识别这些特征,而不管它们是否完整或在什么位置。
  • Ultralytics 的实现随机视角
  • 备注:为简便起见,以下每次翻译都是相同的 xy 轴。数值 -1.01.0不显示,因为它们会将图像完全移出画面。
-0.5 -0.25 0.0 0.25 0.5
翻译_-0.5_增量 翻译_-0.25_增量 扩增身份 翻译_0.25_增量 翻译_0.5_增量

规模 (scale)

  • 范围: ≥0.0
  • 默认值: 0.5
  • 使用方法:在指定范围内以随机因子调整图像大小。图像大小 scale 超参数定义了缩放因子,最终的调整幅度在 1-scale1+scale.例如 scale=0.5的范围内随机选择缩放0.51.5.
  • 目的:使模型能够处理不同距离和大小的物体。例如,在自动驾驶应用中,车辆可能会出现在距离摄像头不同的距离,这就要求模型能够识别这些车辆,而不管其大小如何。
  • Ultralytics 的实现随机视角
  • 备注:
    • 价值 -1.0 不显示,因为它会使图像消失,而 1.0 只需 2 倍变焦即可。
    • 下表中显示的数值是通过超参数 scale,而不是最终的比例系数。
    • 如果 scale 大于 1.0,图像可以非常小,也可以翻转,因为缩放因子是随机选择的。 1-scale1+scale.例如 scale=3.0的范围内随机选择缩放-2.04.0.如果选择负值,图像将被翻转。
-0.5 -0.25 0.0 0.25 0.5
规模_-0.5_增量 刻度_-0.25_增量 扩增身份 刻度_0.25_增量 比例_0.5_增量

剪切力 (shear)

  • 范围: -180+180
  • 默认值: 0.0
  • 使用方法:引入几何变换,使图像沿 x 轴和 y 轴倾斜,在保持平行线的同时,有效地将图像的一部分向一个方向移动。倾斜 shear 超参数定义剪切角,最终调整值在以下两个参数之间随机选择 -shearshear.例如 shear=10.0,剪切力在-1010 在 x 轴上,在相同范围内选择另一个独立随机值在 y 轴上。
  • 目的:帮助模型适应由轻微倾斜或斜视角造成的视角变化。例如,在交通监控中,由于摄像头位置不垂直,汽车和路标等物体可能会出现倾斜。应用剪切增强技术可确保模型在出现这种倾斜变形时仍能学会识别物体。
  • Ultralytics 的实现随机视角
  • 备注:
    • shear 值会使图像迅速变形,因此建议从小数值开始,然后逐渐增大。
    • 与透视变换不同,剪切并不引入深度或消失点,而是通过改变物体的角度来扭曲物体的形状,同时保持对边平行。
-10 -5 0.0 5 10
剪切_10_增量 剪切_5_增量 扩增身份 剪切力_5_增量 剪切力_10_增量

透视 (perspective)

  • 范围: 0.0 - 0.001
  • 默认值: 0.0
  • 使用方法:沿 x 轴和 y 轴应用全透视变换,模拟从不同深度或角度观察物体时的效果。透视 perspective 超参数定义了透视量级,最终调整在以下两个参数之间随机选择 -perspectiveperspective.例如 perspective=0.001,视角在-0.0010.001 在 x 轴上,在相同范围内选择另一个独立随机值在 y 轴上。
  • 目的:视角增强对于处理极端视角变化至关重要,尤其是在物体因视角偏移而出现扭曲或变形的情况下。例如,在基于无人机的物体检测中,建筑物、道路和车辆会根据无人机的倾斜度和高度出现拉伸或压缩。通过应用透视变换,模型可以学会在这些由透视引起的扭曲中识别物体,从而提高其在真实世界部署中的鲁棒性。
  • Ultralytics 的实现随机视角
-0.001 -0.0005 0.0 0.0005 0.001
透视_-0.001_增量 透视_-0.0005_增量 扩增身份 透视_0.0005_增量 透视_0.001_增量

上下翻转 (flipud)

  • 范围: 0.0 - 1.0
  • 默认值: 0.0
  • 使用方法:通过沿 Y 轴倒转图像来执行垂直翻转。这种变换将整个图像倒置,但保留了物体之间的所有空间关系。翻转超参数定义了应用变换的概率,其值为 flipud=1.0 确保所有图像都被翻转,而 flipud=0.0 完全禁用转换。例如 flipud=0.5,每幅图像有 50% 的几率被翻转过来。
  • 目的:适用于物体可能倒置的情况。例如,在机器人视觉系统中,传送带或机械臂上的物体可能会以不同的方向被拾取和放置。垂直翻转可帮助模型识别物体,而无需考虑其自上而下的位置。
  • Ultralytics 的实现随机翻转
flipud 关闭 flipud 关于
扩增身份 增强时的触发器

左右翻转 (fliplr)

  • 范围: 0.0 - 1.0
  • 默认值: 0.5
  • 使用方法:通过沿 x 轴镜像图像来执行水平翻转。这种变换会在保持空间一致性的同时对调左右两边,从而帮助模型适应以镜像方向出现的物体。镜像 fliplr 超参数定义了应用变换的概率,其值为 fliplr=1.0 确保所有图像都被翻转,而 fliplr=0.0 完全禁用转换。例如 fliplr=0.5,每幅图像从左到右翻转的几率为 50%。
  • 目的:水平翻转被广泛应用于物体检测、姿势估计和面部识别,以提高对左右变化的鲁棒性。例如,在自动驾驶中,车辆和行人可能出现在道路的两侧,而水平翻转可以帮助模型在两个方向上都能很好地识别它们。
  • Ultralytics 的实现随机翻转
fliplr 关闭 fliplr 关于
扩增身份 增强时的 fliplr_on_augmentation

BGR 通道交换 (bgr)

  • 范围: 0.0 - 1.0
  • 默认值: 0.0
  • 使用方法:将图像的颜色通道从 RGB 换成 BGR,改变颜色的表示顺序。颜色 bgr 超参数定义了应用变换的概率,其中 bgr=1.0 确保所有图像都进行通道交换,并 bgr=0.0 禁用。例如 bgr=0.5, 每幅图像有 50% 的几率从 RGB 转换为 BGR。
  • 目的:提高对不同颜色通道排序的稳健性。例如,在训练模型时,必须在 RGB 和 BGR 格式可能使用不一致的各种相机系统和成像库中工作,或者在部署模型的环境中,输入的色彩格式可能与训练数据不同。
  • Ultralytics 的实施格式
bgr 关闭 bgr 关于
扩增身份 bgr_on_augmentation

马赛克 (mosaic)

  • 范围: 0.0 - 1.0
  • 默认值: 1.0
  • 使用方法:将四幅训练图像合成一幅。图像 mosaic 超参数定义了应用变换的概率,其中 mosaic=1.0 确保合并所有图像,并 mosaic=0.0 禁用转换。例如 mosaic=0.5, 每张图片有 50% 的几率与其他三张图片组合在一起。
  • 目的:对于改进小物体检测和上下文理解非常有效。例如,在野生动物保护项目中,动物可能会出现在不同的距离和尺度上,马赛克增强技术通过从有限的数据中人工创建不同的训练样本,帮助模型学会识别不同大小、部分遮挡和环境背景下的同一物种。
  • Ultralytics 的实施马赛克
  • 备注:
    • 即使 mosaic 增强功能会使模型更加稳健,但也会使训练过程更具挑战性。
    • "(《世界人权宣言》) mosaic 在训练即将结束时,可以通过设置 close_mosaic 为关闭计时器的时间间隔数。例如,如果 epochs 设置为 200close_mosaic 设置为 20,...... mosaic 之后,增强功能将被禁用。 180 纪元。如果 close_mosaic 设置为 0,...... mosaic 在整个培训过程中将启用增强功能。
    • 生成的马赛克中心使用随机值确定,既可以位于图像内部,也可以位于图像外部。
    • 目前实施的 mosaic 增强技术将从数据集中随机抽取的 4 幅图像组合在一起。如果数据集较小,同一幅图像可能会在同一幅马赛克中使用多次。
mosaic 关闭 mosaic 关于
扩增身份 增量马赛克

Mixup (mixup)

  • 范围: 0.0 - 1.0
  • 默认值: 0.0
  • 使用方法:以给定的概率混合两幅图像及其标签。图像 mixup 超参数定义了应用变换的概率,其中 mixup=1.0 确保所有图像的混合和 mixup=0.0 禁用转换。例如 mixup=0.5,每幅图像都有 50% 的几率与另一幅图像混合。
  • 目的:提高模型的鲁棒性,减少过拟合。例如,在零售产品识别系统中,混合图像可通过混合不同产品的图像帮助模型学习更强大的特征,使其学会识别拥挤货架上部分可见或被其他产品遮挡的产品。
  • Ultralytics 的实施混合
  • 备注:
    • "(《世界人权宣言》) mixup 比率是从 np.random.beta(32.0, 32.0) 贝塔分布,即每幅图像的贡献率约为 50%,但略有不同。
第一张图片 mixup 关闭 第二张图片 mixup 关闭 mixup 关于
增强_混合_标识_1 增强_混合_标识_2 增量时的混合

CutMix (cutmix)

  • 范围: 0.0 - 1.0
  • 默认值: 0.0
  • 使用方法:从一幅图像中剪切一个矩形区域,并以给定的概率将其粘贴到另一幅图像上。粘贴 cutmix 超参数定义了应用变换的概率,其中 cutmix=1.0 确保所有图像都经过这种转换,并 cutmix=0.0 完全禁用。例如 cutmix=0.5因此,每幅图像都有 50% 的几率用另一幅图像的补丁替换一个区域。
  • 目的:通过创建逼真的遮挡场景来提高模型性能,同时保持局部特征的完整性。例如,在自动驾驶系统中,cutmix 可以帮助模型学习识别车辆或行人,即使它们被其他物体部分遮挡,从而提高在复杂的有重叠物体的真实环境中的检测精度。
  • Ultralytics 的实施CutMix
  • 备注:
    • 切割区域的大小和位置根据每次应用随机确定。
    • 与 mixup 不同的是,mixup 会在全局范围内混合像素值、 cutmix 在切割区域内保持原始像素强度,保留局部特征。
    • 一个区域只有在不与任何现有边界框重叠的情况下才会被粘贴到目标图像中。此外,只有保留至少 0.1 (在粘贴区域内保留其原有面积(10%)。
    • 这个最小边界框区域阈值在当前的实现中无法更改,并被设置为 0.1 默认情况下。
第一张图片 cutmix 关闭 第二张图片 cutmix 关闭 cutmix 关于
扩增_切割混合_识别码_1 扩增_切割混合_识别码_2 切割混合

特定于分段的增强功能

复制粘贴 (copy_paste)

  • 范围: 0.0 - 1.0
  • 默认值: 0.0
  • 使用方法:这种增强功能根据指定的概率在图像内部或图像之间复制对象,该概率受以下因素控制 copy_paste_mode.......。 copy_paste 超参数定义了应用变换的概率,其中 copy_paste=1.0 确保复制所有图像并 copy_paste=0.0 禁用转换。例如 copy_paste=0.5因此,每幅图像都有 50% 的几率从另一幅图像中复制对象。
  • 目的:特别适用于实例分割任务和稀有对象类别。例如,在工业缺陷检测中,某些类型的缺陷并不经常出现,复制粘贴增强技术可以通过将这些缺陷从一幅图像复制到另一幅图像,人为地增加这些罕见缺陷的出现率,从而帮助模型更好地学习这些代表性不足的情况,而无需额外的缺陷样本。
  • Ultralytics 的实现复制粘贴
  • 备注:
    • 如下图所示 copy_paste 增强功能可用于将一个图像中的对象复制到另一个图像中。
    • 一旦对象被复制,无论 copy_paste_mode计算其与源图像中所有对象的面积交集(IoA)。如果所有 IoA 都低于 0.3 (30%),对象就会被粘贴到目标图像中。如果只有一个 IoA 高于 0.3则对象不会粘贴到目标图像中。
    • IoA 阈值在目前的实施中无法更改,并被设置为 0.3 默认情况下。
copy_paste 关闭 copy_paste 关于 copy_paste_mode=flip 可视化 copy_paste 处理
扩增身份 增量时复制粘贴 复制_粘贴_增强_gif_演示

复制粘贴模式 (copy_paste_mode)

  • 选项: 'flip', 'mixup'
  • 默认值: 'flip'
  • 使用方法:确定 复制粘贴 增强。如果设置为 'flip',对象来自同一图像,而 'mixup' 允许从不同图像中复制对象。
  • 目的:允许灵活地将复制对象整合到目标图像中。
  • Ultralytics 的实现复制粘贴
  • 备注:
    • 两者的 IoA 原则相同 copy_paste_mode但复制对象的方式不同。
    • 根据图像大小的不同,有时对象可能会部分或全部复制到框架之外。
    • 根据多边形注释的质量,复制的对象与原始对象相比可能会有细微的形状变化。
参考图片 copy_paste copy_paste 关于 copy_paste_mode=mixup
增强_混合_标识_2 扩增身份 复制_粘贴_模式_混合_增量

针对具体分类的增强功能

自动增强 (auto_augment)

  • 选项: 'randaugment', 'autoaugment', 'augmix', None
  • 默认值: 'randaugment'
  • 使用方法:应用自动增强分类策略。"... 'randaugment' 选项使用 RandAugment、 'autoaugment' 使用 AutoAugment,而 'augmix' 使用 AugMix。设置为 None 禁用自动增强功能。
  • 目的:针对分类任务自动优化增强策略。不同之处如下:
    • 自动增强:该模式应用从 ImageNet、CIFAR10 和 SVHN 等数据集中学到的预定义增强策略。用户可以选择这些现有策略,但不能在 Torchvision 中训练新策略。要发现特定数据集的最佳增强策略,需要外部库或自定义实现。参考AutoAugment 论文
    • RandAugment:随机选择大小一致的变换。这种方法减少了对大量搜索阶段的需求,在提高模型稳健性的同时,也提高了计算效率。参考RandAugment 论文
    • AugMixAugMix 是一种数据增强方法,它通过简单变换的随机组合来创建不同的图像变化,从而增强模型的鲁棒性。参考AugMix 论文
  • Ultralytics 的实现classify_augmentations()
  • 备注:
    • 从本质上讲,这三种方法的主要区别在于增强策略的定义和应用方式。
    • 您可以参考这篇文章,其中详细比较了这三种方法。

随机擦除 (erasing)

  • 范围: 0.0 - 0.9
  • 默认值: 0.4
  • 使用方法:在分类训练过程中随机擦除部分图像。图像 erasing 超参数定义了应用变换的概率,其中 erasing=0.9 确保几乎所有图像都被清除,并 erasing=0.0 禁用转换。例如 erasing=0.5, 每幅图像有 50% 的几率被擦除一部分。
  • 目的:帮助模型学习稳健的特征,防止过度依赖特定的图像区域。例如,在面部识别系统中,随机擦除可以帮助模型更好地应对部分遮挡,如太阳镜、面罩或其他可能部分遮挡面部特征的物体。这就迫使模型利用多种面部特征识别个人,而不是仅仅依赖于可能被遮挡的明显特征,从而提高了实际性能。
  • Ultralytics 的实现classify_augmentations()
  • 备注:
    • "(《世界人权宣言》) erasing 增量手术有一个 scale, ratiovalue 超参数,而这些参数不能用 当前执行情况.它们的默认值是 (0.02, 0.33), (0.3, 3.3)0分别在PyTorch 文献资料.
    • 的上限 erasing 超参数设置为 0.9 以避免对所有图像进行转换。
erasing 关闭 erasing 开(例 1) erasing 开(例 2) erasing 开(例 3)
扩增身份 擦除外一增量 擦除扩展 擦除_EX3_增量

常见问题

有太多的增强功能可供选择。我怎么知道该使用哪些?

选择合适的增强功能取决于您的具体使用情况和数据集。以下是几条一般性指导原则,可帮助您做出决定:

  • 在大多数情况下,颜色和亮度的微小变化都是有益的。默认值为 hsv_h, hsv_shsv_v 是一个坚实的起点。
  • 如果摄像机的视角是一致的,并且在模型部署后不会改变,那么就可以跳过几何变换,例如 rotation, translation, scale, shearperspective.但是,如果摄像机的角度可能会变化,而您又需要模型更加坚固,那么最好还是保留这些增强功能。
  • 使用 mosaic 只有在可以接受部分遮挡对象或每幅图像有多个对象且不改变标签值的情况下,才可以使用增强功能。或者,您可以保留 mosaic 活跃,但增加 close_mosaic 值,以便在训练过程中提前禁用它。

简而言之:保持简单。从少量的增强集开始,根据需要逐步增加。我们的目标是提高模型的泛化能力和鲁棒性,而不是使训练过程过于复杂。此外,还要确保所应用的增强反映了模型在生产中会遇到的相同数据分布。

在开始培训时,您会看到 albumentations: Blur[...] 参考文献。这是否意味着Ultralytics YOLO 会运行额外的增强功能,如模糊功能?

如果 albumentations 安装软件包后,Ultralytics 会自动使用该软件包应用一系列额外的图像增强功能。这些增强功能由内部处理,无需额外配置。

您可以在我们的 技术文档以及我们的 Albumentations 集成指南.注意,只有概率为 p 大于 0 是有效的。这些特意应用于低频,以模仿真实世界的视觉伪影,如模糊或灰度效果。

在开始培训时,我没有看到任何关于外标法的内容。为什么?

检查是否 albumentations 软件包已安装。如果没有安装,可以通过运行 pip install albumentations.安装完成后,Ultralytics 将自动检测并使用该软件包。



📅创建于 1 个月前 ✏️已更新 1 个月

评论