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 增强组合拳:怎么打才有效?
单独用某一种增强,效果有限。真正的“组合拳”是把多种增强串起来用。但顺序和概率很有讲究。
我常用的组合策略是这样的:
- 先做几何变换:随机缩放、随机裁剪、随机翻转。这些改变目标的位置和大小。
- 再做颜色变换:HSV扰动。模拟光照变化。
- 最后做混合增强: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 本章小结:增强组合拳的核心逻辑
下面这张图总结了数据增强的完整流程和决策逻辑:
数据增强没有“万能配方”。你需要根据你的数据特点、任务场景、模型规模来调。但有一条原则是通用的:增强后的数据分布,不能偏离真实场景太远。
我建议你每次调整增强参数后,都可视化一批增强后的样本,看一眼再决定要不要继续调。眼睛不会骗你。