数据增强常见方法汇总
1.目的
提高模型泛化能力:通过增加训练数据集的多样性,使模型能够学习到更多数据特征,从而提高对未见过的数据的泛化能力。
减少过拟合:过度拟合是指模型在训练数据上表现良好,但在测试数据上表现不佳。数据增强可以减少模型对训练数据的依赖,降低过拟合风险。
降低训练成本:数据增强可以通过对现有数据进行变换,而不需要额外采集数据,从而降低训练成本。
提高模型鲁棒性:数据增强可以使模型对光照、角度、遮挡等变化更加鲁棒。
2.方法
图像数据增强技术主要通过对图像进行各种变换来增加训练数据的多样性。常见的图像数据增强技术包括:
-
旋转、翻转、裁剪:改变图像的方向和位置。 -
缩放、变形:改变图像的大小和形状。 -
颜色变换:改变图像的亮度、对比度、饱和度等。 -
添加噪声:在图像中添加随机噪声。 -
混合图像:将两张图像混合在一起。
可以单独使用某种方法,也可以根据数据集实际情况组合使用其中某几种方法
PyTorch 提供了丰富的数据增强工具,我们可以直接使用torchvision中的transforms 模块实现。
3.代码
1.改变大小Resize/Rescale
path = 'tupian.jpeg'
transform = transforms.Resize((224, 224))
imshow(path, transform)
2.裁剪Cropping
图像的一部分应用于新图像。例如使用 CenterCrop 来返回一个中心裁剪的图像。
transform = transforms.CenterCrop((224, 224))
3.随机裁剪/大小RandomResizedCrop
这种方法同时结合了裁剪和调整大小。
transform = transforms.RandomResizedCrop((100, 300))
4.翻转Flipping
水平或垂直翻转图像
transform = transforms.RandomHorizontalFlip()transform = transforms..RandomVerticalFlip
5.填充Padding
填充包括在图像的所有边缘上按指定的数量填充。下面代码将每条边填充50像素
transform = transforms.Pad((50,50,50,50))
6.旋转Rotation
对图像随机施加旋转角度。我们将这个角设为30度。
transform = transforms.RandomRotation(30)
7.随机仿射变换Random Affine
保持中心不变的变换。
transform = transforms.RandomAffine(1, translate=(0.5, 0.5), scale=(1, 1), shear=(1,1), fillcolor=(256,256,256))#degrees:旋转角度
#translate:水平和垂直转换
#scale:缩放参数
#share:图片裁剪参数
#fillcolor:图像外部填充的颜色
8.高斯模糊Gaussian Blur
将图片模糊化
transform = transforms.GaussianBlur(7, 3)
9.灰度化Grayscale
彩色图像转为灰色
transform = transforms.Grayscale(num_output_channels=3)
10.亮度Brightness
改变图像的亮度当与原始图像对比时,生成的图像变暗或变亮。
transform = transforms.ColorJitter(brightness=2)
11.对比度Contrast
图像最暗和最亮部分之间的区别程度被称为对比度。图像的对比度也可以作为增强进行调整。
transform = transforms.ColorJitter(contrast=2)
12.饱和度Saturation
图片中颜色的分离被定义为饱和度
transform = transforms.ColorJitter(saturation=20)
13.色调Hue
色调被定义为图片中颜色的深浅。
transform = transforms.ColorJitter(hue=2)
