一、概述

数据增强(也叫数据扩增)的目的是为了扩充数据和提升模型的泛化能力。有效的数据扩充不仅能扩充训练样本数量,还能增加训练样本的多样性,一方面可避免过拟合,另一方面又会带来模型性能的提升。

二、数据增强的类别

1. 裁剪

  • 中心裁剪:transforms.CenterCrop(512);
  • 随机裁剪:transforms.RandomCrop;
  • 随机大小、长宽比裁剪:transforms.RandomResizedCrop;
  • 上下左右中心裁剪:transforms.FiveCrop;
  • 上下左右中心裁剪后翻转: transforms.TenCrop。

2.翻转和旋转

  • 依概率p水平翻转:transforms.RandomHorizontalFlip(p=0.5);
  • 依概率p垂直翻转:transforms.RandomVerticalFlip(p=0.5);
  • 随机旋转:transforms.RandomRotation(degrees, resample=False, expand=False, center=None)。
    • degrees:旋转角度,当为一个数a时,在(-a,a)之间随机旋转
    • resample:重采样方法
    • expand:旋转时是否保持图片完整,只针对中心旋转
    • center:设置旋转中心点

3. 随机遮挡

  • 对图像进行随机遮挡: transforms.RandomErasing。

4. 图像变换

  • 尺寸变换:transforms.Resize;
  • 标准化:transforms.Normalize;
  • 填充:transforms.Pad;
  • 修改亮度、对比度和饱和度:transforms.ColorJitter;
  • 转灰度图:transforms.Grayscale;
  • 依概率p转为灰度图:transforms.RandomGrayscale;
  • 线性变换:transforms.LinearTransformation();
  • 仿射变换:transforms.RandomAffine;
  • 将数据转换为PILImage:transforms.ToPILImage;
  • 转为tensor,并归一化至[0-1]:transforms.ToTensor;
  • 用户自定义方法:transforms.Lambda。

5. 对transforms的选择操作,使数据增强更灵活

  • transforms.RandomChoice(transforms列表):从给定的一系列transforms中选一个进行操作;
  • transforms.RandomApply(transforms列表, p=0.5):给一个transform加上概率,依概率进行选择操作;
  • transforms.RandomOrder(transforms列表):将transforms中的操作随机打乱。

举例说明:
在这里插入图片描述
上图就是由第一张图片经过翻转裁剪颜色变换得到的,每张图对于网络来说都是不同的输入,加上原图就将数据扩充到原来的14倍。
假如我们输入网络的图片的分辨率大小是256×256,若采用随机裁剪成224×224的方式,那么一张图最多可以产生32×32张不同的图,数据量扩充将近1000倍。

三、应用场景

数据增强在多个领域都有广泛的应用,包括但不限于:

  • 计算机视觉:图像识别、目标检测、语义分割等任务。
  • 自然语言处理:文本分类、情感分析、机器翻译等任务。
  • 语音识别:通过时间伸缩、变速不变调、添加噪声等操作提高模型的识别准确性。
  • 生物信息学:基因表达数据分析、蛋白质结构预测等任务。
  • 推荐系统:提高推荐算法的准确性和多样性。
  • 游戏AI:提高游戏角色的智能水平和适应性。

四、总结

总的来说,数据增强是深度学习中一个重要的环节,它通过增加数据集的多样性和数量,提高了模型的泛化能力和鲁棒性。在实际应用中,我们可以根据具体任务的需求选择合适的数据增强方法,以达到最佳的效果。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部