Skip to content

数据增强

图像增强(图像增广)是在训练图像上做一系列随机变化,生成相似但不同的训练样本,从而扩大训练集的规模。

图像增强目的:

  1. 减少模型对某些属性的依赖,提高模型的泛化能力,比如让模型不那么依赖物体的位置、颜色这些属性。
  2. 解决数据集不够大的问题,让模型能学到更多的特征,避免过拟合

下面介绍一些常用的图像增强技术:

1.Mosaic 增强(YOLO 核心神器)

mosaic
[ moʊˈzeɪɪk ]
n. 马赛克
  • 原理 把 4 张图拼成 1 张图,模型一次性学习 4 个场景的目标。
  • 优点
    • 增加小目标 / 中目标检测能力
    • 提升背景复杂度,模型更鲁棒
    • 增大有效 batch size
  • 效果 模型能学到:不同位置、不同尺度、不同遮挡下的目标。
  • 适用:YOLO 全系标配。

YOLO代码

Mosaic 是 YOLO 标配,默认开启

yaml
mosaic: 1.0  # 1.0=开启  0.0=关闭

2.MixUp 增强

mix
[ mɪks ]
v. 混合
  • 原理
    • 两张图按比例融合:
    • 标签也会一起融合。
  • 优点
    • 增强泛化能力
    • 减少过拟合
    • 让模型对噪声更不敏感
  • 特点
    • 比 Mosaic 更 “柔和”,不会产生硬边缘。

YOLO代码

MixUp 默认关闭,需要手动开启

yaml
mixup: 0.1  # 0.1~0.5 之间,越大越强

写 0.1 就是 10% 概率使用 MixUp,最稳。

3.CutOut / CutMix 增强

Cut
[ kʌt ]
v. 剪切

CutOut(简单直接)

  • 原理
    • 随机在图上盖一个黑色矩形 / 灰色矩形
    • 强迫模型不依赖局部纹理,学习全局特征。

CutMix(更高级)

  • 原理
    • 把一张图的一块区域剪下来贴到另一张图
    • 标签也跟着迁移
    • 比 CutOut 效果更好,信息损失更少

优点

  • 防过拟合
  • 提升遮挡场景鲁棒性

YOLO代码

YOLO 里叫 copy_paste 或 erase, 两个开一个就行,erase = 纯 CutOut。

yaml
copy_paste: 0.2  # 0.1~0.3 推荐
erase: 0.2       # 随机遮罩块,CutOut 等价效果

4.模拟光学成像增强(最贴近真实场景)

包括以下工业级增强:

  • 随机亮度 / 对比度
  • 随机饱和度 / 色相
  • 高斯模糊 / 运动模糊(模拟摄像头抖动)
  • 高斯噪声 / 椒盐噪声(模拟低光画质)
  • 直方图均衡化
  • 雾、雨、低光模拟(非常实用)

优点

  • 让模型适应不同摄像头、不同光线、不同天气 实际部署精度提升最明显

YOLO代码

开启光学成像增强(亮度、模糊、噪声、色调)

全部在 hyp 文件里,默认就是开启的,只需要调节强度:

yaml
# 光学增强(全部属于“模拟真实成像”)
hsv_h: 0.015  # 色调
hsv_s: 0.7    # 饱和度
hsv_v: 0.4    # 亮度
degrees: 0.0  # 旋转
translate: 0.1 # 平移
scale: 0.5    # 缩放
shear: 0.0    # 剪切
perspective: 0.0
flipud: 0.0   # 上下翻转
fliplr: 0.5   # 左右翻转
mosaic: 1.0

额外开启:模糊、噪声、雨雪雾(YOLOv8+ 自带)

yaml
blur: 0.1      # 高斯模糊
noise: 0.1     # 噪声
weather: 0.1   # 雨/雪/雾/光影

5.最稳增强配置(直接复制覆盖 hyp 文件)

hyp 文件

‌(Hyperparameters file,超参数配置文件)是一个至关重要的 YAML 格式文件。它不定义网络结构,而是控制‌模型如何学习‌,包括优化器行为、数据增强强度、损失函数权重等。

hyp 文件的作用与位置

  • 作用‌:覆盖训练脚本中的默认超参数。通过修改此文件,你可以精细调整模型的收敛速度、泛化能力和最终精度,而无需修改代码。
  • 默认位置‌yolov8s.pt 相同目录下的 hyp.yaml 文件。
  • 自定义位置‌:你可以在训练脚本中指定自定义的 hyp 文件路径,例如:--hyp my_hyp.yaml
bash
python train.py --hyp my_hyp.yaml

或者,在配置文件中指定:

yaml
# train.yaml
path: ../  # dataset path
train: images/train  # train images (relative to 'path') 128 images
val: images/val  # val images (relative to 'path') 128 images

# 指定使用自定义的hyp文件
hyp: my_hyp.yaml

这是工业界最常用、不会崩、精度最高的组合:

yaml
mosaic: 1.0
mixup: 0.1
copy_paste: 0.15
erase: 0.2
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
fliplr: 0.5
scale: 0.5
translate: 0.1
blur: 0.1
noise: 0.05
weather: 0.05

或者 YOLOv8+ 一行代码开启所有增强

python
from ultralytics import YOLO

model = YOLO("yolov8s.pt")

model.train(
    data="coco128.yaml",
    epochs=100,
    # 开启全部增强
    mosaic=1.0,
    mixup=0.1,
    erase=0.2,
    blur=0.1,
    noise=0.05,
    weather=0.05
)

京ICP备2024093538号-1