一文掌握数据扩充方法
  • 1、引言
  • 2、数据扩充
  • 2.1 数据扩充的重要性
  • 2.2 色彩空间增强
  • 2.2.1 色调调整 (hsv_h)
  • 2.2.2 饱和度调整 (hsv_s)
  • 2.2.3 亮度调节 (hsv_v)
  • 2.3 几何变换
  • 2.3.1 旋转 (degrees)
  • 2.3.2 翻译 (translate)
  • 2.3.3 规模 (scale)
  • 2.3.4 剪切力 (shear)
  • 2.3.5 透视 (perspective)
  • 2.3.6 上下翻转 (flipud)
  • 2.3.7 左右翻转 (fliplr)
  • 2.3.8 BGR 通道交换 (bgr)
  • 2.3.9 马赛克 (mosaic)
  • 2.3.10 Mixup (mixup)
  • 2.3.11 CutMix (cutmix)
  • 2.4 特定于分段的增强功能
  • 2.4.1 复制粘贴 (copy_paste)
  • 2.4.2 复制粘贴模式 (copy_paste_mode)
  • 2.5 配置实例
  • 3、总结

1、引言

小屌丝:鱼哥,忙么?

小鱼:有事直说

小屌丝:下雨天,适合泡澡啊

小鱼:下雨天,不适合外出

小屌丝:也是哦,

小鱼:你这脑子咋想的?

小屌丝:我这不是这几天被一首歌洗脑了吗

小鱼:哦? 什么歌,分享一下

小屌丝:看图

【机器视觉】一文掌握数据扩充方法,确实很赞。_YOLO

小鱼:是豪哥哥啊

小屌丝:对啊, 就是那首《刚买的xx被打了》

小鱼:嗯呢,这个我还没听着,给我分享下, 我听听

小屌丝:嗯~ ~

小鱼:咋了, 不情愿啊?

小屌丝:也不能说不情愿,

小鱼:那是怎么了?

小屌丝:你也不去泡澡, 那肯定也不会去按脚和撸串了

小鱼:下雨天,没办法啊

小屌丝:那你给我讲一下数据扩充的方法

小鱼:… 好吧,但是你先把视频分享给我

小屌丝:你先讲完,我在分享,我怕你看完控制不住

小鱼:啥控制不住?你可得说清楚

小屌丝:控制不住的笑啊,你那笑点多低啊

小鱼:… 说的也有道理,那我先说

小屌丝:那可不

**小鱼:**那我用那个图片做原图呢?

小屌丝:就用豪哥哥的图片啊

小鱼:我们是文明人,我就用这张

小屌丝:还得是鱼哥啊。

【机器视觉】一文掌握数据扩充方法,确实很赞。_YOLO_02

2、数据扩充

2.1 数据扩充的重要性

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

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

2.2 色彩空间增强

