File size: 8,423 Bytes
5c4f5b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74679a7
5c4f5b8
 
 
 
 
 
74679a7
5c4f5b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75321e4
 
 
 
5c4f5b8
 
d6fa357
5c4f5b8
0b6d0e8
 
 
 
 
0bebb40
 
5c4f5b8
0bebb40
 
 
 
 
 
 
6642faf
8dc1819
 
 
4116542
 
0b6d0e8
 
 
 
 
5e4538c
 
 
0b6d0e8
5e4538c
f5bf12f
5e4538c
 
 
0b6d0e8
 
 
 
 
 
 
 
 
 
 
 
d6fa357
 
 
 
4116542
5c4f5b8
0b6d0e8
 
 
 
 
8dc1819
4116542
 
 
 
0b6d0e8
 
 
 
 
 
 
8dc1819
4116542
0b6d0e8
74679a7
5c4f5b8
74679a7
5c4f5b8
 
 
74679a7
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
---
pretty_name: Perch v2 Models (full + regional catalog)
license: apache-2.0
base_model:
- cgeorgiaw/Perch
tags:
- bioacoustics
- birdnet
- perch
- bird
- vocalization
- audio-classification
- onnx
library_name: onnx
---

# Perch v2 Models (full + regional catalog)

Google's Perch v2 bioacoustic classifier in three deployment variants, plus a catalog of **region-specific slices** that are smaller and faster while staying numerically identical (bit-exact) to the full model on the species they keep.

## Origin and attribution

