PyTorch

PyTorch 이미지 데이터 및 텍스트 데이터 로딩

PyExplorer 2025. 4. 7. 10:55
728x90

PyTorch 이미지 데이터 및 텍스트 데이터 로딩

PyTorch는 강력한 데이터 처리 기능을 제공하여 딥러닝 모델을 효율적으로 학습할 수 있도록 돕습니다. 특히, torchvisiontorchtext를 활용하면 이미지와 텍스트 데이터를 쉽게 로드하고 변환할 수 있습니다. 이번 포스팅에서는 PyTorch를 사용하여 이미지 및 텍스트 데이터를 로딩하는 방법을 상세히 설명하겠습니다.


1. PyTorch에서 데이터 로딩 개요

PyTorch는 DatasetDataLoader를 사용하여 데이터를 효율적으로 관리합니다.

  • torch.utils.data.Dataset: 데이터셋을 정의하고 개별 데이터를 불러오는 역할을 합니다.
  • torch.utils.data.DataLoader: 배치(batch) 단위로 데이터를 로딩하며, 데이터 섞기(shuffling) 및 병렬 처리(num_workers) 기능을 제공합니다.

데이터 로딩 과정은 다음과 같은 단계로 진행됩니다.

  1. Dataset 정의: torch.utils.data.Dataset을 상속하여 커스텀 데이터셋을 만들거나, torchvisiontorchtext에서 제공하는 데이터셋을 활용합니다.
  2. DataLoader 생성: DatasetDataLoader에 전달하여 배치(batch) 단위로 데이터를 불러옵니다.
  3. 데이터 변환 적용: torchvision.transforms 또는 torchtext.transforms를 이용하여 전처리를 수행합니다.

2. 이미지 데이터 로딩

PyTorch는 torchvision.datasetstorchvision.transforms를 활용하여 이미지 데이터를 쉽게 로딩하고 변환할 수 있습니다.

2.1 torchvision.datasets을 활용한 이미지 데이터 로딩

import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 데이터 변환 정의 (이미지 크기 조정, 정규화 등)
transform = transforms.Compose([
    transforms.Resize((32, 32)),   # 이미지 크기 조정
    transforms.ToTensor(),         # 텐서로 변환
    transforms.Normalize((0.5,), (0.5,))  # 정규화
])

# CIFAR-10 데이터셋 로딩
train_dataset = datasets.CIFAR10(root="./data", train=True, transform=transform, download=True)
test_dataset = datasets.CIFAR10(root="./data", train=False, transform=transform, download=True)

# DataLoader 생성
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

2.2 커스텀 이미지 데이터셋 로딩

2.2.1 ImageFolder를 활용한 이미지 데이터 로딩

from torchvision.datasets import ImageFolder

dataset = ImageFolder(root="./data/train", transform=transform)
loader = DataLoader(dataset, batch_size=32, shuffle=True)

2.2.2 커스텀 Dataset 클래스를 활용한 이미지 데이터 로딩

from torch.utils.data import Dataset
from PIL import Image
import os

class CustomImageDataset(Dataset):
    def __init__(self, image_dir, transform=None):
        self.image_dir = image_dir
        self.transform = transform
        self.image_files = os.listdir(image_dir)

    def __len__(self):
        return len(self.image_files)

    def __getitem__(self, idx):
        img_path = os.path.join(self.image_dir, self.image_files[idx])
        image = Image.open(img_path).convert("RGB")

        if self.transform:
            image = self.transform(image)

        return image

dataset = CustomImageDataset("./data/custom_images", transform=transform)
loader = DataLoader(dataset, batch_size=16, shuffle=True)

3. 텍스트 데이터 로딩

PyTorch는 torchtext를 통해 텍스트 데이터를 효과적으로 다룰 수 있습니다.

3.1 torchtext.datasets를 활용한 텍스트 데이터 로딩

from torchtext.datasets import IMDB
from torchtext.data.utils import get_tokenizer

# 데이터 다운로드 및 로딩
train_iter = IMDB(split='train')
tokenizer = get_tokenizer("basic_english")

# 첫 번째 데이터 확인
for label, line in train_iter:
    print(f"Label: {label}, Review: {line[:100]}...")  # 첫 100글자만 출력
    break

3.2 커스텀 텍스트 데이터 로딩

class CustomTextDataset(Dataset):
    def __init__(self, file_path, tokenizer):
        with open(file_path, "r", encoding="utf-8") as f:
            self.data = f.readlines()
        self.tokenizer = tokenizer

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        text = self.data[idx].strip()
        tokens = self.tokenizer(text)
        return tokens

# 예제 데이터셋 로딩
dataset = CustomTextDataset("data/text_data.txt", tokenizer)
loader = DataLoader(dataset, batch_size=4, shuffle=True)

4. 정리

이번 포스팅에서는 PyTorch를 활용하여 이미지 및 텍스트 데이터를 로딩하는 방법을 살펴보았습니다.

  • torchvision.datasetsImageFolder를 활용하여 이미지 데이터를 로딩하는 방법
  • torch.utils.data.Dataset을 상속하여 커스텀 데이터셋을 만드는 방법
  • torchtext.datasets을 사용하여 텍스트 데이터를 로딩하는 방법
  • 커스텀 텍스트 데이터셋을 정의하는 방법

PyTorch의 데이터 로딩 기능을 활용하면 딥러닝 모델을 보다 쉽게 학습시킬 수 있습니다.