무효 클릭 IP 추적 중...
머신러닝,딥러닝/딥러닝

[pytorch] transforms.Compose 사용 방법

꼬예 2022. 12. 21.

방대한 데이터 이미지를 한번에 변형 시킬 필요가 자주 있다.

이때 일일이 수작업으로 이미지를 변환한다면 리소스 낭비가 이만저만이 아닐거다.

 

이에 대한 해결책으로 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:

변형된 이미지 확인

 

+ 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와 비슷한 기능으로 인덱스 번호를 통해 차원의 위치를 변경해준다.

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글