Appearance
数据增强
图像增强(图像增广)是在训练图像上做一系列随机变化,生成相似但不同的训练样本,从而扩大训练集的规模。
图像增强目的:
- 减少模型对某些属性的依赖,
提高模型的泛化能力,比如让模型不那么依赖物体的位置、颜色这些属性。 - 解决数据集不够大的问题,让模型能学到更多的特征,
避免过拟合。
下面介绍一些常用的图像增强技术:
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
)