방대한 데이터 이미지를 한번에 변형 시킬 필요가 자주 있다.
이때 일일이 수작업으로 이미지를 변환한다면 리소스 낭비가 이만저만이 아닐거다.
이에 대한 해결책으로 torchvision.transforms.Compose 소개하고자 한다.
이번 포스팅은 transforms.Compose 사용방법과 이미지가 어떻게 변화되는지 눈으로 확인해볼거다.
1) 필요한 모듈 import
from torchvision import transforms
2) transforms.Compose 정의
IMG_TRANSFORM = transforms.Compose([
transforms.Resize(size=(64, 64)),
transforms.RandomHorizontalFlip(p=0.5),
transforms.ToTensor()
])
함수 설명 | 내용 설명 |
transforms.Resize(size=(64, 64)) | 이미지크기를 (64, 64)로 변경 |
transforms.RandomHorizontalFlip(p=0.5) | 이미지를 좌우 반전 p=0.5 는 해당기능을 50%로 확률로 실행 |
transforms.ToTensor() | 이미지를 Pytorch tensors 타입으로 변형 pixels 값들을 [ 0~255 ] 에서 [ 0.0~1.0 ]으로 자동 변환 |
이외에도 다양한 이미지 변형 메소드가 있으니 아래 문서를 참조 하길 바란다.
Transforming and augmenting images — Torchvision main documentation
Shortcuts...
pytorch.org
3) transforms.Compose 적용/ 효과 확인
train_images = glob.glob("train/*/*.jpg") # jpg 이미지 추출
random_img_3 = random.sample(train_images, k=3) # 위 이미지중 랜덤하게 3개 추출
for rand_img in random_img_3:
with Image.open(rand_img) as img:
fig, ax = plt.subplots(1, 2)
ax[0].imshow(img)
ax[0].set_title("Original \nSize: {}".format(img.size))
ax[0].axis("off")
img_transformed = IMG_TRANSFORM(img).permute(1, 2, 0)
# 위에서 생성한 transforms.Compose 객체의 인자로 img를 넣어주고 permute(아래설명참조)
ax[1].imshow(img_transformed)
ax[1].set_title("Transformed \nSize: {}".format(img_transformed.shape))
ax[1].axis("off")
output:
![[pytorch] transforms.Compose 사용 방법 - undefined - 3) transforms.Compose 적용/ 효과 확인 변형된 이미지 확인](https://blog.kakaocdn.net/dn/dbTxHX/btrT8pM0slL/Xqx1TMGMuKDl8iLyESkVk0/img.png)
+ permute 이해
random_tensor = torch.rand(size=(2, 3, 5))
print(random_tensor.shape) # torch.Size([2, 3, 5])
random_tensor = random_tensor.permute(1, 2, 0) # 각 차원의 순서를 변경하여 재배치 : [0, 1, 2] -> [1, 2, 0]
print(random_tensor.shape) # torch.Size([3, 5, 2])
넘파이 swapaxes와 비슷한 기능으로 인덱스 번호를 통해 차원의 위치를 변경해준다.
'머신러닝,딥러닝 > 딥러닝' 카테고리의 다른 글
[pytorch] model.eval() vs torch.no_grad() 차이 (1) | 2022.12.21 |
---|---|
[pytorch] ImageFolder 사용 방법 (0) | 2022.12.21 |
AutoEncoder(오토인코더) 예제 코드 (0) | 2022.12.19 |
python 딥러닝 폴더 구조 쉽게 나누는 방법(with splitfolders) (0) | 2022.11.15 |
[딥러닝 기초] Dense layer (0) | 2022.04.20 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.