- **Perch v2** by **Google Research** ([bird-vocalization-classifier](https://www.kaggle.com/models/google/bird-vocalization-classifier/)): EfficientNet-B3, ~12M embedding + ~91M classification params, ~15,000 species.
- ONNX conversion and the DFT-to-MatMul (`no_dft`) optimization by [justinchuby](https://huggingface.co/justinchuby/Perch-onnx).
- Labels from [cgeorgiaw/Perch](https://huggingface.co/cgeorgiaw/Perch) (iNaturalist taxonomy).
- Regional slicing uses the **BirdNET Geomodel v3.0** range filter (birdnet-team/geomodel) to pick each region's species.

## Variants and hardware

| filename token | precision | best for |
|---|---|---|
| `_fp32` | FP32, with DFT | GPU (CUDA/TensorRT), Intel CPU |
| `_no_dft_fp32` | FP32, DFT removed | OpenVINO (RPi5 fast path); also runs on ORT/CUDA |
| `_int8_arm` | partial INT8 (MatMul-only) | ARM CPU / Raspberry Pi, low RAM |

## Full model

| file | MB |
|---|---:|
| `full/perch_v2_fp32.onnx` | 409 |
| `full/perch_v2_no_dft_fp32.onnx` | 413 |
| `full/perch_v2_int8_arm.onnx` | 131 |
| `full/perch_v2_labels.txt` | 14,795 classes |

## Why regional models

These slices are built for **real-time detection on resource-constrained devices**, phones, Raspberry Pi and other single-board computers, where running the full 14,795-class Perch v2 continuously is costly in both RAM and CPU. Most of that cost goes to recognising species that cannot occur at the listener's location. Restricting the model to a region's species shrinks the memory footprint and the per-inference compute (the classifier head is ~88% of the model), so an always-on detector keeps up with the live audio stream and leaves headroom for the rest of the application, on hardware where the full model would struggle. Each tile stays **bit-exact** to the full model on the species it keeps; the only change is that out-of-region species are not emitted, which at a fixed monitoring location is exactly what you want.

## Regional catalog

Each tile: BirdNET Geomodel v3.0 range filter (top ~800 species for temperate regions, ~1200 for bird-rich tropical/subtropical ones, up to ~3500 for the hyper-diverse Neotropics) + 198 FSD50K sound events + a 27-species cosmopolitan core. Ships `_no_dft_fp32` (OpenVINO/GPU) and `_int8_arm` (ARM) + labels + indices. All bit-exact vs the full model on the species they keep.

Each tile folder also has `coverage.png` (a map of the region it covers) and `metadata.json` (species count, covered countries, and the continental `group` it belongs to).

Tiles are organised by continent below. `regional/groups.json` lists the same grouping (ordered continents -> tiles) in one file, and each tile's `metadata.json` carries its `group` / `group_display` / `group_order`, so an application can rebuild these sections without scraping this table.

### Europe

| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---:|---:|---:|
| `nordic` | <img src="regional/nordic/coverage.png" width="210"> | 638 | 65.0 | 44.5 |
| `british-isles` | <img src="regional/british-isles/coverage.png" width="210"> | 776 | 68.4 | 45.4 |
| `central-europe` | <img src="regional/central-europe/coverage.png" width="210"> | 873 | 70.8 | 46.0 |
| `baltics` | <img src="regional/baltics/coverage.png" width="210"> | 655 | 65.4 | 44.6 |
| `iberia` | <img src="regional/iberia/coverage.png" width="210"> | 856 | 70.4 | 45.9 |
| `southern-europe` | <img src="regional/southern-europe/coverage.png" width="210"> | 839 | 70.0 | 45.8 |
| `eastern-europe` | <img src="regional/eastern-europe/coverage.png" width="210"> | 739 | 67.5 | 45.2 |
| `western-palearctic` | <img src="regional/western-palearctic/coverage.png" width="210"> | 1599 | 88.7 | 50.5 |
| `iceland` | <img src="regional/iceland/coverage.png" width="210"> | 591 | 63.9 | 44.3 |
| `svalbard` | <img src="regional/svalbard/coverage.png" width="210"> | 480 | 61.1 | 43.6 |
| `canary-islands` | <img src="regional/canary-islands/coverage.png" width="210"> | 598 | 64.0 | 44.3 |
| `madeira` | <img src="regional/madeira/coverage.png" width="210"> | 459 | 60.6 | 43.4 |
| `azores` | <img src="regional/azores/coverage.png" width="210"> | 426 | 59.8 | 43.2 |

### Asia

| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---:|---:|---:|
| `south-asia-peninsular` | <img src="regional/south-asia-peninsular/coverage.png" width="210"> | 879 | 70.9 | 46.0 |
| `indo-gangetic` | <img src="regional/indo-gangetic/coverage.png" width="210"> | 1406 | 83.9 | 49.3 |
| `himalaya` | <img src="regional/himalaya/coverage.png" width="210"> | 1407 | 83.9 | 49.3 |
| `japan` | <img src="regional/japan/coverage.png" width="210"> | 799 | 69.0 | 45.5 |
| `china-northeast` | <img src="regional/china-northeast/coverage.png" width="210"> | 877 | 70.9 | 46.0 |
| `china-north-central` | <img src="regional/china-north-central/coverage.png" width="210"> | 976 | 73.3 | 46.6 |
| `china-southeast` | <img src="regional/china-southeast/coverage.png" width="210"> | 1373 | 83.1 | 49.1 |
| `china-southwest` | <img src="regional/china-southwest/coverage.png" width="210"> | 1409 | 84.0 | 49.3 |
| `tibet` | <img src="regional/tibet/coverage.png" width="210"> | 1407 | 83.9 | 49.3 |

### North America

| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---:|---:|---:|
| `north-america-east` | <img src="regional/north-america-east/coverage.png" width="210"> | 999 | 73.9 | 46.8 |
| `north-america-west` | <img src="regional/north-america-west/coverage.png" width="210"> | 1002 | 74.0 | 46.8 |

### South America

| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---:|---:|---:|
| `amazonia` | <img src="regional/amazonia/coverage.png" width="210"> | 3388 | 132.7 | 61.5 |
| `andes` | <img src="regional/andes/coverage.png" width="210"> | 3535 | 136.3 | 62.4 |
| `eastern-brazil` | <img src="regional/eastern-brazil/coverage.png" width="210"> | 2184 | 103.0 | 54.1 |
| `southern-cone` | <img src="regional/southern-cone/coverage.png" width="210"> | 1855 | 95.0 | 52.0 |
| `galapagos` | <img src="regional/galapagos/coverage.png" width="210"> | 336 | 57.6 | 42.7 |

### Africa

| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---:|---:|---:|
| `southern-africa` | <img src="regional/southern-africa/coverage.png" width="210"> | 1002 | 74.0 | 46.8 |
| `reunion` | <img src="regional/reunion/coverage.png" width="210"> | 274 | 56.1 | 42.3 |
| `mauritius` | <img src="regional/mauritius/coverage.png" width="210"> | 272 | 56.0 | 42.3 |
| `seychelles` | <img src="regional/seychelles/coverage.png" width="210"> | 318 | 57.2 | 42.6 |
| `cape-verde` | <img src="regional/cape-verde/coverage.png" width="210"> | 346 | 57.8 | 42.7 |
| `sao-tome-principe` | <img src="regional/sao-tome-principe/coverage.png" width="210"> | 324 | 57.3 | 42.6 |

### Oceania

| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---:|---:|---:|
| `australia-east` | <img src="regional/australia-east/coverage.png" width="210"> | 946 | 72.6 | 46.4 |
| `new-zealand` | <img src="regional/new-zealand/coverage.png" width="210"> | 486 | 61.3 | 43.6 |
| `hawaii` | <img src="regional/hawaii/coverage.png" width="210"> | 478 | 61.1 | 43.6 |
| `new-caledonia` | <img src="regional/new-caledonia/coverage.png" width="210"> | 377 | 58.6 | 42.9 |

## Usage

Each model takes 5 s of 32 kHz mono audio (`[1, 160000]`) and outputs a `label` vector of logits over its species list; pair it with the sibling `*_labels.txt` (line count matches the logit count). Pick a variant by hardware (table above). Confidence is a softmax over the model's own classes, so a regional tile normalizes over fewer species than the full model; recalibrate detection thresholds per model.

## Provenance

Regional slices are gathered from the ProtoPNet head of `perch_v2_no_dft.onnx` and validated bit-exact against the full model on the species they keep. Perch v2 is by Google; see the license above.