[Torchvision] .datasets .transforms

olxtar·2022년 3월 18일
0

Comment :

  • torchvision
  • torchvision.datasets : Torchvision이 가지고 있는 데이터셋 설명
  • torchvision.transforms : Torchvision이 제공하는 이미지 Transformation 기초

Torchvision

Torchvision은 PyTorch와 함께 사용되는 Computer Vision 용 라이브러리입니다.
아래와 같은 것들을 포함하고 있습니다.

  • torchvision.transforms : 효율적인 이미지 및 비디오 변환을 위한 유틸리티
  • torchvision.datasets : 일부 데이터 세트
  • [?] 아직... : (사전학습 된) 모델

pip install torchvision



01. Datasets

torchvision.datasets : Torchvision이 제공하는 데이터셋을 가져오기 (저장하기)

ex)

train_set = torchvision.datasets.CIFAR10(
										 '데이터 저장 위치',
                                         train=True
                                         download=True
                                         transform=transform
                                        )

[!] torchvision.datasets는 Train / Test셋이 원래(?)부터 나눠져있다. 따라서 train argument를 True / False로 조작하여 Training dataset과 Test dataset을 받을 수 있다.
[!] transform은 이제 아래에서 설명해드림!
[+] '데이터 저장 위치'는 현재 디렉토리(디폴트 : 너의 Python 파일이 돌고있는 곳)를 기준으로 한다.
[+] torchvision.datasets가 보유한 데이터셋 리스트는 아래 \downarrow 와 같다.

  • MNIST
  • Fashion-MNIST
  • KMNIST
  • EMNIST
  • FakeData
  • COCO
  • LSUN
  • ImageFolder
  • DatasetFolder
  • Imagenet-12
  • CIFAR
  • etc...

[+] 데이터 다운로드를 완료하면 아래와 같이 할당된다.

train_set

>>>
Dataset CIFAR10
    Number of datapoints: 50000
    Root location: ./LHK_data
    Split: Train




02. Transformation

torchvision.transforms : Torchvision이 제공하는 이미지 or 영상 변환 기능

import torch
import torchvision
from torchvision import transforms          # 주의사항! transform's'!

torchvision.__version__  # Version check

[+] torchvision.transforms가 제공해주는 이미지 변환 기능은 아래 \downarrow 와 같다.

  • torchvision.transforms.ToTensor() : 이미지 데이터 세트를 Tensor로 변환
  • torchvision.transforms.Normalize(mean, std, inplace=False) : 사용중인 데이터 세트의 픽셀 값을 정규화 Tensor에만 적용 가능!
  • torchvision.transforms.Resize(size, interpolation=2) : 이미지를 지정한 크기로 변환한다.
  • torchvision.transforms.CenterCrop(size) : 이미지의 중앙 부분을 크롭하여 [size, size]크기로 만든다.
  • torchvision.transforms.Compose( [ ] ) : 여러 transform 함수들을 Compose로 하나의 함수로 구성가능

ex)

# Step 1 - define my transformation pipeline
my_transform = transforms.Compose([
			   transforms.Grayscale(1),
               transforms.RandomHorizontalFlip(p=0.5)
               transforms.ToTensor()
               ])
               
# Step 2 - use that to load your data
my_data = torch.utils.data.DataLoader(train_set, batch_size=128, transform = my_transform)



03. Practice

# Settings
import torch
from torch import uitls

# pip install torchvision
import torchvision
from torchvision import datasets, transforms

[!] torchvision.datasets! / transforms! 둘다 s가 있다.

# 데이터 가져오기
train_set = torchvision.datasets.MNIST('./LHK_data',
                                       train=True,
                                       download=True
                                      )

test_set = torchvision.datasets.MNIST('./LHK_data',
                                      train=False,
                                      download=True
                                     )

[!] 훈련셋에는 train=True, 테스트셋에는 train=False이다.
[+] 실행하면 아래와 같이 다운로드 받는다.

Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./LHK_data\MNIST\raw\train-images-idx3-ubyte.gz
9913344/? [00:00<00:00, 11890967.20it/s]
Extracting ./LHK_data\MNIST\raw\train-images-idx3-ubyte.gz to ./LHK_data\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./LHK_data\MNIST\raw\train-labels-idx1-ubyte.gz
29696/? [00:00<00:00, 783565.79it/s]
Extracting ./LHK_data\MNIST\raw\train-labels-idx1-ubyte.gz to ./LHK_data\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./LHK_data\MNIST\raw\t10k-images-idx3-ubyte.gz
1649664/? [00:00<00:00, 4240672.79it/s]
Extracting ./LHK_data\MNIST\raw\t10k-images-idx3-ubyte.gz to ./LHK_data\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ./LHK_data\MNIST\raw\t10k-labels-idx1-ubyte.gz
5120/? [00:00<00:00, 301947.90it/s]
Extracting ./LHK_data\MNIST\raw\t10k-labels-idx1-ubyte.gz to ./LHK_data\MNIST\raw


[!] torch.utils.data.DataLoader를 함께 사용

# 데이터 불러오기 및 Transform 설정

Transform = transforms.Compose( [transforms.ToTensor(),
                                 transforms.Normalize( (1, 1, 1), (1, 1, 1))
                                ] )


train_loader = torch.utils.data.DataLoader(train_set,
                                           batch_size=64,
                                           shuffle=True
                                          )

test_loader = torch.utils.data.DataLoader(test_set,
                                          batch_size=64,
                                          shuffle=True
                                         )
                                 






참고 : Torchvision의 기능 이해

profile
예술과 기술

0개의 댓글