4、数据增强:Mosaic、MixUp、CutMix、HSV扰动、随机缩放,实战中的增强组合拳。

数据增强,说白了就是“无中生有”。

你想想看,标注一张图要花多少时间?尤其是做目标检测,框得手都酸了。但模型又是个“贪吃鬼”,数据越多它学得越好。那怎么办?只能靠增强,把一张图变出十张来。

我刚开始做YOLO训练时,总觉得增强是锦上添花。直到有一次,项目deadline压得紧,训练集只有两千张图,我硬着头皮跑了一版。结果模型在验证集上mAP只有0.35,各种漏检。后来我加了Mosaic和MixUp,同样的数据量,mAP直接跳到0.52。嗯,从那以后,我再也不敢小看数据增强这步了。

核心观点:数据增强不是“凑数”,而是让模型学会“不变性”——不管目标怎么变(颜色、大小、遮挡、位置),它都能认出来。

4.1 四大金刚:Mosaic、MixUp、CutMix

这三个是YOLO系列最常用的“混合式”增强。它们有个共同点:把多张图拼成一张图。好处很明显——一张图里能看到多个场景、多个尺度,模型见过的“世面”一下子就大了。

4.1.1 Mosaic

Mosaic是YOLOv4开始用的,后来成了标配。做法很简单:随机取4张图,拼成一张2×2的大图。

我个人习惯把Mosaic开启概率设在0.5~0.8之间。太高了,模型容易“看花眼”;太低了,效果不明显。

我的经验:Mosaic对小目标检测特别有效。因为拼图后,很多目标会被缩得很小,模型被迫去学习小目标的特征。我在做交通标志检测时,加了Mosaic后,小标志的召回率提升了12%。

4.1.2 MixUp

MixUp更“暴力”——直接把两张图按比例叠加。比如图A透明度0.7,图B透明度0.3,合成一张新图。标签也跟着混合:一张图里同时有“0.7的猫”和“0.3的狗”。

我第一次看到这个做法时觉得有点扯:哪有图是半猫半狗的?但后来发现,模型在这种“模糊”边界中反而学得更鲁棒,不容易过拟合。

4.1.3 CutMix

CutMix是MixUp的“改良版”。它不叠加像素,而是从图B里切一块矩形区域,贴到图A上。标签按面积比例混合。

举个例子:图A是一辆车,图B是一只鸟。CutMix把鸟的区域贴到车的引擎盖上。那这张图的标签就是“0.8的车 + 0.2的鸟”。

增强方法 混合方式 标签处理 适用场景
Mosaic 4张图拼成2×2 各图标签独立保留 小目标、多尺度
MixUp 像素叠加 按比例混合标签 防止过拟合
CutMix 区域粘贴 按面积比例混合 遮挡、局部特征

4.2 颜色与几何扰动

除了“拼图”,还有两类增强也很关键:颜色扰动和几何扰动。

4.2.1 HSV扰动

HSV扰动就是随机调整图像的色调(Hue)、饱和度(Saturation)和明度(Value)。

我一般这样设参数:

  • Hue:±0.015(别太大,否则颜色会失真)
  • Saturation:±0.5
  • Value:±0.4

为什么要调HSV?因为现实场景的光照变化太大了。同一个物体,白天和晚上拍出来颜色完全不一样。模型如果只见过“标准色”,换个光线它就认不出来了。

避坑指南:我曾经在一个工业质检项目里把Hue范围设到了±0.1,结果模型把红色零件和绿色零件搞混了。颜色扰动不是越大越好,要控制在“人眼还能分辨”的范围内。

4.2.2 随机缩放

随机缩放包括两种:

  • 随机裁剪缩放:从原图上随机裁一块,再缩放到固定尺寸。这相当于模拟了目标在不同距离下的样子。
  • 随机伸缩:把图拉宽或拉长,模拟视角变化。

我建议随机缩放的范围设在0.5~1.5之间。太小的缩放会让目标变得模糊,太大的缩放会让目标超出图像边界。

4.3 增强组合拳:怎么打才有效?

单独用某一种增强,效果有限。真正的“组合拳”是把多种增强串起来用。但顺序和概率很有讲究。

我常用的组合策略是这样的:

  1. 先做几何变换:随机缩放、随机裁剪、随机翻转。这些改变目标的位置和大小。
  2. 再做颜色变换:HSV扰动。模拟光照变化。
  3. 最后做混合增强:Mosaic或MixUp。这一步放在最后,因为混合增强会改变图像的“语义”,如果先做混合再做颜色,颜色扰动可能会破坏混合后的边界。

每个增强的概率我一般设在0.3~0.7之间。太低了等于没做,太高了模型学不到原始分布。

一个实用的配置参考(YOLOv8默认参数):

  • Mosaic:1.0(前10个epoch后降到0.0)
  • MixUp:0.1
  • HSV-Hue:0.015
  • HSV-Saturation:0.7
  • HSV-Value:0.4
  • 随机缩放:0.5

4.4 增强策略的“动态调整”

这里有个很多人忽略的点:增强策略不是一成不变的。

我习惯在训练的不同阶段调整增强强度:

  • 前10个epoch:增强拉满。让模型快速见过各种“奇形怪状”的样本。
  • 中间10个epoch:逐步降低Mosaic和MixUp的概率。让模型回归到“正常”的样本分布。
  • 最后5个epoch:关闭所有增强。只用原始数据做微调,让模型“收心”。

为什么这么做?因为前期模型啥都不懂,需要大量“刺激”来学习特征。后期模型已经学得差不多了,再用增强反而会干扰它“精雕细琢”。

小技巧:你可以用学习率调度器来联动增强强度。学习率大的时候增强也大,学习率小的时候增强也小。这样模型在“大步快跑”时多见识,在“小步慢走”时多专注。

4.5 数据增强的“副作用”与应对

增强不是万能的。用不好,反而会拖后腿。

我遇到过两个典型问题:

  • 增强过度导致标签错误:比如Mosaic拼图时,两个目标重叠了,标签框也跟着重叠。模型看到的是“一个框里有两个目标”,它不知道该学哪个。
  • 增强分布与真实场景偏差太大:比如做工业检测,产品都是固定角度拍的。你加了随机旋转90度,模型反而学歪了。

我的教训:有一次做车牌识别,我加了大量HSV扰动,把车牌颜色调得五花八门。结果模型在真实场景下,把蓝色车牌和绿色车牌搞混了。后来我才意识到:车牌颜色是有严格标准的,不能随便扰动。增强要“尊重”真实世界的约束。

4.6 本章小结:增强组合拳的核心逻辑

下面这张图总结了数据增强的完整流程和决策逻辑:

数据增强组合拳流程图 原始训练数据 第一阶段:几何变换 随机缩放 随机裁剪 随机翻转 随机旋转 第二阶段:颜色变换 HSV色调扰动 HSV饱和度扰动 HSV明度扰动 第三阶段:混合增强 Mosaic(4图拼1) MixUp(像素叠加) CutMix(区域粘贴) 注意:前10个epoch增强拉满,中间逐步降低,最后5个epoch关闭所有增强

数据增强没有“万能配方”。你需要根据你的数据特点、任务场景、模型规模来调。但有一条原则是通用的:增强后的数据分布,不能偏离真实场景太远。

我建议你每次调整增强参数后,都可视化一批增强后的样本,看一眼再决定要不要继续调。眼睛不会骗你。