[데이터 증강]Pytorch transform(변형)종류 살펴보고 이미지 증강 처리
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
import warnings
warnings.filterwarnings('ignore')
device = 'cuda' if torch.cuda.is_available() else 'cpu'
torch.manual_seed(777)
train_set = torchvision.datasets.CIFAR100(
root = './data',
train = True,
download = True,
transform = transforms.Compose([
transforms.ToTensor() # 데이터를 0에서 255까지 있는 값을 0에서 1사이 값으로 변환
])
)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=16)
for i in train_loader:
s = 1
plt.figure(figsize=(16,10))
for img in i[0][:4]:
plt.subplot(1, int(len(i[0])/4), s)
plt.imshow(np.transpose(img, (1,2,0)))
s = s + 1
break
plt.show()
def plottransform(transform):
train_set = torchvision.datasets.CIFAR100(
root = './data',
train = True,
download = True,
transform = transforms.Compose([
transforms.ToTensor() # 데이터를 0에서 255까지 있는 값을 0에서 1사이 값으로 변환
])
)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=4)
test_set = torchvision.datasets.CIFAR100(
root = './data',
train = True,
download = True,
transform = transforms.Compose([
transforms.ToTensor(),
transform
])
)
test_loader = torch.utils.data.DataLoader(test_set, batch_size=4)
plt.figure(figsize=(16,10))
for i in train_loader:
s = 1
for img in i[0]:
plt.subplot(2, len(i[0]), s)
plt.imshow(np.transpose(img, (1,2,0)))
s = s + 1
break
for i in test_loader:
for img in i[0]:
plt.subplot(2, len(i[0]), s)
plt.imshow(np.transpose(img, (1,2,0)))
s = s + 1
break
plt.show()
#함수
transforms.ToPILImage() - csv 파일로 데이터셋을 받을 경우, PIL image로 바꿔준다.
transforms.CenterCrop(size) - 가운데 부분을 size 크기로 자른다.
transforms.Grayscale(num_output_channels=1) - grayscale로 변환한다.
transforms.ColorJitter() - 색을 바꾼다.
transforms.RandomAffine(degrees, translate) - 랜덤으로 affine 변형을 한다. 회전, 이동을 함
transforms.RandomCrop(size, scale, ratio) -이미지를 랜덤으로 아무데나 잘라 size 크기로 출력한다.
transforms.Resize(size) - 이미지 사이즈를 size로 변경한다
transforms.RandomRotation(degrees) 이미지를 랜덤으로 degrees 각도로 회전한다.
transforms.RandomResizedCrop(size, scale, ratio) - 이미지를 랜덤으로 변형한다.
transforms.RandomVerticalFlip(p=0.5) - 이미지를 랜덤으로 수직으로 뒤집는다. p =0이면 뒤집지 않는다.
transforms.RandomHorizontalFlip(p=0.5) - 이미지를 랜덤으로 수평으로 뒤집는다.
transforms.RandomApply([transforms, p=0.3) - transform함수를 p확률 만큼 적용한다.
transforms.ToTensor() - 이미지 데이터를 tensor로 바꿔준다.
transforms.Normalize(mean, std, inplace=False) - 이미지를 정규화한다.
plottransform(transforms.CenterCrop(10))
plottransform(transforms.RandomCrop(10))
plottransform(transforms.Resize(100))
plottransform(transforms.RandomResizedCrop(50))
plottransform(transforms.RandomResizedCrop(30))
plottransform(transforms.RandomResizedCrop(10, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333)))
plottransform(transforms.RandomAffine((-90,90), translate=(0.2, 0.2)))
plottransform(transforms.RandomAffine((-90,90), translate=(0.2, 0.2), scale=(0.8, 2)))
plottransform(transforms.RandomRotation(90))
plottransform(transforms.RandomVerticalFlip(p=0.5))
plottransform(transforms.RandomHorizontalFlip(p=0.5))
# brightness 밝기, contrast 대조, saturation 채도, hue 색조
plottransform(torchvision.transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5))
plottransform(transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]))
plottransform(transforms.RandomApply([transforms.RandomAffine((-90,90), translate=(0.5, 0.5))], p=0.3))
댓글남기기