Meet YOLO26: next-gen vision AI.

Link to this section使用 Ultralytics YOLO 进行数据增强#

YOLO data augmentation examples showing original and augmented images for training

Link to this section简介#

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



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

Link to this section为什么数据增强很重要#

数据增强在训练计算机视觉模型时发挥着多种关键作用:

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

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

Link to this section配置示例#

你可以使用 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)

Link to this section使用配置文件#

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")

Link to this section颜色空间增强#

Link to this section色调调整 (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 增强

Link to this section饱和度调整 (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 鲜艳增强

Link to this section亮度调整 (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 亮度增强

Link to this section几何变换#

Link to this section旋转 (degrees)#

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

Link to this section平移 (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 偏移增强

Link to this section缩放 (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.5 倍缩小增强缩放 0.75 倍缩小增强无增强的原始图像缩放 1.25 倍放大增强缩放 1.5 倍放大增强

Link to this section剪切 (shear)#

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

Link to this section透视 (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

Link to this section上下翻转 (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

Link to this section左右翻转 (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

Link to this sectionBGR 通道交换 (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

Link to this section马赛克 (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

Link to this sectionMixup (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

Link to this sectionCutMix (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

Link to this section分割专用增强#

Link to this section复制粘贴 (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

Link to this section复制粘贴模式 (copy_paste_mode)#

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

Link to this section分类专用增强#

Link to this section自动增强 (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()
  • 注意
    • 本质上,这三种方法的主要区别在于定义和应用增强策略的方式。
    • 你可以参考这篇文章,其中详细对比了这三种方法。

Link to this section随机擦除 (erasing)#

  • 范围: 0.0 - 0.9
  • 默认值0.4
  • 用法: 在分类训练期间随机擦除图像的部分内容。erasing 超参数定义了应用该变换的概率,其中 erasing=0.9 确保几乎所有图像都被擦除,而 erasing=0.0 则禁用该变换。例如,当 erasing=0.5 时,每张图像都有 50% 的概率被擦除一部分。
  • 目的: 帮助模型学习稳健的特征,防止对特定图像区域的过度依赖。例如,在人脸识别系统中,随机擦除有助于模型对诸如太阳镜、口罩或其他可能部分遮挡面部特征的物体变得更加稳健。这迫使模型利用多个面部特征来识别人,而不是仅仅依赖可能被遮挡的独特特征,从而提高了在现实世界中的表现。
  • Ultralytics 的实现: classify_augmentations()
  • 注意
    • The erasing augmentation comes with a scale, ratio, and value hyperparameters that cannot be changed with the current implementation. Their default values are (0.02, 0.33), (0.3, 3.3), and 0, respectively, as stated in the PyTorch documentation.
    • erasing 超参数的上限设置为 0.9,以避免将变换应用到所有图像。
erasing 关闭erasing 开启(示例 1)erasing 开启(示例 2)erasing 开启(示例 3)
原始图像(无增强)随机擦除示例 1随机擦除示例 2随机擦除示例 3

Link to this section高级增强功能#

Link to this section自定义 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 文档

Link to this section常见问题解答#

Link to this section有太多的增强方法可供选择,我该如何知道使用哪种?#

选择正确的增强方法取决于你的具体用例和数据集。以下是一些帮助你决定的通用指南:

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

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

Link to this section开始训练时,我看到了 albumentations: Blur[...] 的引用。这是否意味着 Ultralytics YOLO 运行了额外的增强(如模糊)?#

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

你可以在我们的 技术文档 以及我们的 Albumentations 集成指南 中找到已应用变换的完整列表。请注意,只有概率 p 大于 0 的增强才会处于活跃状态。这些增强是为了模仿真实世界的视觉伪影(如模糊或灰度效果)而特意低频率应用。

你也可以使用 Python API 提供你自己的自定义 Albumentations 变换。更多详情,请参见 高级增强功能 部分。

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

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

Link to this section我该如何自定义我的增强功能?#

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

评论