Deep Learning study

데이터 증강(Data Augmentation) 기법 모아보기 본문

AI/Pytorch

데이터 증강(Data Augmentation) 기법 모아보기

illinaire 2025. 4. 17. 21:33
반응형
데이터 증강(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 등 정규화 기법과 함께 사용 시 효과 상호작용 실험
  • 학습 곡선 관찰: 과도한 증강은 학습 지연 유발
  • 도메인 특화 증강(의료 이미지, 법률 텍스트 등) 연구

결론 및 다음 단계

데이터 증강은 모델의 일반화 성능을 높이는 핵심 기법입니다. 여러 기법을 조합해 실험하고, 도메인 특성에 맞는 적절한 증강 파이프라인을 구축하세요.

  1. 증강 강도 및 순서(hyper-parameters) 최적화
  2. AutoAugment, RandAugment 등의 자동화 도구 적용
  3. 증강된 데이터와 원본 데이터의 분포 분석

참고 문헌

  1. Shorten, C., & Khoshgoftaar, T. M. (2019). A survey on Image Data Augmentation for Deep Learning. Journal of Big Data.
  2. Zhang, H., et al. (2018). mixup: Beyond Empirical Risk Minimization. ICLR.
  3. Yun, S., et al. (2019). CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features. ICCV.
반응형
Comments