数据增强也叫做数据扩增,数据增广,意思是在不实质增加数据的情况下,从有限的数据产生更多变种,让有限的数据产生等驾驭更多的数据价值
数据增强:降低成本,提高模型的泛化能力
基本数据增强方法:
采用固定的预设规则进行数据扩增,包括单样本数据增强和多样本数据增强
单样本:几何操作类和颜色操作类
几何操作对像素空间重新分布
多尺度裁剪,先裁剪再进行缩放
多样本增强:离散样本点连续化来进行插值拟合 smot方法对一不平衡的比例确定好采样倍率
samplepairing:随机抽取两张图片分别经过基础数据增强操作(如随机反转)处理后,直接叠加合成一个新的样本,标签为原样本标签中的一种
Mixup:facebook提出的对图像和标签都进行了线性插值
开源库imgaug 覆盖了主流的数据增强方法
在特定领域有特定的数据增强思路 比如人脸
自动数据增强方法:
aotoaugment框架:学习已有的数据增强的组合,不同的任务,需要不同的数据增强操作 有16个数据操作
从零生成性的数据(无中生有): 生成对抗网络,生成新的数据
from torchvision import transforms #常见的数据增强方法 # torchvision.transforms.RandomCrop() #随机位置裁剪 # torchvision.transforms.RandomHorizontalFlip(p=1) #以一定的比列,随机水平反转 # torchvision.transforms.RandomVerticalFlip(p=1) #以一定比列随机上下翻转 # torchvision.transforms.RandomRotation() #随机旋转一个角度 # torchvision.transforms.ColorJitter(brightness=1) # #对于颜色的变换 可以设置亮度, # #contrast 对比度,saturation 饱和度,hue 随机调整颜色 # # torchvision.transforms.RandomGrayscale(p=0.5)#随机灰度化 #测试时不需要做数据增强 只对train数据增强 train_transformer = torchvision.transforms.Compose([transforms.Resize(224,224), transforms.RandomCrop(192,192), transforms.RandomHorizontalFlip(), transforms.RandomRotation(0.2), transforms.ColorJitter(brightness=0.5), transforms.ColorJitter(contrast=4), transforms.ToTensor(), transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])]) test_transformer = torchvision.transforms.Compose([transforms.Resize(192,192), transforms.ToTensor(), transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])])