File size: 1,455 Bytes
f0aa662
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
---
license: cc-by-4.0
tags:
- audio
- bird-sound
- wildlife
- bioacoustics
- multi-label-classification
- birdclef
---

# BirdCLEF+ 2026 — ECA-NFNet-L0 Wildlife Classifier

Fine-tuned ECA-NFNet-L0 for multi-label wildlife species identification from soundscape recordings in Brazil's Pantanal wetlands.

## Model Details

- **Architecture**: ECA-NFNet-L0 (22.4M parameters), pretrained on ImageNet
- **Task**: Multi-label classification — 234 wildlife species
- **Input**: Log-mel spectrogram (128 bins, 32 kHz, 5-second windows, 128x128 px)
- **Output**: Sigmoid scores per species per 5-second window
- **Val AUC**: 0.9603 | **Kaggle Public AUC**: 0.865 (Rank 38/500)
- **Training**: 34 epochs, Focal-BCE loss, EMA decay=0.9997, Mixup + SpecAugment

## Live Demo

Try the interactive demo: [jingxizhang/birdclef2026-demo](https://huggingface.co/spaces/jingxizhang/birdclef2026-demo)

## Usage

```python
import torch, timm
from huggingface_hub import hf_hub_download

path = hf_hub_download(repo_id="jingxizhang/birdclef2026-model", filename="best_model.pth")
ckpt = torch.load(path, map_location="cpu", weights_only=False)
model = timm.create_model(
    ckpt["cfg"]["model_name"], pretrained=False,
    num_classes=len(ckpt["species_list"])
)
model.load_state_dict(ckpt["model_state_dict"])
model.eval()
print("Species:", ckpt["species_list"][:5])
```

## Competition

[BirdCLEF+ 2026 on Kaggle](https://www.kaggle.com/competitions/birdclef-2026)