---
pretty_name: BirdNET v3.0 Models (GPU-native full + regional catalog)
license: cc-by-sa-4.0
tags:
- bioacoustics
- birdnet
- bird
- vocalization
- audio-classification
- onnx
library_name: onnx
---
# BirdNET v3.0 Models (GPU-native full + regional catalog)
BirdNET+ V3.0 (developer preview 3.1) acoustic classifier, re-exported to a
**GPU-native ONNX** graph, plus a catalog of **region-specific slices** that are
much smaller while staying numerically identical to the full model on the
species they keep.
> **Developer preview.** These are preview3.1 models for research and
> evaluation. See `TERMS_OF_USE.txt` (CC BY-SA 4.0; no poaching or military use).
## Origin and attribution
**Powered by BirdNET** (https://birdnet.cornell.edu/). BirdNET+ V3.0 is developed
by the **K. Lisa Yang Center for Conservation Bioacoustics (Cornell University)**,
**Chemnitz University of Technology**, and the **Museum fuer Naturkunde Berlin**.
It builds on Kahl et al. (2021) and Lasseck (2018). Architecture: EfficientNetV2-S
backbone, three-head classifier, 11,560 species. Base preview models are
distributed by the BirdNET team on Zenodo.
The GPU-native conversion and the regional slicing in this repo are derived work
under CC BY-SA 4.0.
## What "GPU-native" means
The BirdNET team's ONNX export computes its log-mel front-end with an in-graph
ONNX `STFT` op. ONNX Runtime has no CUDA/TensorRT kernel for `STFT`, and OpenVINO
cannot translate it at all, so the stock export cannot run on GPU or OpenVINO. In
these models the `STFT` is replaced with a mathematically equivalent `Conv1d`
(framing + windowed DFT), so the graph is fully supported on **ONNX Runtime CPU,
OpenVINO (x86 + Intel GPU), CUDA, and TensorRT**. On multi-threaded CPU it is also
slightly faster than the stock model (ORT's `STFT` op is poorly parallelized). One
model serves CPU and GPU; there is no separate CPU/GPU build.
Input: raw audio `[batch, 160000]` (**5 s @ 32 kHz**, matching Perch v2 so a host
can feed both classifiers the same buffer). Outputs: `predictions [batch, 11,560]`
and `embeddings [batch, 1280]`.
## Variants and hardware
| precision | best for |
|---|---|
| `_fp32` | **run this everywhere**: CPU (ORT + OpenVINO), CUDA/TensorRT, Intel GPU |
| `_fp16` | half the download; GPU speed win. Not a CPU win (see below) |
**FP16 is a download-size lever, not a CPU one.** ONNX Runtime upconverts FP16
weights at inference, so on CPU (x86 and ARM alike) FP16 is equal to or slower
than FP32, and on a Raspberry Pi 4 it uses *more* RAM than FP32. For low-RAM CPU
devices the right choice is a **regional FP32** model, not FP16.
int8-arm is not shipped for v3.0: the backbone is Conv-dominated and int8-arm only
quantizes MatMul/Gemm weights, so it barely helps here.
### Measured (batch 1, 5 s window)
| device | full fp32 | regional fp32 (nordic) | peak RAM full / regional |
|---|---:|---:|---:|
| RPi5, OpenVINO | 168 ms | **128 ms** | - |
| RPi5, ORT 4 threads | 363 ms | 253 ms | 685 MB / **229 MB** |
| RPi4B, ORT 4 threads | 874 ms | 743 ms | 688 MB / **236 MB** |
| x86 i7-1260P, ORT 4 threads | 70 ms | 59 ms | - |
OpenVINO is ~2.2x faster than ONNX Runtime on a Raspberry Pi 5. Batching helps
only on a GPU (~1.5x at batch 8, FP16); on CPU use batch 1.
## Full model
| file | classes | MB |
|---|---:|---:|
| `full/birdnet-v3.0-preview3.1-fp32-b1.onnx` | 11,560 | 557 |
| `full/birdnet-v3.0-preview3.1-fp16-b1.onnx` | 11,560 | 279 |
| `full/birdnet-v3.0-preview3.1-labels-b1.txt` | 11,560 | - |
## Why regional models
The three-head classifier is ~80% of the model's parameters, so restricting it to
a region's species set cuts memory a lot (**~67% less RAM**: 685 MB -> 229 MB on a
Raspberry Pi 5) and latency modestly (**15-30%**). The parameters live in the
heads, but the convolutional backbone still does most of the arithmetic, so the
headline win is footprint rather than speed. That is exactly what an always-on
detector on a phone or single-board computer needs. Each tile is
**numerically identical** to the full model on the species it keeps (max abs
difference vs the full model < 1e-6); the only change is that out-of-region
species are not emitted, which at a fixed monitoring location is exactly what you
want. Region species sets come from the **BirdNET Geomodel v3.0** range filter
(top ~800 by occurrence probability + a cosmopolitan core), using the same tiles
as the Perch v2 regional catalog.
## Regional catalog
Each tile ships `_fp32.onnx` (runs on OpenVINO/GPU/CPU) + labels + indices +
`coverage.png` + `metadata.json`. `regional/groups.json` lists the continent
grouping.
### Europe
| region | coverage | classes | fp32 MB | fp16 MB |
|---|---|---:|---:|---:|
| `azores` |
| 224 | 127.5 | 63.9 |
| `baltics` |
| 438 | 135.6 | 68.0 |
| `british-isles` |
| 559 | 140.2 | 70.3 |
| `canary-islands` |
| 388 | 133.7 | 67.0 |
| `central-europe` |
| 644 | 143.4 | 71.9 |
| `eastern-europe` |
| 518 | 138.6 | 69.5 |
| `iberia` |
| 627 | 142.8 | 71.6 |
| `iceland` |
| 391 | 133.8 | 67.1 |
| `madeira` |
| 255 | 128.7 | 64.5 |
| `nordic` |
| 422 | 135.0 | 67.7 |
| `southern-europe` |
| 616 | 142.3 | 71.4 |
| `svalbard` |
| 280 | 129.6 | 65.0 |
| `western-palearctic` |
| 801 | 149.4 | 74.9 |
### Asia
| region | coverage | classes | fp32 MB | fp16 MB |
|---|---|---:|---:|---:|
| `china-north-central` |
| 752 | 147.5 | 73.9 |
| `china-northeast` |
| 650 | 143.6 | 72.0 |
| `china-southeast` |
| 808 | 149.6 | 75.0 |
| `china-southwest` |
| 816 | 149.9 | 75.1 |
| `himalaya` |
| 812 | 149.8 | 75.1 |
| `indo-gangetic` |
| 814 | 149.8 | 75.1 |
| `japan` |
| 577 | 140.9 | 70.6 |
| `south-asia-peninsular` |
| 644 | 143.4 | 71.9 |
| `tibet` |
| 811 | 149.7 | 75.1 |
### North America
| region | coverage | classes | fp32 MB | fp16 MB |
|---|---|---:|---:|---:|
| `north-america-east` |
| 800 | 149.3 | 74.8 |
| `north-america-west` |
| 802 | 149.4 | 74.9 |
### South America
| region | coverage | classes | fp32 MB | fp16 MB |
|---|---|---:|---:|---:|
| `amazonia` |
| 809 | 149.7 | 75.0 |
| `andes` |
| 809 | 149.7 | 75.0 |
| `eastern-brazil` |
| 812 | 149.8 | 75.1 |
| `galapagos` |
| 136 | 124.1 | 62.3 |
| `southern-cone` |
| 807 | 149.6 | 75.0 |
### Africa
| region | coverage | classes | fp32 MB | fp16 MB |
|---|---|---:|---:|---:|
| `cape-verde` |
| 143 | 124.4 | 62.4 |
| `mauritius` |
| 72 | 121.7 | 61.0 |
| `reunion` |
| 73 | 121.8 | 61.1 |
| `sao-tome-principe` |
| 110 | 123.2 | 61.8 |
| `seychelles` |
| 115 | 123.3 | 61.9 |
| `southern-africa` |
| 802 | 149.4 | 74.9 |
### Oceania
| region | coverage | classes | fp32 MB | fp16 MB |
|---|---|---:|---:|---:|
| `australia-east` |
| 708 | 145.8 | 73.1 |
| `hawaii` |
| 272 | 129.3 | 64.8 |
| `new-caledonia` |
| 168 | 125.4 | 62.9 |
| `new-zealand` |
| 266 | 129.1 | 64.7 |
## File naming and versioning
Files are named `birdnet--[-]-b.onnx`, where
`upstream` is the BirdNET release these weights come from (`v3.0-preview3.1`) and
`build` is this repo's build revision of that conversion. A new upstream release
or a new conversion always gets a new filename; a published file's bytes never
change. `models.json` is the machine-readable index: it lists every file with its
variant, checksum, input contract, and which backends it actually runs on
(including where a backend is *not* supported), plus a `selection` map from
hardware/backend to the file to download.
## Deployment
- Point your host at a tile's model + its `_labels.txt` (matching counts) and
restart. Labels are `Scientific name_Common name`.
- Confidence is a per-class sigmoid; slicing does not change a kept class's score
(unlike a softmax model), so thresholds transfer directly from the full model.
- Binaries are hosted here on HuggingFace; the derivation tooling lives separately.