딥러닝에서 이미지 증강이 중요한 이유
컴퓨터 비전에서는 이미지 증강(Image Augmentation)이 딥러닝 모델의 일반화 성능을 향상시키는 데 매우 중요합니다. 라벨을 보존하면서 입력 이미지에 다양한 변형을 가함으로써, 학습 데이터의 다양성을 인위적으로 확장하고 과적합(overfitting)을 줄이며, 모델의 견고함(robustness)을 높일 수 있습니다.
특히 계층적 특성을 학습하는 CNN(합성곱 신경망)이나 공간 정보를 이용하는 Vision Transformer(ViT) 모델에서는 입력의 다양성이 모델이 더 일반적인 특성을 학습하도록 유도합니다. 이는 정보 이론 관점에서 출력 예측에 유의미한 특성과의 상호정보(Mutual Information)를 증대시키고, 노이즈를 제거하는 효과와도 같습니다.
주요 이미지 증강 기법과 파라미터 설명
1. RandomHorizontalFlip
목적: 일정 확률로 이미지를 좌우로 뒤집어 좌우 대칭에 대한 학습 효과를 부여합니다.
from torchvision.transforms import v2 as transforms
transform = transforms.Compose([
transforms.RandomHorizontalFlip(p=0.5)
])
p
: 이미지를 좌우로 뒤집을 확률입니다. 0.5는 50% 확률을 의미합니다.
2. RandomResizedCrop
목적: 이미지의 일부 영역을 무작위로 잘라내고 지정된 크기로 리사이징하여 다양한 스케일 학습을 유도합니다.
transform = transforms.Compose([
transforms.RandomResizedCrop(size=(224, 224), scale=(0.8, 1.0), ratio=(0.75, 1.33))
])
size
: 출력 이미지의 목표 크기 (높이, 너비)입니다.scale
: 원본 이미지 면적 대비 자를 영역의 비율 범위입니다. (0.8, 1.0)은 전체 면적의 80%~100% 범위에서 잘라냅니다.ratio
: 잘라낼 영역의 가로세로 비율 범위입니다.
3. ColorJitter
목적: 밝기, 대비, 채도, 색조 등을 랜덤하게 변화시켜 다양한 조명 조건을 시뮬레이션합니다.
transform = transforms.Compose([
transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1)
])
brightness
: 밝기를 [1-0.2, 1+0.2] 범위 내에서 무작위로 조정합니다.contrast
: 대비 조정 비율입니다.saturation
: 채도 조정 비율입니다.hue
: 색조 조정 범위입니다. 값은 -0.5 ~ 0.5 사이여야 하며, 작은 값은 색 온도 변화를 시뮬레이션합니다.
4. GaussianBlur
목적: 가우시안 블러를 통해 이미지 흐림 효과를 적용하여 초점 흐림, 센서 노이즈 등을 모델이 견딜 수 있게 합니다.
transform = transforms.Compose([
transforms.GaussianBlur(kernel_size=3, sigma=(0.1, 2.0))
])
kernel_size
: 필터 크기를 지정합니다.sigma
: 가우시안 분포의 표준편차입니다. 범위를 지정하면 무작위로 선택됩니다.
5. RandomAffine
목적: 회전, 이동, 스케일, 기울임 등을 한 번에 적용하는 기하학적 변환입니다.
transform = transforms.Compose([
transforms.RandomAffine(degrees=30, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=10)
])
degrees
: 회전 가능한 각도 범위입니다.translate
: 이미지 크기 대비 최대 이동 비율입니다 $\text{(x축, y축)}$.scale
: 크기 조정 범위입니다. $\text{(예: 0.9~1.1 배)}$.shear
: 이미지의 기울임 각도입니다.
6. Normalize
목적: 평균과 표준편차를 기준으로 픽셀 값을 정규화합니다. 특히 사전 학습 모델을 사용할 때 필수입니다.
transform = transforms.Compose([
transforms.ToImage(),
transforms.ConvertImageDtype(torch.float32),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
mean
: 채널별 평균값입니다 (보통 ImageNet 기준).std
: 채널별 표준편차입니다.
7. 전체 증강 파이프라인 예시
from torchvision.transforms import v2 as transforms
import torch
train_transforms = transforms.Compose([
transforms.RandomResizedCrop((224, 224)),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(0.2, 0.2, 0.2, 0.1),
transforms.RandomAffine(15),
transforms.GaussianBlur(3),
transforms.ToImage(),
transforms.ConvertImageDtype(torch.float32),
transforms.Normalize([0.485, 0.456, 0.406],
[0.229, 0.224, 0.225]),
])
맺음말
이미지 증강은 컴퓨터 비전 기반 딥러닝 모델 학습에서 빠질 수 없는 핵심 전략입니다. PyTorch의 torchvision.transforms.v2
API를 활용하면 다양한 이미지 변환을 손쉽게 구현할 수 있으며, 이는 모델의 일반화와 정확도 향상에 크게 기여합니다.
참고 문헌
- PyTorch 공식 문서: torchvision.transforms.v2
- Shorten, C. & Khoshgoftaar, T.M. (2019). "A survey on image data augmentation for deep learning". Journal of Big Data, 6(60).
- Dosovitskiy, A., et al. (2021). "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale". ICLR.
'AI' 카테고리의 다른 글
이미지 분류 모델 - 모델 저장, 추론, 하이퍼파라미터 튜닝까지 (0) | 2025.05.04 |
---|---|
이미지 분류 모델 가이드: ResNet18 파인튜닝 (0) | 2025.05.03 |
SVD와 Truncated SVD: 이론, 구현 및 딥러닝/머신러닝 활용 (2) | 2025.05.01 |
FixMatch 논문 완전 분석: 간결하면서 강력한 반지도 학습(Semi-Supervised) 알고리즘 (0) | 2025.04.30 |
컴퓨터 비전에서 준지도학습(Semi-Supervised Learning) 소개 및 최신 알고리즘 비교 분석 (0) | 2025.04.30 |