【数据增强】
- 1 数据增强的情形
- 2 数据增强的方法
1 数据增强的情形
当数据比较小,难以获取新的训练数据时,可以考虑数据增强,如随机裁剪部分,随机左右上下翻转、随机旋转一个角度、随机亮度变化等微小变化,数据的多样性提高,数据集本身大小未变,只是做了微小调整送入网络。
数据增强数据有限的情况下,可以增加样本的多样性、抑制过拟合,提高正确率。
2 数据增强的方法
torchvision提供了诸多随机改变图片的方法:
transforms.RandomCrop # 随机位置裁剪 transforms.CenterCrop
transforms.RandomHorizontalFlip(p=1) # 随机水平翻转
transforms.RandomVerticalFlip(p=1) # 随机上下翻转
transforms.RandomRotation
transforms.ColorJitter(brightness=1)
transforms.ColorJitter(contrast=1)
transforms.ColorJitter(saturation=0.5)
transforms.ColorJitter(hue=0.5)
tansforms.RandomGrayscale(p=0.5) # 随机灰度化
如随机裁剪图片:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import torchvision
import glob
from torchvision import transforms
from torch.utils import data
from PIL import Image
pil_img = Image.open('dataset2/cloudy134.jpg') #自定义路径
transform = transforms.Compose([
transforms.Resize((256, 256)),
transforms.RandomCrop((224, 224))
])
plt.figure(figsize=(12, 8))
for i in range(6):
img = transform(pil_img)
plt.subplot(2, 3, i+1)
plt.imshow(img)
plt.subplots_adjust(wspace=0.15, hspace=0.15)
plt.savefig('pics/5_0.jpg') #自定义路径
随机水平翻转:
pil_img = Image.open('dataset2/cloudy134.jpg')
trans_img = transforms.RandomHorizontalFlip(p=1)(pil_img)
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(pil_img)
plt.subplot(1, 2, 2)
plt.imshow(trans_img)
plt.show()
plt.savefig('pics/5_1.jpg')
随机亮度调整:
注意:这里的区间设置不宜过大,否则图片容易变化过大,导致失真
pil_img = Image.open('dataset2/cloudy134.jpg')
transform = transforms.Compose([
transforms.Resize((256, 256)),
transforms.ColorJitter(brightness=(0.7, 1.3), contrast=(0.7, 1.3), saturation=(0.7, 1.3), hue=(-0.05, 0.05))
])
plt.figure(figsize=(12, 8))
for i in range(6):
img = transform(pil_img)
plt.subplot(2, 3, i+1)
plt.imshow(img)
plt.subplots_adjust(wspace=0.15, hspace=0.15)
plt.savefig('pics/5_2.jpg')