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