使用 Ultralytics YOLO 进行数据增强

YOLO data augmentation examples showing original and augmented images for training

介绍

数据增强 是计算机视觉中的一项关键技术,它通过对现有图像应用各种变换来人为地扩充你的训练数据集。在训练诸如 Ultralytics YOLO 之类的 深度学习 模型时,数据增强有助于提高模型的稳健性,减少过拟合,并增强对现实场景的泛化能力。



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

为什么数据增强很重要

数据增强在训练计算机视觉模型时起到了多个至关重要的作用:

  • 扩充数据集:通过创建现有图像的变体,你可以有效增加训练数据集的大小,而无需收集新数据。
  • 改进泛化能力:模型学会了在各种条件下识别对象,从而在现实应用中更具稳健性。
  • 减少过拟合:通过在训练数据中引入变异性,模型不太可能记住特定的图像特征。
  • 增强性能:使用适当增强训练的模型通常在验证集和测试集上能获得更好的 准确率

Ultralytics YOLO 的实现提供了一套全面的增强技术,每种技术都有特定的用途,并以不同方式促进模型性能。本指南将详细探讨每个增强参数,帮助你了解何时以及如何有效地在项目中使用它们。

示例配置

你可以使用 Python API、命令行界面 (CLI) 或配置文件自定义每个参数。以下是关于如何在每种方法中设置数据增强的示例。

配置示例
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.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 Albumentations transforms (Python API only)
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco.yaml", epochs=100, augmentations=custom_transforms)

使用配置文件