2.2.1 色调调整 (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
2.2.2 饱和度调整 (hsv_s)
  • 范围: 0.0 - 1.0
  • 默认值: 0.7
  • 使用方法:修改图像中颜色的强度。颜色 hsv_h 超参数定义了偏移的幅度,最终的调整在以下两个参数之间随机选择 -hsv_s 和 hsv_s.例如 hsv_s=0.7,强度在-0.7 至 0.7.
  • 目的:帮助模型处理不同的天气条件和相机设置。例如,红色交通标志在晴天可能会显得非常鲜艳,但在雾天则会显得暗淡无光。
  • Ultralytics 的实现:RandomHSV

【机器视觉】一文掌握数据扩充方法,确实很赞。_YOLO_03

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

2.3 几何变换

2.3.1 旋转 (degrees)
  • 范围: 0.0 至 180
  • 默认值: 0.0
  • 使用方法:在指定范围内随机旋转图像。旋转 degrees 超参数定义了旋转角度,最终的调整在以下两个参数之间随机选择 -degrees 和 degrees.例如 degrees=10.0的范围内随机选择旋转-10.0 至 10.0.
  • 目的:对于物体可能以不同方向出现的应用至关重要。例如,在无人机航拍图像中,车辆可以朝任何方向移动,这就要求模型能够识别物体的旋转方向。
2.3.2 翻译 (translate)
  • 范围: 0.0 - 1.0
  • 默认值: 0.1
  • 使用方法:以图像大小的随机分数水平和垂直移动图像。图像 translate 超参数定义了偏移幅度,最终调整值在一定范围内随机选择两次(每个轴一次)。 -translate 和 translate.例如 translate=0.5的范围内随机选择译文。-0.5 至 0.5 在 x 轴上,在相同范围内选择另一个独立随机值在 y 轴上。
  • 目的:帮助模型学习检测部分可见的物体,并提高对物体位置的鲁棒性。例如,在车辆损坏评估应用中,根据摄影师的位置和距离,汽车零件可能完全或部分出现在画面中,平移增强功能将教会模型识别这些特征,而不管它们是否完整或在什么位置。
  • 备注:为简便起见,以下每次翻译都是相同的 x 和 y 轴。数值 -1.0 和 1.0不显示,因为它们会将图像完全移出画面。
2.3.3 规模 (scale)
  • 范围: ≥0.0
  • 默认值: 0.5
  • 使用方法:在指定范围内以随机因子调整图像大小。图像大小 scale 超参数定义了缩放因子,最终的调整幅度在 1-scale 和 1+scale.例如 scale=0.5的范围内随机选择缩放0.5 至 1.5.
  • 目的:使模型能够处理不同距离和大小的物体。例如,在自动驾驶应用中,车辆可能会出现在距离摄像头不同的距离,这就要求模型能够识别这些车辆,而不管其大小如何。
  • 备注:
  • 价值 -1.0 不显示,因为它会使图像消失,而 1.0 只需 2 倍变焦即可。
  • 下表中显示的数值是通过超参数 scale,而不是最终的比例系数。
  • 如果 scale 大于 1.0,图像可以非常小,也可以翻转,因为缩放因子是随机选择的。 1-scale 和 1+scale.例如 scale=3.0的范围内随机选择缩放-2.0 至 4.0.如果选择负值,图像将被翻转。
2.3.4 剪切力 (shear)
  • 范围: -180 至 +180
  • 默认值: 0.0
  • 使用方法:引入几何变换,使图像沿 x 轴和 y 轴倾斜,在保持平行线的同时,有效地将图像的一部分向一个方向移动。倾斜 shear 超参数定义剪切角,最终调整值在以下两个参数之间随机选择 -shear 和 shear.例如 shear=10.0,剪切力在-10 至 10 在 x 轴上,在相同范围内选择另一个独立随机值在 y 轴上。
  • 目的:帮助模型适应由轻微倾斜或斜视角造成的视角变化。例如,在交通监控中,由于摄像头位置不垂直,汽车和路标等物体可能会出现倾斜。应用剪切增强技术可确保模型在出现这种倾斜变形时仍能学会识别物体。
  • 备注:
  • shear 值会使图像迅速变形,因此建议从小数值开始,然后逐渐增大。
  • 与透视变换不同,剪切并不引入深度或消失点,而是通过改变物体的角度来扭曲物体的形状,同时保持对边平行。
2.3.5 透视 (perspective)
  • 范围: 0.0 - 0.001
  • 默认值: 0.0
  • 使用方法:沿 x 轴和 y 轴应用全透视变换,模拟从不同深度或角度观察物体时的效果。透视 perspective 超参数定义了透视量级,最终调整在以下两个参数之间随机选择 -perspective 和 perspective.例如 perspective=0.001,视角在-0.001 至 0.001 在 x 轴上,在相同范围内选择另一个独立随机值在 y 轴上。
  • 目的:视角增强对于处理极端视角变化至关重要,尤其是在物体因视角偏移而出现扭曲或变形的情况下。例如,在基于无人机的物体检测中,建筑物、道路和车辆会根据无人机的倾斜度和高度出现拉伸或压缩。通过应用透视变换,模型可以学会在这些由透视引起的扭曲中识别物体,从而提高其在真实世界部署中的鲁棒性。

【机器视觉】一文掌握数据扩充方法,确实很赞。_YOLO_04

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

【机器视觉】一文掌握数据扩充方法,确实很赞。_YOLO_05

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

【机器视觉】一文掌握数据扩充方法,确实很赞。_数据扩充_06

2.3.8 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 格式可能使用不一致的各种相机系统和成像库中工作,或者在部署模型的环境中,输入的色彩格式可能与训练数据不同。

【机器视觉】一文掌握数据扩充方法,确实很赞。_YOLO_07

2.3.9 马赛克 (mosaic)
  • 范围: 0.0 - 1.0
  • 默认值: 1.0
  • 使用方法:将四幅训练图像合成一幅。图像 mosaic 超参数定义了应用变换的概率,其中 mosaic=1.0 确保合并所有图像,并 mosaic=0.0 禁用转换。例如 mosaic=0.5, 每张图片有 50% 的几率与其他三张图片组合在一起。
  • 目的:对于改进小物体检测和上下文理解非常有效。例如,在野生动物保护项目中,动物可能会出现在不同的距离和尺度上,马赛克增强技术通过从有限的数据中人工创建不同的训练样本,帮助模型学会识别不同大小、部分遮挡和环境背景下的同一物种。

【机器视觉】一文掌握数据扩充方法,确实很赞。_目标检测_08

2.3.10 Mixup (mixup)
  • 范围: 0.0 - 1.0
  • 默认值: 0.0
  • 使用方法:以给定的概率混合两幅图像及其标签。图像 mixup 超参数定义了应用变换的概率,其中 mixup=1.0 确保所有图像的混合和 mixup=0.0 禁用转换。例如 mixup=0.5,每幅图像都有 50% 的几率与另一幅图像混合。
  • 目的:提高模型的鲁棒性,减少过拟合。例如,在零售产品识别系统中,混合图像可通过混合不同产品的图像帮助模型学习更强大的特征,使其学会识别拥挤货架上部分可见或被其他产品遮挡的产品。

【机器视觉】一文掌握数据扩充方法,确实很赞。_YOLO_09

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

【机器视觉】一文掌握数据扩充方法,确实很赞。_目标检测_10

2.4 特定于分段的增强功能

2.4.1 复制粘贴 (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% 的几率从另一幅图像中复制对象。
  • 目的:特别适用于实例分割任务和稀有对象类别。例如,在工业缺陷检测中,某些类型的缺陷并不经常出现,复制粘贴增强技术可以通过将这些缺陷从一幅图像复制到另一幅图像,人为地增加这些罕见缺陷的出现率,从而帮助模型更好地学习这些代表性不足的情况,而无需额外的缺陷样本。
2.4.2 复制粘贴模式 (copy_paste_mode)
  • 选项: ‘flip’, ‘mixup’
  • 默认值: ‘flip’
  • 使用方法:确定 复制粘贴 增强。如果设置为 ‘flip’,对象来自同一图像,而 ‘mixup’ 允许从不同图像中复制对象。
  • 目的:允许灵活地将复制对象整合到目标图像中。

【机器视觉】一文掌握数据扩充方法,确实很赞。_目标检测_11

2.5 配置实例

from ultralytics import YOLO


model = YOLO("yolo11n.pt")

model.train(data="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

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,
)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

3、总结

数据增强是计算机视觉领域的一项重要技术,它通过对现有图像进行各种转换,人为地扩展训练数据集。

在训练Ultralytics YOLO 等深度学习模型时,数据扩增有助于提高模型的鲁棒性,减少过拟合,并增强对真实世界场景的泛化。

我是小鱼

博客专家

  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)评测一等奖获得者