使用 Ultralytics YOLO 进行数据增强#
简介#
数据增强 是计算机视觉中的一项关键技术,它通过对现有图像应用各种变换来人为扩充训练数据集。在训练 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="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Training with every configurable augmentation disabled (disabled values omitted for clarity)
model.train(
data="coco8.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="coco8.yaml", epochs=100, augmentations=custom_transforms)本页列出的变换是你可以通过训练参数控制的变换。只要安装了 albumentations 软件包,Ultralytics 还会应用一小组 Albumentations 变换——模糊、中值模糊、灰度化和 CLAHE,每种变换的概率均为 p=0.01——并且 default.yaml 中没有任何参数可以将其关闭。卸载该软件包即可移除这些变换,或者将你自己的列表传递给 augmentations 来替换它。
使用配置文件#
你可以在 YAML 配置文件(例如 train_custom.yaml)中定义所有训练参数,包括数据增强参数。只有使用 CLI 时才需要 mode 参数。随后,这个新的 YAML 文件将覆盖位于 ultralytics 软件包中的默认配置文件。
# 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_h和hsv_h之间随机选择。例如,使用hsv_h=0.3时,偏移量会在-0.3到0.3之间随机选择。当值超过0.5时,色调偏移会绕色轮循环,这就是为什么0.5和-0.5之间的增强效果看起来相同。 - 用途:特别适用于光照条件会显著影响对象外观的室外场景。例如,香蕉在明亮的阳光下可能看起来更黄,而在室内则可能偏绿。
- Ultralytics 的实现:RandomHSV
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
饱和度调整(hsv_s)#
- 范围:
0.0-1.0 - 默认值:
0.7 - 用法:改变图像中颜色的强度。
hsv_s超参数定义偏移幅度,最终调整值会在-hsv_s和hsv_s之间随机选择。例如,使用hsv_s=0.7时,强度会在-0.7到0.7之间随机选择。 - 用途:帮助模型应对不同的天气条件和相机设置。例如,红色交通标志在晴天可能看起来非常鲜艳,但在雾天则可能显得暗淡褪色。
- Ultralytics 的实现:RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
亮度调整(hsv_v)#
- 范围:
0.0-1.0 - 默认值:
0.4 - 用法:改变图像亮度。
hsv_v超参数定义偏移幅度,最终调整值会在-hsv_v和hsv_v之间随机选择。例如,使用hsv_v=0.4时,强度会在-0.4到0.4之间随机选择。 - 用途:对于需要在不同光照条件下运行的模型训练而言至关重要。例如,红苹果在阳光下可能看起来很亮,但在阴影中则会暗得多。
- Ultralytics 的实现:RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
几何变换#
旋转(degrees)#
- 范围:
0.0到180 - 默认值:
0 - 用法:在指定范围内随机旋转图像。
degrees超参数定义旋转角度,最终调整值会在-degrees和degrees之间随机选择。例如,使用degrees=10.0时,旋转角度会在-10.0到10.0之间随机选择。 - 用途:对于对象可能以不同方向出现的应用至关重要。例如,在空中无人机图像中,车辆可能朝向任意方向,因此模型需要无论对象如何旋转都能识别它们。
- Ultralytics 的实现:RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
平移(translate)#
- 范围:
0.0-1.0 - 默认值:
0.1 - 用法:按照图像尺寸的随机比例水平和垂直移动图像。
translate超参数定义偏移幅度,最终调整值会在-translate和translate范围内随机选择两次(每个轴一次)。例如,使用translate=0.5时,x 轴上的平移量会在-0.5到0.5之间随机选择,y 轴上也会在同一范围内独立随机选择另一个值。 - 用途:帮助模型学习检测部分可见的对象,并提高其对对象位置变化的鲁棒性。例如,在车辆损伤评估应用中,汽车部件可能根据摄影者的位置和距离而完整或部分出现在画面中;平移增强会教会模型无论这些特征是否完整、处于何处,都能识别它们。
- Ultralytics 的实现:RandomPerspective
- 注意:为简便起见,下面应用的平移在每次对
x和y轴进行处理时都相同。未显示-1.0和1.0的值,因为它们会将图像完全移出画面。
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
缩放(scale)#
- 范围:作为浮点数时为
0.0-1.0,或者使用显式的(min, max)元组 - 默认值:
0.5 - 用法:在指定范围内按随机因子调整图像大小。使用浮点数时,
scale超参数定义缩放增益,最终因子会在1-scale和1+scale之间随机选择。例如,使用scale=0.5时,缩放因子会在0.5到1.5之间随机选择。使用元组时,scale会直接设置该范围,因此scale=(0.5, 2.0)会在0.5和2.0之间采样缩放因子。 - 用途:使模型能够处理不同距离和大小的对象。例如,在自动驾驶应用中,车辆可能与相机相距不同距离,因此模型需要无论车辆大小如何都能识别它们。
- Ultralytics 的实现:RandomPerspective
- 注意:
- 未显示
-1.0的值,因为它会使图像消失,而1.0只会产生 2 倍缩放。 - 下表中显示的值是实际产生的缩放增量,而不是你传递给
scale超参数的值。 - 浮点数形式的取值范围经过验证,必须处于
0.0-1.0范围内,超出该范围的值会引发ValueError。若要采样超过 2 倍缩放的因子,请改用(min, max)元组形式。 - 元组形式仅适用于几何任务。分类训练会根据浮点数(
1.0 - scale到1.0)推导自己的裁剪范围,因此在分类训练中传递元组会引发TypeError。
- 未显示
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
剪切(shear)#
- 范围:
-180到+180 - 默认值:
0 - 用法:引入一种沿 x 轴和 y 轴倾斜图像的几何变换,在保持平行线的同时,实质上将图像的各个部分向一个方向移动。
shear超参数定义剪切角度,最终调整值会在-shear和shear之间随机选择。例如,使用shear=10.0时,x 轴上的剪切量会在-10到10之间随机选择,y 轴上也会在同一范围内独立随机选择另一个值。 - 用途:帮助模型泛化到由轻微倾斜或倾斜视角造成的观察角度变化。例如,在交通监控中,由于相机未垂直放置,汽车和道路标志等对象可能呈倾斜状态。应用剪切增强可确保模型即使面对这类倾斜变形,也能学会识别对象。
- Ultralytics 的实现:RandomPerspective
- 注意:
shear值可能会迅速使图像变形,因此建议从较小的值开始并逐步增大。- 与透视变换不同,剪切不会引入深度或消失点,而是通过改变对象的角度来使其形状发生变形,同时保持相对两边平行。
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
透视(perspective)#
- 范围:
0.0-0.001 - 默认值:
0 - 用法:沿 x 轴和 y 轴应用完整的透视变换,模拟从不同深度或角度观察对象时的外观。
perspective超参数定义透视幅度,最终调整值会在-perspective和perspective之间随机选择。例如,使用perspective=0.001时,x 轴上的透视量会在-0.001到0.001之间随机选择,y 轴上也会在同一范围内独立随机选择另一个值。 - 用途:透视增强对于应对极端视角变化至关重要,尤其适用于对象因透视变化而出现缩短或变形的场景。例如,在基于无人机的对象检测中,建筑物、道路和车辆可能根据无人机的倾斜角度和高度而显得拉伸或压缩。通过应用透视变换,模型能够学会识别受到透视影响而变形的对象,从而提高其在实际部署中的鲁棒性。
- Ultralytics 的实现:RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
上下翻转(flipud)#
- 范围:
0.0-1.0 - 默认值:
0 - 用法:沿 y 轴反转图像来执行垂直翻转。该变换会将整幅图像上下颠倒,同时保留对象之间的所有空间关系。flipud 超参数定义应用变换的概率,值为
flipud=1.0时会确保所有图像都被翻转,值为flipud=0.0时则完全禁用该变换。例如,使用flipud=0.5时,每幅图像都有 50% 的概率被上下翻转。 - 用途:适用于对象可能上下颠倒出现的场景。例如,在机器人视觉系统中,传送带或机械臂上的对象可能被以各种方向拾取和放置。垂直翻转有助于模型无论对象上下位置如何都能识别它们。
- Ultralytics 的实现:RandomFlip
flipud 关闭 | flipud 开启 |
|---|---|
![]() | ![]() |
左右翻转(fliplr)#
- 范围:
0.0-1.0 - 默认值:
0.5 - 用法:沿 x 轴镜像图像来执行水平翻转。该变换会交换左右两侧,同时保持空间一致性,帮助模型泛化到以镜像方向出现的对象。
fliplr超参数定义应用变换的概率,值为fliplr=1.0时会确保所有图像都被翻转,值为fliplr=0.0时则完全禁用该变换。例如,使用fliplr=0.5时,每幅图像都有 50% 的概率从左向右翻转。 - 用途:水平翻转广泛用于对象检测、姿态估计和人脸识别,以提高模型对左右变化的鲁棒性。例如,在自动驾驶中,车辆和行人可能出现在道路任意一侧,水平翻转有助于模型在两种方向下同样准确地识别它们。
- Ultralytics 的实现:RandomFlip
fliplr 关闭 | fliplr 开启 |
|---|---|
![]() | ![]() |
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 开启 |
|---|---|
![]() | ![]() |
Mosaic(mosaic)#
- 范围:
0.0-1.0 - 默认值:
1 - 用法:将四幅训练图像合并为一幅。
mosaic超参数定义应用变换的概率,mosaic=1.0会确保所有图像都被合并,而mosaic=0.0会禁用该变换。例如,使用mosaic=0.5时,每幅图像都有 50% 的概率与另外三幅图像合并。 - 用途:对于改善小对象检测和上下文理解非常有效。例如,在动物可能以各种距离和尺度出现的野生动物保护项目中,Mosaic 增强通过从有限数据中人为创建多样化训练样本,帮助模型学习在不同大小、部分遮挡和环境背景下识别同一物种。
- Ultralytics 的实现:Mosaic
- 注意:
- 即使
mosaic增强能提高模型的鲁棒性,也可能使训练过程更具挑战性。 - 通过将
close_mosaic设置为训练完成前应关闭增强的 epoch 数,可以在训练接近结束时禁用mosaic增强。例如,如果将epochs设置为200,并将close_mosaic设置为20,则mosaic增强会在180个 epoch 后被禁用。如果将close_mosaic设置为0,则mosaic增强会在整个训练过程中启用。 - 关闭 Mosaic 也会在同一个 epoch 禁用
copy_paste、mixup和cutmix。这四种增强会同时关闭,因此最后几个 epoch 的训练不会使用它们,而其他所有增强——几何变换、HSV、翻转和 Albumentations——仍会继续运行。请注意,copy_paste在默认的flip模式下作用于单幅图像,而不是合并多幅图像。 - 生成的 Mosaic 中心位置由随机值确定,既可能位于图像内部,也可能位于图像外部。
- 当前
mosaic增强的实现会将当前图像与另外 3 幅图像合并,这些图像来自最近加载图像的缓冲区,或者在cache='ram'时来自数据集中的任意位置。无论哪种情况,图像都是有放回采样的,因此同一幅图像可能在单个 Mosaic 中出现多次。
- 即使
mosaic 关闭 | mosaic 开启 |
|---|---|
![]() | ![]() |
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 开启 |
|---|---|---|
![]() | ![]() | ![]() |
CutMix(cutmix)#
- 范围:
0.0-1.0 - 默认值:
0 - 用法:以给定概率从一幅图像中裁剪矩形区域,并将其粘贴到另一幅图像上。
cutmix超参数定义应用变换的概率,cutmix=1.0会确保所有图像都执行该变换,而cutmix=0.0会完全禁用它。例如,使用cutmix=0.5时,每幅图像都有 50% 的概率将某个区域替换为另一幅图像中的图像块。 - 用途:在保持局部特征完整性的同时创建真实的遮挡场景,从而提升模型性能。例如,在自动驾驶系统中,CutMix 帮助模型学习识别被其他对象部分遮挡的车辆或行人,从而提高其在对象相互重叠的复杂真实环境中的检测准确率。
- Ultralytics 的实现:CutMix
- 注意:
- 每次应用时,裁剪区域的大小和位置都会随机确定。
- 与在全局范围内混合像素值的 Mixup 不同,
cutmix会保留裁剪区域内的原始像素强度,从而保留局部特征。 - 只有当粘贴区域不与任何现有 BBox 重叠时,该区域才会被粘贴到目标图像中。此外,只有在粘贴区域内保留了足够原始面积的 BBox 才会被保留。
- 当前实现无法更改此最小 BBox 面积阈值。对于检测标签,该阈值为
0.1(10%);当标签包含分段时,该阈值为0.01(1%)。
第一幅图像,cutmix 关闭 | 第二幅图像,cutmix 关闭 | cutmix 开启 |
|---|---|---|
![]() | ![]() | ![]() |
Copy-Paste 增强#
Copy-Paste(copy_paste)#
- 范围:
0.0-1.0 - 默认值:
0 - 用法:需要多边形标签,因此适用于分段和 OBB 任务;该增强会在图像内部或图像之间复制对象,并由
copy_paste_mode控制。在flip模式下,copy_paste表示要复制的符合条件对象的比例:包含 6 个符合条件对象的图像在copy_paste=0.5时会增加 3 个副本。在mixup模式下,同一值还控制运行 Copy-Paste 的概率。copy_paste=0.0会禁用该变换。 - 用途:特别适用于实例分割任务和稀有对象类别。例如,在某些缺陷类型出现频率较低的工业缺陷检测中,Copy-Paste 增强可以通过将这些稀有缺陷从一幅图像复制到另一幅图像,人为增加它们的出现频率,帮助模型更好地学习这些代表性不足的案例,而无需额外收集有缺陷的样本。
- Ultralytics 的实现:CopyPaste
- 注意:
- 如下方视频所示,
copy_paste增强可用于将对象从一张图像复制到另一张图像。 - 选择要复制的对象后,系统会将其 IoA 与目标图像中已存在的所有对象进行计算,而不考虑
copy_paste_mode。仅当所有 IoA 值都低于0.3(30%)时,才会粘贴该对象;如果任何 IoA 值为0.3或更高,则不会粘贴该对象。 - 使用当前实现无法更改 IoA 阈值,默认设置为
0.3。
- 如下方视频所示,
copy_paste 关闭 | 启用 copy_paste,设置为 copy_paste_mode=flip | 可视化 copy_paste 过程 |
|---|---|---|
![]() | ![]() |
复制-粘贴模式(copy_paste_mode)#
- 选项:
'flip'、'mixup' - 默认值:
'flip' - 用法:确定用于复制-粘贴增强的方法。设置为
'flip'时,对象来自同一张图像;而'mixup'允许从不同图像复制对象。 - 用途:灵活控制复制对象整合到目标图像中的方式。
- Ultralytics 的实现:CopyPaste
- 注意:
- 两种
copy_paste_mode选项使用相同的 IoA 原理,但复制对象的方式不同。 - 根据图像大小的不同,对象有时可能只被部分复制,或完全位于画面之外。
- 根据多边形标注的质量,复制的对象与原对象相比可能存在轻微的形状差异。
- 两种
| 参考图像 | 为 copy_paste 选择的图像 | 启用 copy_paste,设置为 copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
分类专用增强#
自动增强(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-1.0 - 默认值:
0.4 - 用法:在分类训练期间随机擦除图像的部分区域。
erasing超参数定义应用该变换的概率,其中erasing=1.0会擦除每张图像中的一个区域,而erasing=0.0会禁用该变换。例如,设置为erasing=0.5时,每张图像都有 50% 的概率被擦除部分区域。 - 用途:帮助模型学习稳健特征,并防止其过度依赖特定图像区域。例如,在人脸识别系统中,随机擦除可帮助模型更好地应对太阳镜、口罩或其他可能部分遮挡面部特征的物体。这会迫使模型利用多种面部特征来识别个体,而不是完全依赖可能被遮挡的显著特征,从而提升真实场景中的性能。
- Ultralytics 的实现:classify_augmentations()
- 注意:
erasing 关闭 | 启用 erasing(示例 1) | 启用 erasing(示例 2) | 启用 erasing(示例 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
高级增强功能#
自定义 Albumentations 变换(augmentations)#
- 类型:Albumentations 变换的
list - 默认值:
None - 用法:允许你通过 Python API 提供自定义的 Albumentations 变换用于数据增强。此参数接受一个 Albumentations 变换对象列表,训练期间将应用这些变换,而不是默认的 Albumentations 变换。
- 用途:利用 Albumentations 丰富的变换库,对数据增强策略进行精细控制。当你需要超出内置 YOLO 选项的专用增强时,这一功能尤其有用,例如用于医学成像的弹性变形和网格畸变、针对俯视空中和卫星视角调优的变换、模拟低光照条件的噪声和亮度变化,或用于工业检测的缺陷类纹理变化。
- Ultralytics 的实现:Albumentations
- 注意:
- 构建变换对象需要使用 Python API。保存检查点时,Ultralytics 会通过
A.to_dict()将它们序列化,因此已序列化的列表可以经由 YAML 配置文件或 CLI 完成往返处理,这使得resume能够恢复这些对象。 - 自定义变换会完全替代默认的 Albumentations 集合。在此页面其他位置配置的每项增强——
mosaic、hsv_h、degrees以及其他增强——仍会保持启用并独立应用。 - 改变图像几何形状的空间变换(包括嵌套在
A.OneOf或A.Compose中的空间变换)会将边界框、多边形、关键点以及深度或语义掩码与图像一起移动;A.RandomGridShuffle无法保留多边形或关键点拓扑结构,并且会在遇到分割、姿态和 OBB 样本时引发异常。 - Albumentations 提供了 70 多种变换;Albumentations 文档列出了全部变换。添加大量变换或计算成本高的变换会减慢训练,因此请从少量变换开始,并关注每个 epoch 的耗时。
- 适用于
detect、segment、semantic、depth、pose和obb任务。分类任务不适用,因为它使用独立的增强流程。
- 构建变换对象需要使用 Python API。保存检查点时,Ultralytics 会通过
以下示例需要 Albumentations 1.4.22 或更高版本,因此也需要 Python 3.9 或更高版本。
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(std_range=(0.0124, 0.0277), 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,
)常见问题#
选择合适的增强取决于你的具体用例和数据集。以下是一些帮助你做出决定的一般指南:
- 在大多数情况下,颜色和亮度的轻微变化都很有益。
hsv_h、hsv_s和hsv_v的默认值是一个稳妥的起点。 - 如果相机视角保持一致,并且模型部署后不会发生变化,你可能可以跳过
rotation、translation、scale、shear或perspective等几何变换。不过,如果相机角度可能变化,并且你需要模型具备更强的鲁棒性,最好保留这些增强。 - 仅当图像中存在部分遮挡的对象或多个对象是可接受的,并且不会改变标签值时,才使用
mosaic增强。或者,你可以保持mosaic处于启用状态,但增大close_mosaic的值,使其在训练过程中更早禁用。
简而言之:保持简单。从少量增强开始,并根据需要逐步添加更多增强。目标是提升模型的泛化能力和鲁棒性,而不是让训练过程变得过于复杂。此外,请确保所应用的增强反映了模型在生产环境中将遇到的相同数据分布。
- 在大多数情况下,颜色和亮度的轻微变化都很有益。
如果安装了
albumentations软件包,Ultralytics 会自动使用它应用一组额外的图像增强。这些增强由内部处理,无需额外配置。你可以在我们的技术文档以及 Albumentations 集成指南中找到所应用变换的完整列表。请注意,只有概率
p大于0的增强处于启用状态。这些增强经过特意设置,以较低频率应用,从而模拟模糊或灰度效果等真实世界的视觉伪影。你也可以使用 Python API 提供自己的自定义 Albumentations 变换。有关更多详细信息,请参阅高级增强功能部分。
检查是否安装了
albumentations软件包。如果没有,请安装:pip install albumentations安装后,Ultralytics 应会自动检测并使用该软件包。
你可以通过创建自定义数据集类和训练器来自定义增强。例如,你可以使用 PyTorch 的 torchvision.transforms.Resize 或其他变换替换默认的 Ultralytics 分类增强。有关实现细节,请参阅分类文档中的自定义训练示例。













































