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 | ONNX Runtime on any CPU (recommended); CUDA and OpenVINO GPU. OpenVINO CPU only at f32 |
_int8_arm |
partial INT8 (MatMul-only) | withdrawn 2026-11-15, kept for existing installs only, see Withdrawn files |
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 (withdrawn) |
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 + 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 |
|---|---|---|---|
nordic |
![]() |
638 | 65.0 |
british-isles |
![]() |
776 | 68.4 |
central-europe |
![]() |
873 | 70.8 |
baltics |
![]() |
655 | 65.4 |
iberia |
![]() |
856 | 70.4 |
southern-europe |
![]() |
839 | 70.0 |
eastern-europe |
![]() |
739 | 67.5 |
western-palearctic |
![]() |
1599 | 88.7 |
iceland |
![]() |
591 | 63.9 |
svalbard |
![]() |
480 | 61.1 |
canary-islands |
![]() |
598 | 64.0 |
madeira |
![]() |
459 | 60.6 |
azores |
![]() |
426 | 59.8 |
Asia
| region | coverage | classes | fp32 MB |
|---|---|---|---|
south-asia-peninsular |
![]() |
879 | 70.9 |
indo-gangetic |
![]() |
1406 | 83.9 |
himalaya |
![]() |
1407 | 83.9 |
japan |
![]() |
799 | 69.0 |
china-northeast |
![]() |
877 | 70.9 |
china-north-central |
![]() |
976 | 73.3 |
china-southeast |
![]() |
1373 | 83.1 |
china-southwest |
![]() |
1409 | 84.0 |
tibet |
![]() |
1407 | 83.9 |
North America
| region | coverage | classes | fp32 MB |
|---|---|---|---|
north-america-east |
![]() |
999 | 73.9 |
north-america-west |
![]() |
1002 | 74.0 |
canada-alaska |
![]() |
962 | 73.0 |
South America
| region | coverage | classes | fp32 MB |
|---|---|---|---|
amazonia |
![]() |
3388 | 132.7 |
andes |
![]() |
3535 | 136.3 |
eastern-brazil |
![]() |
2184 | 103.0 |
southern-cone |
![]() |
1855 | 95.0 |
galapagos |
![]() |
336 | 57.6 |
Africa
| region | coverage | classes | fp32 MB |
|---|---|---|---|
southern-africa |
![]() |
1002 | 74.0 |
reunion |
![]() |
274 | 56.1 |
mauritius |
![]() |
272 | 56.0 |
seychelles |
![]() |
318 | 57.2 |
cape-verde |
![]() |
346 | 57.8 |
sao-tome-principe |
![]() |
324 | 57.3 |
west-africa |
![]() |
1309 | 81.5 |
central-africa |
![]() |
1883 | 95.6 |
east-africa |
![]() |
2159 | 102.4 |
Oceania
| region | coverage | classes | fp32 MB |
|---|---|---|---|
australia-east |
![]() |
946 | 72.6 |
new-zealand |
![]() |
486 | 61.3 |
hawaii |
![]() |
478 | 61.1 |
new-caledonia |
![]() |
377 | 58.6 |
Withdrawn files
The *_int8_arm.onnx files (the global model and one per region) were withdrawn on 2026-11-15. MatMul-only INT8 changes the result too often on real audio: against the fp32 file, top-1 agrees on 82% of 5,560 station windows for the global model and on 75.5% of 94 windows for the nordic tile, which keeps only 71% of the fp32 detections at 0.5 on the same label. It fails the publish gate's int8 floor (at least 95% top-1 agreement where fp32 scores 0.25 or more, at least 90% of fp32 0.5 detections kept, at most 1% int8-only detections). The file stays downloadable for existing installs; use the region's _no_dft_fp32 file instead. They stay in this repo with unchanged bytes and checksums so existing installs keep working, and models.json lists them with withdrawn and a superseded_by pointer to the region's no_dft_fp32 file. Do not use them for new installs.
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









































