[2024-1 프로젝트] BirdCLEF 2024
BirdCLEF 2024 — Audio Classification via Mel-Spectrogram CNN
인도 남서부 웨스턴 가츠 산맥의 182종 조류 음성 자동 분류
Kaggle BirdCLEF 2024 | 643위 / 974팀 | Private ROC-AUC: 0.5880
개요
- 문제: 웨스턴 가츠 산맥의 조류 음성(OGG 파일)에서 182개 종을 자동 분류
- 접근: 오디오 → Mel-Spectrogram 이미지 → ImageNet 사전학습 CNN (ResNet50 → EfficientNetV2-B2)
- 결과: EfficientNetV2-B2, 최고 성능, CPU-only 추론 최적화
- 기술 스택: PyTorch / TensorFlow-Keras, librosa, albumentations, scikit-learn
1. 접근 방법 (Approach)
데이터 전처리
- 오디오 → Mel-Spectrogram:
- OGG 디코딩 → 모노 변환 (32kHz, 15초 고정)
- STFT (n_fft=2048, Hamming window) → Mel scale 필터뱅크
- 출력: 128×384 mel-spectrogram 이미지 (빠르기×주파수)
- 정규화 및 증강:
- Min-Max 정규화 → Z-score 표준화
- 3채널 복제 (ImageNet 호환성)
- 데이터 증강: Frequency Masking + Time Masking (SpecAugment) + Mixup (α=0.4)
모델 아키텍처
최종 모델: EfficientNetV2-B2 (ImageNet 사전학습)
- Backbone: EfficientNetV2-B2 (9.2M 파라미터)
- Head: GlobalAveragePooling2D → Dropout(0.5) → Dense(2048) → Softmax(182)
- Loss: CategoricalCrossentropy + label smoothing (0.02)
- Optimizer: Adam (lr=1e-3) + ReduceLROnPlateau
- 조기종료: EarlyStopping (patience=3)
추론 최적화
- CPU-only 환경 대응 (Kaggle 제약)
- 학습된 가중치를 Kaggle Dataset 업로드 → 5초 프레임 단위 추론
- 제출: 대회 표준 CSV 형식
2. 데이터셋
| 항목 | 상세 |
|---|---|
| 소스 | Kaggle BirdCLEF 2024 / Xeno-canto |
| 크기 | 24,459개 오디오 샘플, 182종 조류 |
| 클래스 | 조류 종 코드 (primary_label, 0~181) |
| 분할 | Train 19,567 / Val 4,892 (80:20) |
| 형식 | OGG 오디오, 메타데이터 CSV |
3. 모델 성능
모델 비교
| 모델 | 프레임워크 | Pretrained | 파라미터 | 비고 | | ——————— | ———– | ———- | ——– | ————– | | ResNet18 | PyTorch | ✅ | 11.7M | Baseline | | ResNet50 | Keras | ✅ | 23.5M | Kaggle 이식 | | EfficientNetV2-B2 | PyTorch | ✅ | 9.2M | 최종 선택 | | EfficientNetV2-B3 | PyTorch | ❌ | 14M | 성능 0.04 하락 |
Kaggle 리더보드 결과
| 구분 | 1위 | 우리 팀 | 평균 | | ————— | —— | ———– | ——— | | Public ROC-AUC | 0.7469 | 0.6229 | ~0.55 | | Private ROC-AUC | 0.6904 | 0.5880 | ~0.52 | | 순위 | 1위 | 643위 | 974팀 |
4. 주요 아이디어 및 결과
핵심 발견사항
ImageNet 사전학습의 중요성
Random 초기화 대비 사전학습 사용 시 +0.10 이상 성능 향상모델 크기 ≠ 성능
EfficientNetV2-B3 (14M) > B2 (9.2M) 파라미터이지만, 실제 성능은 B2가 우수 → 과적합 위험Epoch 계획 최적화
Epoch 10~20 범위에서 최적 수렴, 이후 성능 하락 → EarlyStopping 필수증강 기법의 효과
Mixup + SpecAugment (Frequency/Time Masking) 조합으로 과적합 억제
한계점
- CPU-only 추론 환경으로 인한 모델 용량 제약
- 클래스 불균형 처리 미흡 (일부 종은 매우 적은 샘플)
- 음성 도메인과 ImageNet 도메인의 차이
- 평가 지표 (내부 validation은 accuracy/AUC, 대회는 ROC-AUC)
5. 프로젝트 구조
1
2
3
4
5
6
7
8
9
10
11
12
BirdCLEF2024/
├── BirdCLEFcode/
│ ├── Pytorch-Resnet18.ipynb # ResNet18 baseline (추론)
│ ├── Pytorch-Augmentation.ipynb # ResNet18 학습 + 데이터 증강
│ ├── Keras-Resnet50.ipynb # ResNet50 (Kaggle 제출용)
│ └── Keras-Resnet502.ipynb # ResNet50 v2 (개선)
│
└── BirdCLEF보고서/
├── AI를위한딥러닝_5조_final.pdf # 최종 발표자료 (17페이지)
├── BirdCLEF 2024 Report.pdf # 보고서 (5페이지)
├── 성능비교.png # 모델 성능 비교 차트
└── model_parameters_* # 파라미터 비교표/그래프
실행 순서:
- 학습:
Pytorch-Augmentation.ipynb(Google Colab, GPU) - 추론:
Keras-Resnet502.ipynb(Kaggle Notebook, CPU)
6. 팀 및 참고
| 이름 | 역할 |
|---|---|
| 조다영 | 모델 실험 및 최적화 |
| 익균 | PyTorch baseline 구현 |
| 강태영 | PyTorch→Keras 이식, 추론 최적화, 오류 및 환경제약 해결, 보고서 작성 |
참고 문헌:
- Kaggle BirdCLEF 2024
- EfficientNet: Rethinking Model Scaling for CNNs (Tan & Le, 2019)
- Mixup: Beyond Empirical Risk Minimization (Zhang et al., 2018)
- SpecAugment: A Simple Data Augmentation for ASR (Park et al., 2019)
- Deep Residual Learning for Image Recognition (He et al., 2016)
데이터 라이선스: Kaggle Competition Terms / Xeno-canto (Creative Commons 개별 라이선스)