--- 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` | | 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 | | `western-palearctic` | | 1599 | 88.7 | 50.5 | | `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.