일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 컴퓨터 비전
- Tkinter
- 논문 리뷰
- Django
- 그래픽 유저 인터페이스
- GUI
- MariaDB
- k8s
- 파이썬
- 웹 프로그래밍
- pytorch
- yaml
- kubernetes
- FLASK
- 장고
- tensorflow
- vue.js
- 텐서플로우
- POD
- Python
- numpy
- 파이토치
- OpenCV
- Deep Learning
- paper review
- 데이터베이스
- Web Programming
- 딥러닝
- Computer Vision
- Docker
- Today
- Total
Maxima's Lab
[Python, Pytorch] torchvision.transforms 사용법 본문
안녕하세요, 오늘은 Pytorch 내 torchvision.transforms에 대해 알아보도록 하겠습니다.
transforms 내 알아볼 내용들은 다음과 같습니다.
- CenterCrop
- RandomCrop
- Resize
- RandomVerticalFlip & RandomHorizontalFlip
아래의 Original Image에 대해 적용해보도록 하겠습니다.
위의 이미지는 (256, 256, 3) Shape을 지니고 있는 이미지입니다. 먼저, (200, 200, 3) Shape로 Center Crop을 적용해보겠습니다.
import torch
import torchvision.transforms as transforms
transforms = transforms.Compose(
[transforms.ToTensor(),
transforms.CenterCrop(size=(200, 200))]
)
result = transforms(img)
result = result.permute(1,2,0).detach().numpy()
plt.figure(figsize=(9, 9))
plt.imshow(result)
plt.axis("off")
plt.show()
위의 코드를 적용한 Center Cropped Image는 다음과 같습니다.
위의 전체 코드에 대해 알아보도록 하겠습니다.
print(type(img))
result = transforms(img)
print(type(result))
print("Tensor Result Shape : ", result.shape)
print(result.device)
result = result.permute(1,2,0).detach().numpy()
print(type(result))
print("Numpy Result Shape : ", result.shape)
<class 'numpy.ndarray'>
<class 'torch.Tensor'>
Tensor Result Shape : torch.Size([3, 200, 200])
cpu
<class 'numpy.ndarray'>
Numpy Result Shape : (200, 200, 3)
img의 type은 순차적으로 transforms 함수를 적용 전(numpy.ndarray) --> 함수 적용 후(torch.Tensor) --> detach().numpy() 적용 후(numpy.ndarray) 변화하는 것을 볼 수 있습니다.
또한, img의 shape은 transforms 함수를 적용하기 전에는 (256, 256, 3) 이지만 적용 후에는 (3, 200, 200)로 변하게 되고, permute(1, 2, 0)를 통해 (200, 200, 3)으로 변합니다. 참고 사항으로, torch.Tensor로 사용되는 동안 해당 Tensor의 device는 cpu인 것을 확인할 수 있습니다.
import torch
import torchvision.transforms as transforms
transforms = transforms.Compose(
[transforms.ToTensor(),
transforms.RandomCrop(size=(200, 200))]
)
위의 transforms 함수를 통해 Random Crop을 적용한 이미지 결과는 다음과 같습니다.
다음은 Center Crop 후 Resize를 적용하기 위한 코드입니다.
import torch
import torchvision.transforms as transforms
transforms = transforms.Compose(
[transforms.ToTensor(),
transforms.CenterCrop(size=(200, 200)),
transforms.Resize(size=(128, 128))]
)
위의 코드를 적용하게 되면, Original Image (256, 256, 3) --> Center Cropped Image (3, 200, 200) --> Resized Image (3, 128, 128)로 변하게 되며 permute(1, 2, 0)를 통해 최종적으로 (128, 128, 3)의 형태로 변하게 됩니다.
다음은 RandomVerticalFlip(p) & RandomHorizontalFlip(p)에 대한 코드입니다.
import torch
import torchvision.transforms as transforms
transforms_Vflip = transforms.Compose(
[transforms.ToTensor(),
transforms.RandomVerticalFlip(p=0.9)]
)
transforms_Hflip = transforms.Compose(
[transforms.ToTensor(),
transforms.RandomHorizontalFlip(p=0.9)]
)
위의 코드에서 p=0.9의 확률로 무작위로 Vertical Flip & Horizontal Flip를 적용하게 됩니다. 해당 결과는 다음과 같습니다.
(p 값의 default 값은 0.5 입니다.)
지금까지, Pytorch 내 transforms를 사용하는 방법에 대해서 알아보았습니다.
'Python > Pytorch' 카테고리의 다른 글
[Python, Pytorch] Anomaly Detection & 코드 구현 (0) | 2023.03.05 |
---|---|
[Python, Pytorch] Tensor, Cuda 사용법 (0) | 2022.09.01 |
[Python, Pytorch] TensorDataset & DataLoader (0) | 2022.08.31 |
[Python, Pytorch] DataLoader (데이터 불러오기) (0) | 2022.08.07 |