Overview
- 정의: 기존 학습 데이터를 인위적으로 변형·추가하여 데이터 다양성을 높이는 기법
- 목적: 일반화 성능 향상, 과적합 방지, 데이터 부족 문제 완화
- 중요성: 증강의 강도(다양성)와 연산 비용 간 트레이드오프가 존재함
Pros
- 모델의 일반화 성능 향상 → 다양한 데이터 분포에 적응 가능
- 과적합(Overfitting) 완화 → 학습 데이터 암기 방지
- 데이터 다양성 증가 → 실제 환경의 변동성에 대응
- 소량 데이터 상황에서도 효과적
Cons
- 연산량 증가 → 학습 속도 저하
- CPU 병목(I/O Bottleneck) → CPU에서 증강 후 GPU로 전송 시 지연 발생
- 클래스 경계 모호화(Class Boundary Confusion)
- 과도한 변형이 클래스 간 특징을 흐림
- 예: 색상 증강 → 유사 색상 과일(바나나-파파야, 오렌지-당근) 오인식
- 예: 회전 증강 → 숫자 9를 6으로 인식
- 클래스 분포 중첩(Distribution Overlap)
- 강한 증강이 서로 다른 클래스의 데이터 분포를 겹치게 만들어 분류 혼동 유발
- 클래스 단위 성능 저하 가능성
Computational Perspective
- 증강 연산이 CPU에서 수행되면 GPU로 데이터를 제때 전달하지 못해 병목 발생
- GPU 기반 증강을 사용하면 연산을 병렬화하여 속도 개선 가능
| Tool | Framework | 비고 |
|---|
| torchvision.transforms.v2 | PyTorch | GPU 텐서 기반 변환 지원 |
| NVIDIA DALI | PyTorch / TF | 고성능 데이터 파이프라인 |
| Kornia | PyTorch | GPU에서 실행되는 differentiable CV 라이브러리 |
| tf.image / Keras Layers | TensorFlow | GPU 내장 증강 기능 제공 |
Trade-off Summary
| 관점 | 증강 강도 증가 시 | 장점 | 단점 | 조건 |
|---|
| 일반화 성능 | 초기 향상 → 과도 시 저하 | 다양한 데이터 학습 | 클래스 경계 모호화 | 데이터셋 크기 고려 |
| 연산 효율성 | CPU 병목 심화 | - | 처리 속도 감소 | GPU 증강으로 완화 |
| 데이터 품질 | 불안정 | 다양성 증가 | 레이블 안전성 위반 | 도메인 지식 필요 |
적절한 증강 강도와 빈도가 성능과 효율의 균형을 결정함
Design Guidelines
- 증강 강도와 확률을 점진적으로 조정할 것
- 데이터셋 특성(자연 이미지, 숫자, 의료영상 등)에 맞는 증강 조합 선택
- 클래스 불균형 고려: 소수 클래스는 보수적 증강, 다수 클래스는 적극적 증강
- GPU 병목 최소화 → DALI, Kornia 등 GPU 기반 도구 사용
- 증강과 학습 병렬화로 전체 처리 시간 단축
- 검증 전략: 증강 적용 전후 validation set에서 모니터링
- 평균 정확도 (average accuracy) + 클래스별 정확도 (per-class accuracy)
- 모호한/세밀한 클래스 성능 특별 관찰
- F1-score, macro-average 등 불균형 이슈 반영 메트릭 사용
- 자동 증강 기법 고려: AutoAugment, RandAugment로 수동 튜닝 비용 절감