PyTorch의 ImageFolder 데이터 로더 활용법

오늘은 ImageFolder를 이용한 이미지 데이터 로딩 방법에 대해 알아보겠습니다. 기본적인 사용 예는 다음과 같습니다:

from torchvision.datasets import ImageFolder
from torchvision import transforms

data_transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
])

dataset = ImageFolder(root='./data', transform=data_transform)

설명

  • 데이터 구조: 각 클래스별로 하위 디렉토리를 두고, 그 안에 해당 클래스의 모든 이미지 파일을 저장합니다. 예를 들어, '강아지'와 '고양이'라는 클래스가 있다면, 루트 디렉토리 아래에 각각의 폴더를 만들어 이미지를 저장합니다.
  • 상속 관계: 이 클래스는 torchvision.datasets.DatasetFolder에서 상속받아 필요한 메소드를 오버라이드하여 사용자 정의 데이터셋을 만들 수 있습니다.

인수들

  • root (문자열): 데이터셋의 최상위 디렉토리 경로입니다.
  • transform (호출 가능, 선택 사항): PIL 이미지를 입력으로 받아 변환된 버전을 반환하는 함수 또는 변환기입니다. 예를 들어, 무작위로 이미지를 자르는 transforms.RandomCrop 등을 사용할 수 있습니다.
  • target_transform (호출 가능, 선택 사항): 타겟(일반적으로 클래스 레이블)을 입력으로 받아 변환하는 함수 또는 변환기입니다.
  • loader (호출 가능, 선택 사항): 이미지 파일의 경로를 주면 이를 불러오는 함수입니다.
  • is_valid_file (호출 가능, 선택 사항): 이미지 파일의 유효성을 확인하는 함수입니다.

속성

  • classes (리스트): 알파벳 순서대로 정렬된 클래스 이름 리스트입니다.
  • class_to_idx (딕셔너리): 클래스 이름을 키로, 해당 클래스의 인덱스를 값으로 가지는 딕셔너리입니다.
  • imgs (리스트): 이미지 경로와 클래스 인덱스를 튜플로 저장한 리스트입니다.

예제

다음과 같은 디렉토리 구조를 가정해 보겠습니다:

root/
    강아지/
        img1.png
        img2.png
    고양이/
        img3.png
        img4.png

위 구조를 사용하여 데이터를 로드하려면, root를 위 디렉토리의 경로로 설정하면 됩니다. 그러면 각 클래스 하위 디렉토리의 이미지 파일들이 읽혀지고, 각 이미지에 대해 해당 클래스의 레이블이 할당됩니다. 또한, transformtarget_transform 파라미터를 통해 이미지와 레이블을 전처리할 수 있습니다.

transform과 target_transform의 차이점

이 두 파라미터는 머신러닝과 딥러닝에서 데이터 전처리 및 증강에 주로 사용됩니다.

  1. transform (호출 가능, 선택 사항):
  • 역할: 입력 데이터(주로 이미지)를 처리하기 위한 파라미터입니다. PIL 이미지를 입력받아 변환된 버전을 반환합니다.
  • 예시: transforms.RandomCrop을 사용하여 이미지를 무작위로 잘라내거나, transforms.Resize를 사용하여 크기를 조절할 수 있습니다.
  1. target_transform (호출 가능, 선택 사항):
  • 역할: 목표 데이터(주로 클래스 레이블)를 처리하기 위한 파라미터입니다. 클래스 레이블을 입력받아 변환합니다.
  • 예시: torch.tensor를 사용하여 클래스 레이블을 PyTorch 텐서로 변환하거나 다른 필요에 따라 데이터를 처리할 수 있습니다.

두 파라미터의 주요 차이점은 transform은 입력 데이터를 다루고, target_transform은 목표 데이터를 다룬다는 점입니다.

태그: PyTorch ImageFolder 데이터 로딩 데이터 전처리

7월 3일 21:41에 게시됨