Deep Learning study
데이터 증강(Data Augmentation) 기법 모아보기 본문
반응형
데이터 증강(Data Augmentation) 기법 모아보기
포스트 요약: 이미지, 텍스트, 오디오 도메인에서 모델의 일반화 성능을 향상시키는 다양한 데이터 증강 기법을 이론 배경, 수식 설명, 구현 예시, 장단점 비교 표까지 자세히 소개합니다.
1. 서론
데이터 증강은 학습용 데이터에 인위적인 변형을 가해 데이터셋의 크기와 다양성을 증가시키는 기법입니다.[1] 이는 과적합을 완화하고 모델의 일반화 성능을 크게 향상시키며, 특히 데이터가 제한적일 때 필수적입니다.
2. 이미지 증강 기법
2.1 기본 기법
- 회전(Rotation), 수평/수직 뒤집기(Flip), 크롭(Crop)
- 컬러 조정(Color Jitter): 밝기(brightness), 대비(contrast), 채도(saturation) 변화
- 노이즈 추가(Noise Injection): 가우시안 노이즈 등
from torchvision import transforms
img_transforms = transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(p=0.5),
transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),
transforms.ToTensor()
])
2.2 MixUp
두 샘플을 선형 결합하는 기법으로, 라벨도 함께 혼합합니다:
\[
\tilde{x} = \lambda x_i + (1-\lambda)x_j,\quad
\tilde{y} = \lambda y_i + (1-\lambda)y_j
\]
여기서 \(\lambda \sim \mathrm{Beta}(\alpha, \alpha)\)입니다.[2]
import torch
def mixup(x, y, alpha=1.0):
lam = torch.distributions.Beta(alpha, alpha).sample().item()
idx = torch.randperm(x.size(0))
x2, y2 = x[idx], y[idx]
x_mix = lam * x + (1 - lam) * x2
y_mix = lam * y + (1 - lam) * y2
return x_mix, y_mix
2.3 CutMix
이미지의 일부분을 잘라 다른 이미지로 교체하고 라벨을 비율에 맞춰 혼합합니다.[3]
import numpy as np
def cutmix(x, y, alpha=1.0):
lam = np.random.beta(alpha, alpha)
bbx1, bby1, bbx2, bby2 = rand_bbox(x.size(), lam)
x2 = x[torch.randperm(x.size(0))]
x[:, :, bbx1:bbx2, bby1:bby2] = x2[:, :, bbx1:bbx2, bby1:bby2]
lam = 1 - ((bbx2 - bbx1)*(bby2 - bby1) / (x.size(-1)*x.size(-2)))
y_mix = lam * y + (1 - lam) * y[torch.randperm(x.size(0))]
return x, y_mix
3. 텍스트 증강 기법
- Synonym Replacement: 단어를 유의어로 교체
- Random Insertion/Deletion/Swap
- Back‑Translation: 문장을 다른 언어로 번역 후 원문으로 재번역
import nlpaug.augmenter.word as naw
aug = naw.SynonymAug(aug_src='wordnet')
text = "The quick brown fox jumps over the lazy dog."
aug_text = aug.augment(text)
print(aug_text)
4. 오디오 증강 기법
- 시간 이동(Time Shift), 속도/피치 변경(Pitch/Speed)
- 배경 잡음 추가(Background Noise)
- Time/Frequency Masking(SpecAugment)
import torchaudio
from torchaudio import transforms
waveform, sr = torchaudio.load('sample.wav')
aug = transforms.FrequencyMasking(freq_mask_param=15)
wave_aug = aug(waveform)
5. 증강 전략 비교
| 기법 | 도메인 | 장점 | 단점 |
|---|---|---|---|
| Geometric Transforms | 이미지 | 간단, 효과적 | 기울기 민감… |
| MixUp / CutMix | 이미지 | 라벨 스무딩, regularization | 시각적 의미 손실 |
| Synonym Replacement | 텍스트 | 쉬운 구현 | 의미 왜곡 가능 |
| Back‑Translation | 텍스트 | 다양한 문장 구조 생성 | 시간/자원 소모 |
| SpecAugment | 오디오 | 강력한 일반화 | 초기 파라미터 튜닝 필요 |
6. 활용 팁 & 주의사항
- 배치 정규화, Dropout 등 정규화 기법과 함께 사용 시 효과 상호작용 실험
- 학습 곡선 관찰: 과도한 증강은 학습 지연 유발
- 도메인 특화 증강(의료 이미지, 법률 텍스트 등) 연구
결론 및 다음 단계
데이터 증강은 모델의 일반화 성능을 높이는 핵심 기법입니다. 여러 기법을 조합해 실험하고, 도메인 특성에 맞는 적절한 증강 파이프라인을 구축하세요.
- 증강 강도 및 순서(hyper-parameters) 최적화
- AutoAugment, RandAugment 등의 자동화 도구 적용
- 증강된 데이터와 원본 데이터의 분포 분석
참고 문헌
- Shorten, C., & Khoshgoftaar, T. M. (2019). A survey on Image Data Augmentation for Deep Learning. Journal of Big Data.
- Zhang, H., et al. (2018). mixup: Beyond Empirical Risk Minimization. ICLR.
- Yun, S., et al. (2019). CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features. ICCV.
반응형
'AI > Pytorch' 카테고리의 다른 글
| GPU 메모리·연산 효율 최적화 팁 (0) | 2025.04.17 |
|---|---|
| 자주 만나는 PyTorch 에러 해결법 모음 (0) | 2025.04.17 |
| 배치 정규화(Batch Normalization)의 비밀: 원리, 구현, 활용 (0) | 2025.04.17 |
| 과적합 vs 과소적합: 원인, 진단, 해결법 완전 정복 (0) | 2025.04.17 |
| 학습률 스케줄러(Learning Rate Scheduler) 완벽 가이드 (0) | 2025.04.17 |
Comments