本文目录导读:

数据增强(Data Augmentation)是一种在训练数据有限的情况下,通过对原始数据进行微小变换来生成更多、更多样化训练样本的技术,它能有效提高模型的泛化能力,防止过拟合。
数据增强策略的选择高度依赖于数据类型(图像、文本、音频、表格)和具体任务(分类、检测、生成、时间序列预测)。
以下按不同数据类型介绍主流的增强策略:
图像数据增强(最成熟、最常用)
基础几何变换
这些是最简单、最有效的操作,通常结合使用。
- 随机翻转:水平翻转(常用)、垂直翻转(适用于非对称场景如文字识别)。
- 随机旋转:小角度旋转(如±15°),防止边缘信息丢失。
- 随机裁剪与缩放(Random Resized Crop):从图像中随机裁剪一块,再缩放到原始尺寸,这是最核心的增强之一。
- 随机平移:沿X轴或Y轴平移图像。
- 随机错切(Shear):使图像沿一个轴倾斜。
颜色与光学变换
模拟不同的光照和成像条件。
- 亮度、对比度、饱和度、色调调整:随机调整HSV或RGB通道的值。
- 灰度化:将彩色图转为灰度图,迫使模型学习形状而非颜色。
- 高斯噪声:模拟传感器噪声,增强鲁棒性。
- 模糊:高斯模糊、均值模糊。
- JPEG压缩伪影:降低图像质量模拟传输损耗。
高级/混合增强
- Cutout / Random Erasing:随机擦除图像中的一个矩形区域(填充灰色或噪声),迫使模型关注全局特征而非局部。
- Mixup:将两张图像按比例混合(像素叠加、标签线性混合),公式:
new_img = λ * img1 + (1-λ) * img2。 - CutMix:裁剪一张图像的一部分,粘贴到另一张图像上,标签也按面积比例混合。
- GridMask:规则网格式删除部分区域。
自动化增强(AutoAugment家族)
使用搜索算法(强化学习、遗传算法)找到针对特定数据集的最佳增强策略组合。
- AutoAugment:Google提出的搜索方法。
- RandAugment:简化版,随机选择N个增强操作并应用幅度M。
- TrivialAugment:更简单的单次随机增强。
特定场景增强
- 医学图像:弹性变换、模拟运动伪影、对比度拉伸。
- 卫星/遥感:多光谱混合、条带噪声模拟、地理扭曲。
- 文档OCR:透视畸变、笔画粗细变化、背景纹理模拟。
图像增强库推荐
- torchvision.transforms:PyTorch内置,基础功能。
- Albumentations:速度极快,支持80+种增强,适合深度学习。
- imgaug:功能丰富,支持顺序增强。
- Kornia:基于PyTorch的可微分增强,支持GPU加速。
文本数据增强(NLP)
文本增强比图像难得多,因为必须保持语义和语法正确。
词汇级别
- 同义词替换:随机选择单词,替换为WordNet或预训练词向量中的近义词。
- 随机插入:在句子中随机位置插入同义词。
- 随机交换:随机交换句中两个单词的位置。
- 随机删除:以一定概率删除单词。
句子级别
- 回译(Back Translation):将原句翻译成中间语言(如法语),再翻译回原语言,能生成语义相似但表述不同的句子。
- 语法结构切换:主动->被动语态,否定句转换等。
模型驱动的增强
- BART / T5 / GPT 生成:使用预训练模型生成语义相似但改写过的句子。
- 对抗性扰动:在词嵌入向量中加入小噪声。
数据拼接
- Mixup for NLP:将两个句子的词嵌入向量按比例混合。
增强库推荐
- nlpaug:支持同义词、回译、TF-IDF替换等。
- TextAttack:不仅有增强,还支持对抗攻击。
音频数据增强(语音/声学)
信号级别
- 加性噪声:混合环境噪声(咖啡厅、街道、风声),音源分离任务常见。
- 时间拉伸:改变播放速度但保持音调不变。
- 音调偏移:改变音调高低。
- 时间/频率遮蔽(SpecAugment):在语谱图上随机遮蔽一段频率或时间,这是语音识别最有效的增强。
环境模拟
- 混响:模拟房间回音。
- 卷积分:使用房间冲击响应(RIR)模拟不同的录音空间。
表格数据增强(结构化数据)
表格数据的增强难度较高,因为特征之间有依赖关系。
简单扰动
- 高斯噪声加性:对数值特征加入小噪声(如标准差的5%)。
- SMOTE:在少数类样本之间插值生成新样本,解决类别不平衡。
- 缺失值模拟:随机将某些值设为NaN,模拟数据缺失。
生成式方法
- CTGAN / TVAE:使用生成对抗网络或变分自编码器学习数据分布并生成新样本。
- Easy Data Augmentation (EDA for tabular):将文本增强思路迁移到表格(交换、删除行等)。
时间序列数据增强
变换
- 缩放:全局缩放或窗口缩放。
- 时间扭曲:局部拉伸或压缩时间轴,模拟节奏变化。
- 排列:在固定窗口内打乱子序列(保持全局趋势不变)。
频域
- 频率屏蔽:在傅里叶变换后屏蔽某些频率分量,再逆变换回来。
- 季节性与趋势分解:对残差项加入噪声。
核心原则与建议
- 测试集真实性:增强策略必须模拟测试时可能遇到的真实情况,人脸识别不需要垂直翻转(人不会倒立);手写数字识别需要大量旋转和扭曲。
- 不要破坏语义:图像分类中,将目标物上半部分裁掉可能没问题;但在细粒度分类(如鸟的品种)中,切掉鸟嘴就是灾难。
- 力度控制:增强幅度过大会导致模型学到伪造模式。
- 与数据量匹配:
- 小数据(<1k):强增强+预训练+混合增强(Mixup/CutMix)+外部预训练权重。
- 中等数据(1k-1M):标准增强(翻转+颜色+裁剪)+RandAugment。
- 大数据(>1M):弱增强(仅随机裁剪+水平翻转)或无需增强。
- 在线 vs 离线:
- 在线:训练时实时生成,每次epoch生成不同数据,适合大数据(推荐)。
- 离线:先扩增数据集再训练,适合避免重复计算或特定缓存需求。
总结建议:
- 图像:首推 RandomResizedCrop + RandomHorizontalFlip + ColorJitter + AutoAugment/RandAugment。
- 文本:首推 回译 + 同义词替换。
- 音频:首推 SpecAugment 或 加性噪声。
- 通用:从 轻量增强 开始,验证集性能提升再逐步加量;使用增强库的 Pipeline 管理。