数据增强有哪些方法
数据增强也叫做数据扩增,数据增广,意思是在不实质增加数据的情况下,从有限的数据产生更多变种,让有限的数据产生等驾驭更多的数据价值
数据增强:降低成本,提高模型的泛化能力
基本数据增强方法:
采用固定的预设规则进行数据扩增,包括单样本数据增强和多样本数据增强
单样本:几何操作类和颜色操作类
几何操作对像素空间重新分布
多尺度裁剪,先裁剪再进行缩放
多样本增强:离散样本点连续化来进行插值拟合 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])])