[예시코드]
dataset = dset.ImageFolder(root=dataroot,
transform=transforms.Compose([
transforms.Resize(image_size),
transforms.CenterCrop(image_size),
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
]))
# to scrips the transformations
transforms = torch.nn.Sequential(
transforms.CenterCrop(10),
transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
)
scripted_transforms = torch.jit.script(transforms)
Python
복사
shape
Tensor Image shape: (C, H, W)
Batch of Tensor Images shape: (B, C, H, W)
values
Tensor images with a float dtype : values in [0, 1)
Tensor images with an integer dtype : have values in [0, MAX_DTYPE]
MAX_DTYPE : largest value that can be represented in that dtype
v0.8.0부터 모든 random transformations들은 sample random parameters를 사용하기 위해 torch default random generator를 사용
# 이전버전
import random
random.seed(12)
# 0.8.0 이후
import torch
torch.manual_seed(12)
Python
복사
torchvision.transforms.Compose(transforms)
parameter transforms는 Transform객체들의 list이다.
이 Transform 들은 PIL이미지와 torch.Tensor 형식의 이미지에 적용될 수 있다.
자주 사용되는 transform들
torchvision.transform.CenterCrop(size) : 중심을 기준으로 size만큼의 크기로 크롭(size: (h, w)또는 int형. int형 또는 크기가 1인 sequence로 입력시 (size[0], size[0])으로 해석된다)
torchvision.transforms.Resize(size, interpolation <InterpolationMode.BILINEAR: 'bilinear'>, max_size=None, antialias=None) : 주어진 사이즈로 resize
size : 원하는 output size. (h, w)로 주어지면 output size 는 이것에 맞춰짐. size가 int면, smaller edge of the image 가 이 숫자에 맞춰짐.
i.e, if height > width, then image will be rescaled to (size * height / width, size).
torchvision.transforms.Normalize(mean, std, inplace=False) : 평균과 표준편자 입력에 따라 normalize. PIL이미지에는 적용되지 않는다
mean : (mean[1], mean[2], mean[3], ..., mean[n])
std : (std[1], std[2], ..., std[n])
n은 채널. 채널별로 평균과 표준편차 지정해주는 것.
output[channel] = (input[channel] - mean[channel]) / std[channel]
torchvision.transforms.ToTensor() : PIL이미지나 numpy.ndarray를 tensor로 바꾸어준다. torchscript는 지원하지 않는다.
[0,255]의 값 범위를 갖고 (H, W, C) 형식을 갖는 PIL image 또는 numpy.ndarray → (C, H, W) 형식을 갖고 [0.0, 1.0]의 범위를 갖는 torch.FloatTensor
단, PIL이미지라면 one of the modes (L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1)여야 하고, numpy.ndarray라면 np.uint8 의 dtype을 가져야한다. 다른 경우라면 scaling없이 tensor가 리턴된다.