Ultrafauna
Ultrafauna locates candidate bat and rodent calls in ultrasonic recordings. This release contains one 523,330-parameter convolutional network, with separate local outputs for bats and rodents. All inference weights are included. It calls no BatDetect2, Perch, external verifier or hosted service, and it does not name species.
This is the replacement release dated 15 October 2026. Training emphasizes local call shape and hard background examples. On 254 bat and 82 background field recordings it detects 92.1% of bat recordings and falsely flags 19.5% of background recordings. Those are previously inspected development/transfer cohorts, not a new independent test. Mouse-pup rejection still fails: 30/33 overlapping windows trigger the bat output. The rodent output is diagnostic, with limited calibration.
Current release against external baselines
Bat recall โ higher is better:
| Model | SoundClass (75 bat windows) | BatSpot (221 bat windows) |
|---|---|---|
| Ultrafauna (current release) | 70.7% | 90.5% |
| BattyBirdNET EU | 88.0% | 83.3% |
| BatDetect2 1.3.1 | 100.0% | 97.3% |
| BatDetect2 2.0.0b3 | 98.7% | 96.8% |
False bat detections โ lower is better:
| Model | SoundClass (150 non-bat windows) | BatSpot (183 non-bat windows) | Mouse pups (33 bat-negative windows) |
|---|---|---|---|
| Ultrafauna (current release) | 5.3% | 7.1% | 90.9% |
| BattyBirdNET EU | 24.7% | 26.2% | 63.6% |
| BatDetect2 1.3.1 | 2.7% | 8.7% | 69.7% |
| BatDetect2 2.0.0b3 | 3.3% | 9.8% | 75.8% |
Bold cells are the best observed value in each column. Denominators are in the headers. Each model uses its previously frozen decision threshold; calibration objectives differ. The 33 mouse windows overlap within one recording. These results do not establish performance on new animals, devices or field sites.
See REPORT.md for architecture, training, baseline configuration, rodent evaluation and limitations.
Use the model
Download into a new directory so files from the previous architecture cannot interfere:
python -m pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='eac123/ultrafauna', local_dir='ultrafauna-current')"
python -m pip install -r ultrafauna-current/requirements.txt
python ultrafauna-current/infer_ultrafauna.py --audio recording.wav --device cuda --output detections.json
Omit --device cuda to run on CPU. The published evaluations used CUDA with bfloat16 convolutions and float32 logits; CPU uses float32 and can differ near a decision threshold. The bundle was verified with Python 3.13, PyTorch 2.12.1 and CUDA 12.6. No model downloads or network services are called during inference.
Use --channel N for a different channel, or --time-expansion 8 only for audio explicitly recorded with eightfold time expansion. This setting must come from recording metadata. Native full-spectrum recordings use the default 1.
The JSON contains physical_duration_s and separate groups.bat and groups.rodent results, with raw-logit threshold, intervals_s and active_fraction. Intervals are half-open physical seconds [start, end). Crossings separated by at most 2 ms are merged; summed interval durations include those small gaps, whereas active_fraction counts only samples above threshold. Candidate intervals are not confirmed calls or species identities.
Migration: this release replaces the earlier network and its calibration. Keep model.pt, calibration.json and inference code together. The new output locates events instead of providing the old one-second-window schema. The old command filename infer_standalone_ultrasound.py is retained as an alias; --out results writes the new-format results/summary.json, without the former windows.jsonl file.
Release files and licensing
model.pt and calibration.json are bound by SHA256. infer_ultrafauna.py and local_joint_field_model.py provide portable inference. REPORT.md, charts/ and anonymous evaluation/ score records document this release. release_manifest.json records file hashes. No source recordings or private user diagnostics are included.
Original implementation code is covered by LICENSE-CODE.txt. That licence covers the implementation only; no separate model-weight licence is declared. Source datasets retain their own terms.
