torchvision은 PyTorch 기반 딥러닝 프로젝트에서 이미지 처리와 컴퓨터 비전 모델 구축을 지원하는 핵심 패키지다. 주요 구성 요소는 다음과 같다:
- torchvision.datasets: 표준 데이터셋 로딩 인터페이스 제공
- torchvision.models: 사전 학습된 네트워크 아키텍처 포함
- torchvision.transforms: 이미지 전처리 및 증강 연산
- torchvision.utils: 보조 유틸리티 함수
이미지 변환 파이프라인 구성
transforms 모듈의 Compose 클래스를 활용하면 여러 변환 연산을 순차적으로 적용할 수 있다. 아래 예시는 입력 이미지를 정규화된 텐서로 변환하는 전형적인 파이프라인을 보여준다:
# 이미지 전처리 파이프라인 정의
preprocess = transforms.Compose([
transforms.Resize((128, 128)), # 해상도 조정
transforms.RandomHorizontalFlip(), # 수평 뒤집기 (증강)
transforms.ToTensor(), # 텐서 변환
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]) # ImageNet 통계값 기준 정규화
])
내장 데이터셋 활용
torchvision.datasets는 연구 및 실험에 자주 사용되는 이미지 데이터셋을 즉시 사용 가능한 형태로 제공한다. 지원하는 데이터셋에는 다음이 포함된다:
- MNIST, Fashion-MNIST
- CIFAR-10, CIFAR-100
- COCO (Captioning, Detection)
- ImageNet, ImageFolder
- SVHN, STL10, LSUN
사용자 정의 폴더 구조에서도 데이터를 불러올 수 있다:
# 사용자 정의 변환 설정
augmentation = transforms.Compose([
transforms.Grayscale(num_output_channels=1),
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
# MNIST 데이터 로드
mnist_data = datasets.MNIST(
root='./dataset/',
train=True,
transform=augmentation,
download=True
)
# 배치 단위 데이터 공급
data_feeder = torch.utils.data.DataLoader(
dataset=mnist_data,
batch_size=64,
shuffle=True,
num_workers=4
)
사전 학습 모델 활용
models 서브모듈은 최신 아키텍처를 가중치와 함께 제공한다. 주요 모델로는 ResNet 계열, EfficientNet, Vision Transformer(ViT), ConvNeXt 등이 있다.
가중치 초기화 방식 선택:
from torchvision import models
# 랜덤 초기화 모델
vgg_net = models.vgg16(weights=None)
# ImageNet 사전 학습 가중치 로드
resnet = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V2)
# 최신 가중치 자동 선택
efficientnet = models.efficientnet_b0(weights='DEFAULT')
완전한 학습 파이프라인 예시
아래 코드는 MNIST 데이터를 처리하여 배치 단위로 공급하는 전체 흐름을 보여준다:
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
# 변환 체인: 28x28 → 128x128 텐서
image_pipeline = transforms.Compose([
transforms.Resize(128),
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
# 훈련 세트 구성
train_set = datasets.MNIST(
root='./mnist_data/',
train=True,
transform=image_pipeline,
download=True
)
# 검증 세트 구성
val_set = datasets.MNIST(
root='./mnist_data/',
train=False,
transform=image_pipeline
)
# 데이터 로더 설정
train_batches = DataLoader(train_set, batch_size=32, shuffle=True)
val_batches = DataLoader(val_set, batch_size=32, shuffle=False)
print(f"훈련 샘플 수: {len(train_set)}")
print(f"훈련 배치 수: {len(train_batches)}")
이러한 구성 요소들을 조합하면 복잡한 컴퓨터 비전 워크플로우를 효율적으로 구현할 수 있다.