클립보드에 복사되었습니다
Post

[2024-1 프로젝트] BirdCLEF 2024

[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)

데이터 전처리

  1. 오디오 → Mel-Spectrogram:
    • OGG 디코딩 → 모노 변환 (32kHz, 15초 고정)
    • STFT (n_fft=2048, Hamming window) → Mel scale 필터뱅크
    • 출력: 128×384 mel-spectrogram 이미지 (빠르기×주파수)
  2. 정규화 및 증강:
    • 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. 주요 아이디어 및 결과

핵심 발견사항

  1. ImageNet 사전학습의 중요성
    Random 초기화 대비 사전학습 사용 시 +0.10 이상 성능 향상

  2. 모델 크기 ≠ 성능
    EfficientNetV2-B3 (14M) > B2 (9.2M) 파라미터이지만, 실제 성능은 B2가 우수 → 과적합 위험

  3. Epoch 계획 최적화
    Epoch 10~20 범위에서 최적 수렴, 이후 성능 하락 → EarlyStopping 필수

  4. 증강 기법의 효과
    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_*                  # 파라미터 비교표/그래프

실행 순서:

  1. 학습: Pytorch-Augmentation.ipynb (Google Colab, GPU)
  2. 추론: Keras-Resnet502.ipynb (Kaggle Notebook, CPU)

6. 팀 및 참고

이름역할
조다영모델 실험 및 최적화
익균PyTorch baseline 구현
강태영PyTorch→Keras 이식, 추론 최적화, 오류 및 환경제약 해결, 보고서 작성

참고 문헌:

데이터 라이선스: Kaggle Competition Terms / Xeno-canto (Creative Commons 개별 라이선스)

This post is licensed under CC BY 4.0 by the author.