| --- |
| 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. |
|
|