You can define all training parameters, including augmentations, in a YAML configuration file (e.g., train_custom.yaml). The mode parameter is only required when using the CLI. This new YAML file will then override the default one located in the ultralytics package.

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.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 YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(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.250.00.250.5
色调偏移 -0.5 增强色调偏移 -0.25 增强无增强的原始图像色调偏移 0.25 增强色调偏移 -0.5 增强

饱和度调整 (hsv_s)

  • 范围0.0 - 1.0
  • 默认值0.7
  • 用法:修改图像中颜色的强度。hsv_s 超参数定义了偏移幅度,最终调整值在 -hsv_shsv_s 之间随机选择。例如,当 hsv_s=0.7 时,强度在 -0.70.7 之间随机选择。
  • 目的:帮助模型处理多变的天气条件和相机设置。例如,红色交通标志在晴天可能显得非常鲜艳,但在雾天可能看起来暗淡褪色。
  • Ultralytics 的实现RandomHSV
-1.0-0.50.00.51.0
饱和度 -1.0 灰度增强饱和度 -0.5 增强无增强的原始图像饱和度 0.5 增强饱和度 1.0 鲜艳增强

亮度调整 (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.50.00.51.0
亮度 -1.0 变暗增强亮度 -0.5 增强无增强的原始图像亮度 0.5 增强亮度 1.0 变亮增强

几何变换

旋转 (degrees)

  • 范围0.0180
  • 默认值0
  • 用法:在指定范围内随机旋转图像。degrees 超参数定义了旋转角度,最终调整值在 -degreesdegrees 之间随机选择。例如,当 degrees=10.0 时,旋转角度在 -10.010.0 之间随机选择。
  • 目的:对于对象可能以不同方向出现的应用至关重要。例如,在空中无人机图像中,车辆可能朝向任何方向,要求模型无论其旋转角度如何都能识别对象。
  • Ultralytics 的实现RandomPerspective
-180-900.090180
旋转 -180 度增强旋转 -90 度增强无增强的原始图像旋转 90 度增强旋转 180 度增强

平移 (translate)

  • 范围0.0 - 1.0
  • 默认值0.1
  • 用法:将图像按图像大小的随机分数进行水平和垂直移动。translate 超参数定义了移动幅度,最终调整值在 -translatetranslate 范围内分别进行两次随机选择(每个轴一次)。例如,当 translate=0.5 时,x 轴上的平移在 -0.50.5 之间随机选择,y 轴上则在同一范围内独立随机选择另一个值。
  • 目的:帮助模型学会检测部分可见的对象,并提高对对象位置的稳健性。例如,在车辆损坏评估应用中,汽车部件可能根据拍摄者的位置和距离完全或部分出现在画面中,平移增强将教模型识别这些特征,无论其完整性或位置如何。
  • Ultralytics 的实现RandomPerspective
  • Note: For simplicity, the translations applied below are the same each time for both x and y axes. Values -1.0 and 1.0 are not shown as they would translate the image completely out of the frame.
-0.5-0.250.00.250.5
平移 -0.5 移动增强平移 -0.25 移动增强无增强的原始图像平移 0.25 移动增强平移 0.5 移动增强

缩放 (scale)

  • 范围0.0 - 1.0
  • 默认值0.5
  • 用法:在指定范围内以随机因子调整图像大小。scale 超参数定义了缩放因子,最终调整值在 1-scale1+scale 之间随机选择。例如,当 scale=0.5 时,缩放比例在 0.51.5 之间随机选择。
  • 目的:使模型能够处理不同距离和尺寸的对象。例如,在自动驾驶应用中,车辆可以出现在距离相机不同远近的位置,要求模型无论其尺寸如何都能识别它们。
  • Ultralytics 的实现RandomPerspective
  • 注意
    • -1.0 未显示,因为它会导致图像消失,而 1.0 仅仅会导致 2 倍放大。
    • 下表中显示的值是通过超参数 scale 应用的值,而不是最终的缩放因子。
    • 如果 scale 大于 1.0,图像可能会变得非常小或被翻转,因为缩放因子是在 1-scale1+scale 之间随机选择的。例如,当 scale=3.0 时,缩放比例在 -2.04.0 之间随机选择。如果选择了负值,图像将被翻转。
-0.5-0.250.00.250.5
缩放 0.5x 缩小增强缩放 0.75x 缩小增强无增强的原始图像缩放 1.25x 放大增强缩放 1.5x 放大增强

剪切 (shear)

  • 范围-180+180
  • 默认值0
  • 用法:引入一种沿 x 轴和 y 轴倾斜图像的几何变换,有效地将图像部分向一个方向偏移,同时保持平行线不变。shear 超参数定义了剪切角度,最终调整值在 -shearshear 之间随机选择。例如,当 shear=10.0 时,x 轴上的剪切在 -1010 之间随机选择,y 轴上则在同一范围内独立随机选择另一个值。
  • 目的:帮助模型泛化由于轻微倾斜或斜向视角引起的观察角度变化。例如,在交通监控中,由于相机放置位置非垂直,汽车和交通标志等物体可能看起来倾斜。应用剪切增强可确保模型学会在存在此类扭曲变形的情况下仍能识别对象。
  • Ultralytics 的实现RandomPerspective
  • 注意
    • shear 值可能会迅速扭曲图像,因此建议从较小的值开始并逐渐增加它们。
    • 与透视变换不同,剪切不会引入深度或消失点,而是通过改变物体的角度同时保持对边平行来扭曲物体的形状。
-10-50.0510
剪切 -10 度增强剪切 -5 度增强无增强的原始图像剪切 5 度增强剪切 10 度增强

透视 (perspective)

  • 范围: 0.0 - 0.001
  • 默认值0
  • 用法: 对 x 轴和 y 轴应用完整的透视变换,模拟物体在不同深度或角度观察时的外观。perspective 超参数定义了透视的大小,最终的调整值会在 -perspectiveperspective 之间随机选择。例如,当 perspective=0.001 时,x 轴上的透视会在 -0.0010.001 之间随机选择,y 轴上也会在该范围内随机选择一个独立的数值。
  • 目的: 透视增强对于处理极端视点变化至关重要,特别是在物体因透视移动而出现缩短或变形的场景中。例如,在基于无人机的目标检测中,建筑物、道路和车辆会根据无人机的倾斜度和高度显得被拉伸或压缩。通过应用透视变换,模型可以学会识别尽管存在这些透视导致的变形的物体,从而提高它们在现实世界部署中的鲁棒性。
  • Ultralytics 的实现RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformation无增强的原始图像Perspective 0.0005 transformationPerspective 0.001 transformation

上下翻转 (flipud)

  • 范围0.0 - 1.0
  • 默认值0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • 目的: 适用于物体可能倒置的场景。例如,在机器人视觉系统中,传送带上的物体或机械臂抓取的物体可能会以各种方向放置。垂直翻转有助于模型识别物体,无论其上下方向如何。
  • Ultralytics 实现: RandomFlip
flipud 关闭flipud 开启
Original image without augmentationVertical flip augmentation enabled

左右翻转 (fliplr)

  • 范围0.0 - 1.0
  • 默认值0.5
  • 用法: 通过沿 x 轴镜像图像执行水平翻转。此变换会交换左右两侧,同时保持空间一致性,这有助于模型泛化到以镜像方向出现的物体。fliplr 超参数定义了应用此变换的概率,fliplr=1.0 表示所有图像都会被翻转,fliplr=0.0 则完全禁用此变换。例如,当 fliplr=0.5 时,每张图像有 50% 的概率被左右翻转。
  • 目的: 水平翻转广泛用于目标检测、姿态估计和人脸识别,以提高对左右变化的鲁棒性。例如,在自动驾驶中,车辆和行人可能出现在道路的两侧,水平翻转有助于模型在两种方向下都能同样好地识别它们。
  • Ultralytics 实现: RandomFlip
fliplr 关闭fliplr 开启
Original image without augmentationHorizontal flip augmentation enabled

BGR 通道交换 (bgr)

  • 范围0.0 - 1.0
  • 默认值0
  • 用法: 将图像的颜色通道从 RGB 交换为 BGR,改变颜色的表示顺序。bgr 超参数定义了应用此变换的概率,bgr=1.0 表示所有图像都会进行通道交换,bgr=0.0 则禁用它。例如,当 bgr=0.5 时,每张图像有 50% 的概率从 RGB 转换为 BGR。
  • 目的: 提高对不同颜色通道顺序的鲁棒性。例如,在训练必须在不同摄像系统和成像库(RGB 和 BGR 格式可能使用不一致)之间工作的模型时,或者在将模型部署到输入颜色格式可能与训练数据不同的环境时非常有用。
  • Ultralytics 实现: Format
bgr 关闭bgr 开启
Original image without augmentationBGR channel swap augmentation

马赛克增强 (mosaic)

  • 范围0.0 - 1.0
  • 默认: 1
  • 用法: 将四张训练图像合并为一张。mosaic 超参数定义了应用此变换的概率,mosaic=1.0 表示所有图像都会被合并,mosaic=0.0 则禁用此变换。例如,当 mosaic=0.5 时,每张图像有 50% 的概率与另外三张图像合并。
  • 目的: 对于改善小目标检测和上下文理解非常有效。例如,在野生动物保护项目中,动物可能以不同的距离和比例出现,马赛克增强通过从有限数据中人工创建多样化的训练样本,帮助模型学习在不同的尺寸、局部遮挡和环境背景下识别同一物种。
  • Ultralytics 实现: Mosaic
  • 注意
    • 即使 mosaic 增强使模型更稳健,它也可能使训练过程更具挑战性。
    • The mosaic augmentation can be disabled near the end of training by setting close_mosaic to the number of epochs before completion when it should be turned off. For example, if epochs is set to 200 and close_mosaic is set to 20, the mosaic augmentation will be disabled after 180 epochs. If close_mosaic is set to 0, the mosaic augmentation will be enabled for the entire training process.
    • 生成的马赛克的中心由随机值确定,可以在图像内部,也可以在图像外部。
    • 当前的 mosaic 增强实现合并了从数据集中随机挑选的 4 张图像。如果数据集很小,同一张图像可能会在同一个马赛克中被多次使用。
mosaic 关闭mosaic 开启
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)

  • 范围0.0 - 1.0
  • 默认值0
  • 用法: 以给定的概率混合两张图像及其标签。mixup 超参数定义了应用此变换的概率,mixup=1.0 表示所有图像都会被混合,mixup=0.0 则禁用此变换。例如,当 mixup=0.5 时,每张图像有 50% 的概率与另一张图像混合。
  • 目的: 提高模型鲁棒性并减少过拟合。例如,在零售产品识别系统中,Mixup 通过混合不同产品的图像来帮助模型学习更稳健的特征,教导它即使在产品被部分遮挡或被拥挤货架上的其他产品遮挡时也能识别商品。
  • Ultralytics 实现: Mixup
  • 注意
    • mixup 比率是从 np.random.beta(32.0, 32.0) beta 分布中挑选的随机值,这意味着每张图像贡献约 50%,并带有微小的偏差。
第一张图像,mixup 关闭第二张图像,mixup 关闭mixup 开启
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

CutMix (cutmix)

  • 范围0.0 - 1.0
  • 默认值0
  • 用法: 以给定的概率从一张图像中剪切一个矩形区域并将其粘贴到另一张图像上。cutmix 超参数定义了应用此变换的概率,cutmix=1.0 表示所有图像都会进行此变换,cutmix=0.0 则完全禁用它。例如,当 cutmix=0.5 时,每张图像有 50% 的概率被替换上一块来自另一张图像的区域。
  • 目的: 通过创建逼真的遮挡场景同时保持局部特征完整性来提高模型性能。例如,在自动驾驶系统中,CutMix 有助于模型学习识别即使被其他物体部分遮挡的车辆或行人,从而提高在存在重叠物体的复杂现实环境中的检测准确率。
  • Ultralytics 实现: CutMix
  • 注意
    • 剪切区域的大小和位置是为每次应用随机确定的。
    • 与全局混合像素值的 Mixup 不同,cutmix 保持了剪切区域内的原始像素强度,从而保留了局部特征。
    • 只有当某个区域与任何现有边界框不重叠时,它才会被粘贴到目标图像中。此外,只有在粘贴区域内保留至少 0.1 (10%) 原始面积的边界框才会被保留。
    • 此最小边界框面积阈值无法通过当前实现更改,默认设置为 0.1
第一张图像,cutmix 关闭第二张图像,cutmix 关闭cutmix 开启
First image for CutMixSecond image for CutMixCutMix augmentation enabled

分割特定增强

复制-粘贴 (copy_paste)

  • 范围0.0 - 1.0
  • 默认值0
  • 用法: 仅适用于分割任务,此增强根据指定的概率在图像内或图像间复制物体,由 copy_paste_mode 控制。copy_paste 超参数定义了应用此变换的概率,copy_paste=1.0 表示所有图像都会被复制,copy_paste=0.0 则禁用此变换。例如,当 copy_paste=0.5 时,每张图像有 50% 的概率从另一张图像中复制物体。
  • 目的: 特别适用于实例分割任务和稀有目标类别。例如,在缺陷出现频率较低的工业缺陷检测中,复制-粘贴增强可以通过从一张图像复制缺陷到另一张图像来人工增加这些稀有缺陷的出现频率,从而帮助模型更好地学习这些代表性不足的情况,而无需额外的缺陷样本。
  • Ultralytics 实现: CopyPaste
  • 注意
    • 如下图所示,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 过程
Original image without augmentationCopy-paste augmentation enabledCopy-paste augmentation animated demo

复制-粘贴模式 (copy_paste_mode)

  • 选项: 'flip', 'mixup'
  • 默认: 'flip'
  • 用法: 确定用于 复制-粘贴 增强的方法。如果设置为 'flip',物体来自同一张图像,而 'mixup' 允许物体从不同的图像中复制。
  • 目的: 允许灵活地将复制的物体集成到目标图像中。
  • Ultralytics 实现: CopyPaste
  • 注意
    • 对于两种 copy_paste_mode,IoA 原则相同,但物体被复制的方式不同。
    • 根据图像尺寸,物体有时可能被部分或完全复制到画面外。
    • 根据多边形标注的质量,复制的物体与原始物体相比可能存在细微的形状差异。
参考图像选择用于 copy_paste 的图像copy_paste 开启(模式为 copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

分类特定增强

自动增强 (auto_augment)

  • 选项: 'randaugment', 'autoaugment', 'augmix', None
  • 默认值: 'randaugment'
  • 用法: 应用于分类的自动增强策略。'randaugment' 选项使用 RandAugment,'autoaugment' 使用 AutoAugment,而 'augmix' 使用 AugMix。设置为 None 将禁用自动增强。
  • 目的: 针对分类任务自动优化增强策略。它们之间的区别如下:
    • AutoAugment: 此模式应用从 ImageNet、CIFAR10 和 SVHN 等数据集学习到的预定义增强策略。用户可以选择这些现有策略,但不能在 Torchvision 中训练新的策略。要为特定数据集发现最优增强策略,需要使用外部库或自定义实现。请参考 AutoAugment 论文
    • RandAugment: 应用具有统一幅度的随机变换选择。此方法减少了对广泛搜索阶段的需求,使其在提高模型鲁棒性的同时具有更高的计算效率。请参考 RandAugment 论文
    • AugMix: AugMix 是一种数据增强方法,通过简单变换的随机组合创建多样的图像变体,从而增强模型的鲁棒性。请参考 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 增强带有 scaleratiovalue 超参数,这些参数在 当前实现 中无法更改。它们的默认值分别为 (0.02, 0.33)(0.3, 3.3)0,如 PyTorch 文档 中所述。
    • erasing 超参数的上限设置为 0.9,以避免将该变换应用于所有图像。
erasing 关闭erasing 开启(示例 1)erasing 开启(示例 2)erasing 开启(示例 3)
无增强的原始图像随机擦除示例 1随机擦除示例 2随机擦除示例 3

高级增强功能

自定义 Albumentations 变换 (augmentations)

  • 类型: Albumentations 变换的 list
  • 默认值: None
  • 用法: 允许你通过 Python API 提供自定义 Albumentations 变换以进行数据增强。此参数接受一个 Albumentations 变换对象列表,这些对象将在训练期间代替默认的 Albumentations 变换被应用。
  • 目的: 通过利用丰富的 Albumentations 变换库,提供对数据增强策略的精细控制。当你需要超出内置 YOLO 选项的专用增强(如高级颜色调整、噪声注入或领域特定变换)时,这特别有用。
  • Ultralytics 的实现: Albumentations
自定义 Albumentations 示例
import albumentations as A

from ultralytics import YOLO

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

# Define custom Albumentations transforms
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
    A.CLAHE(clip_limit=4.0, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

关键点:

  • 仅限 Python API:自定义 Albumentations 变换目前仅支持通过 Python API 使用。它们无法通过 CLI 或 YAML 配置文件进行指定。
  • 替换默认变换:当你通过 augmentations 参数提供自定义变换时,它们将完全替换默认的 Albumentations 变换。默认的 YOLO 增强(如 mosaichsv_hhsv_sdegrees 等)保持激活状态并被独立应用
  • 边界框兼容性:使用空间变换(改变图像几何形状的变换)时要小心。Ultralytics 会自动处理边界框调整,但某些复杂的变换可能需要额外的配置。
  • 丰富的库:Albumentations 提供了 70 多种不同的变换。请浏览 Albumentations 文档 以发现所有可用选项。
  • 性能考量:添加过多的增强或使用计算昂贵的变换会降低训练速度。从少量集合开始,并监控训练速度。

常见用例:

  • 医学影像:针对 X 射线或 MRI 图像增强,应用诸如弹性变形或网格失真等专用变换
  • 航空/卫星图像:使用针对俯视视角优化的变换
  • 低光照条件:应用噪声和亮度调整以模拟具有挑战性的光照
  • 工业检测:为质量控制应用添加类缺陷图案或纹理变化

兼容性说明:

  • 需要 Albumentations 版本 1.0.3 或更高
  • 兼容所有 YOLO 检测和分割任务
  • 不适用于分类任务(分类使用不同的增强流水线)

有关 Albumentations 和可用变换的更多信息,请访问 Albumentations 官方文档

常见问题 (FAQ)

增强选项太多了。我该如何选择?

选择合适的增强取决于你的具体用例和数据集。以下是一些帮助你决定的通用准则:

  • 在大多数情况下,颜色和亮度的细微变化是有益的。hsv_hhsv_shsv_v 的默认值是一个坚实的起点。
  • 如果摄像头的视角是一致的且在模型部署后不会改变,你很可能可以跳过诸如 rotationtranslationscaleshearperspective 等几何变换。但是,如果摄像头角度可能会变化,且你需要模型更具鲁棒性,那么保留这些增强会更好。
  • 仅在部分遮挡物体或每张图像有多个物体是可以接受的,且不改变标签值的情况下使用 mosaic 增强。或者,你可以保持 mosaic 激活,但增加 close_mosaic 值以在训练过程的更早阶段将其禁用。

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

开始训练时,我看到 albumentations: Blur[...] 的引用。这是否意味着 Ultralytics YOLO 运行了像模糊这样的额外增强?

如果安装了 albumentations 软件包,Ultralytics 会自动使用它应用一组额外的图像增强。这些增强在内部处理,无需额外配置。

你可以在我们的 技术文档 以及我们的 Albumentations 集成指南 中找到应用变换的完整列表。请注意,只有概率 p 大于 0 的增强才是活跃的。它们被刻意以低频率应用,以模拟现实世界中的视觉伪影,例如模糊或灰度效果。

你也可以通过 Python API 提供你自己的自定义 Albumentations 变换。有关详细信息,请参阅 高级增强功能 部分。

开始训练时,我没有看到任何关于 albumentations 的引用。为什么?

检查是否安装了 albumentations 软件包。如果没有,你可以通过运行 pip install albumentations 来安装它。安装后,该软件包应被 Ultralytics 自动检测并使用。

我该如何自定义我的增强?

你可以通过创建自定义数据集类和训练器来自定义增强。例如,你可以用 PyTorch 的 torchvision.transforms.Resize 或其他变换来替换默认的 Ultralytics 分类增强。有关实现细节,请参阅分类文档中的 自定义训练示例

评论