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): EfficientNet-B3, ~12M embedding + ~91M classification params, ~15,000 species.
- ONNX conversion and the DFT-to-MatMul (
no_dft) optimization by justinchuby. - Labels from 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 |
![]() |
638 | 65.0 | 44.5 |
british-isles |
![]() |
776 | 68.4 | 45.4 |
central-europe |
![]() |
873 | 70.8 | 46.0 |
baltics |
![]() |
655 | 65.4 | 44.6 |
iberia |
![]() |
856 | 70.4 | 45.9 |
southern-europe |
![]() |
839 | 70.0 | 45.8 |
eastern-europe |
![]() |
739 | 67.5 | 45.2 |
iceland |
![]() |
591 | 63.9 | 44.3 |
svalbard |
![]() |
480 | 61.1 | 43.6 |
canary-islands |
![]() |
598 | 64.0 | 44.3 |
madeira |
![]() |
459 | 60.6 | 43.4 |
azores |
![]() |
426 | 59.8 | 43.2 |
Asia
| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---|---|---|
south-asia-peninsular |
![]() |
879 | 70.9 | 46.0 |
indo-gangetic |
![]() |
1406 | 83.9 | 49.3 |
himalaya |
![]() |
1407 | 83.9 | 49.3 |
japan |
![]() |
799 | 69.0 | 45.5 |
china-northeast |
![]() |
877 | 70.9 | 46.0 |
china-north-central |
![]() |
976 | 73.3 | 46.6 |
china-southeast |
![]() |
1373 | 83.1 | 49.1 |
china-southwest |
![]() |
1409 | 84.0 | 49.3 |
tibet |
![]() |
1407 | 83.9 | 49.3 |
North America
| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---|---|---|
north-america-east |
![]() |
999 | 73.9 | 46.8 |
north-america-west |
![]() |
1002 | 74.0 | 46.8 |
South America
| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---|---|---|
amazonia |
![]() |
3388 | 132.7 | 61.5 |
andes |
![]() |
3535 | 136.3 | 62.4 |
eastern-brazil |
![]() |
2184 | 103.0 | 54.1 |
southern-cone |
![]() |
1855 | 95.0 | 52.0 |
galapagos |
![]() |
336 | 57.6 | 42.7 |
Africa
| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---|---|---|
southern-africa |
![]() |
1002 | 74.0 | 46.8 |
reunion |
![]() |
274 | 56.1 | 42.3 |
mauritius |
![]() |
272 | 56.0 | 42.3 |
seychelles |
![]() |
318 | 57.2 | 42.6 |
cape-verde |
![]() |
346 | 57.8 | 42.7 |
sao-tome-principe |
![]() |
324 | 57.3 | 42.6 |
Oceania
| region | coverage | classes | fp32 MB | int8-arm MB |
|---|---|---|---|---|
australia-east |
![]() |
946 | 72.6 | 46.4 |
new-zealand |
![]() |
486 | 61.3 | 43.6 |
hawaii |
![]() |
478 | 61.1 | 43.6 |
new-caledonia |
![]() |
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.
Model tree for tphakala/Perch-v2-Models
Base model
cgeorgiaw/Perch




































