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-<upstream>-[<region>-]<variant>-b<build>.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.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support