目录
前言
一、为什么要使用数据增强?
二、数据增强有哪些方法?
1. 几何变换
2. 颜色变换
3. 噪声添加
4. 裁剪
5. 混合技术
6. 其他方法
三、代码实现
前言
数据增强是深度学习中常用的一种技术,旨在通过对训练数据进行各种变换来增加数据集的多样性,从而提高模型的泛化能力。
一、为什么要使用数据增强?
- 数据量不足:训练样本较少时,增强可以生成更多样本。
- 数据不平衡:某些类别样本较少,需要平衡各类别。
- 过拟合风险:模型在训练集上表现很好,但在验证集上差时。
- 模拟多样性:希望模型能适应不同的实际应用场景。
二、数据增强有哪些方法?
1. 几何变换
- 旋转:随机旋转图像一定角度。
- 平移:在水平或垂直方向上随机平移图像。
- 缩放:随机缩放图像,使其大小发生变化。
- 翻转:水平或垂直翻转图像。
2. 颜色变换
- 亮度调整:随机改变图像的亮度。
- 对比度调整:调整图像的对比度,使得高光和阴影部分更加明显。
- 色相/饱和度调整:随机改变图像的色相和饱和度。
3. 噪声添加
- 高斯噪声:在图像中添加高斯噪声,增加训练数据的鲁棒性。
- 椒盐噪声:随机在图像中添加黑白噪点。
4. 裁剪
- 随机裁剪:随机裁剪图像的一部分,保留部分信息以进行训练。
5. 混合技术
- Mixup:将两张图像及其标签进行线性组合,生成新的训练样本。
- CutMix:在一张图像中裁剪出一部分并将其替换为另一张图像的部分。
6. 其他方法
- 透视变换:对图像进行透视变换,以模拟不同的视角。
- 模糊处理:对图像应用模糊效果,例如高斯模糊。
三、代码实现
from torchvision import transformsdata_transforms = {'train':transforms.Compose([transforms.Resize([300, 300]),transforms.RandomRotation(45), # 随机旋转45度transforms.CenterCrop(256), # 从图像中心裁剪(256,256)transforms.RandomHorizontalFlip(p=0.5), # 随机水平旋转transforms.RandomVerticalFlip(p=0.5), # 随机垂直旋转transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1), # 图像随机调整颜色transforms.RandomGrayscale(p=0.1), # 图像随机转换成灰度图transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # 为 ImageNet 数据集计算的标准化参数]),'test':transforms.Compose([transforms.Resize([256, 256]),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # 为 ImageNet 数据集计算的标准化参数])
}