Nocturne v1.1 (Teacher) β€” Bioacoustic Species Recognition for Non-Bird Taxa

Nocturne is a bioacoustic species classifier trained by Stratus Labs covering the taxa that BirdNET and Perch don't: insects, amphibians, non-bird mammals, and reptiles. It's the "night side" of the soundscape β€” the taxa that are dominantly nocturnal or crepuscular, whose acoustic signal is the half of biodiversity monitoring bird-focused models leave behind.

v1.1 (this revision) uses a 3Γ— higher learning rate than v1 during backbone fine-tuning. Independent runs at both LRs plateaued around macro-F1 0.10; v1.1 edged past by ~3 %. Prior v1 weights are preserved in the commit history if you want to pin to revision=<v1-commit-sha>.

Try it live (no install)

Live public endpoint hosted on Stratus Labs infra (Apple M4 Max, MPS-backed):

curl -X POST "https://nocturne.runstratus.com/predict?top_k=5&threshold=0.15" \
     -F "file=@your_clip.wav"

Rate-limited to 10 requests per minute per IP. Uploads capped at 25 MB / 5 minutes per request.

Model at a glance

Backbone Audio Spectrogram Transformer (AST), initialized from MIT/ast-finetuned-audioset-10-10-0.4593
Head Linear over 2182 species (multi-label BCE)
Input 10-second mono waveform @ 16 kHz -> 128-band log-mel
Params ~86M
Precision bf16 for training and inference
Trained on 1x NVIDIA GB10 (DGX Spark), unified 128 GB memory
License (weights) CC-BY-4.0
License (code) Apache-2.0

See stratus-labs/nocturne-v1-mini for a distilled 7M-parameter EfficientNet-B1 student for CPU / edge deployment.

Evaluation

Real numbers, run on the held-out splits. Earlier drafts of this card cited macro-F1 at threshold 0.5 (too high β€” kills recall). These are the corrected numbers at threshold 0.3 (default) and with per-class thresholds calibrated on val:

split metric threshold 0.3 (default) calibrated per-class
val (13,391 samples) macro-F1 0.139 0.184
micro-F1 0.525 0.485
mAP (macro) 0.152 0.152
test (13,710 samples) macro-F1 0.137 0.149
micro-F1 0.508 0.433
mAP (macro) 0.150 0.150

Per-class thresholds are shipped as thresholds.json in this repo. Use them for best F1; use sigmoid > 0.3 (or 0.15 for higher recall) as a simple default. mAP is threshold-independent and the honest number for downstream ranking-quality use cases (top-k, similarity search).

Class coverage: 2,182 species in vocab; 732 have positives in the val split (long-tail β€” many rare species have zero test-set representation). Median calibrated threshold: 0.30. Range: 0.02–0.94.

Full report at eval_report.json in this repo. Reproduce with:

python -m soundscape.calibrate_and_eval \
  --config soundscape/configs/ast_nonbird.yaml \
  --checkpoint model.safetensors --arch ast \
  --out-dir report/

vs BirdNET on non-bird taxa (release headline)

Head-to-head on 300 randomly-sampled non-bird test clips (insects, amphibians, mammals, reptiles). Top-1 species identification:

model non-bird top-1 accuracy
BirdNET (v2.4, bird-focused) 6.7%
Nocturne v1.1 teacher 76.7%

That's an 11.5Γ— lift. BirdNET catches ~7% because a handful of amphibians and mammals slip into its vocab, but for the non-avian half of the soundscape it's the wrong tool and Nocturne is the fit-for-purpose one. This is the point of the release.

Taxonomic coverage (unchanged from v1)

Taxonomic class Species in vocab Source
Insecta 745 (iNat) + 459 (InsectSet459) iNat 2024 non-bird subset + InsectSet459
Amphibia 650 iNat 2024
Mammalia 296 iNat 2024
Reptilia 32 iNat 2024
Total (merged) 2182 β€”

Intended use

  • Passive acoustic monitoring for biodiversity surveys, especially where BirdNET/Perch leave gaps.
  • Agricultural pest early warning (Orthoptera + Cicadidae are heavily represented via InsectSet459).
  • Amphibian presence surveys.
  • Ecological research and citizen-science integration.

Out of scope

  • Absence detection β€” a negative prediction means "no confident detection," not "the species is absent."
  • Bird identification β€” use BirdNET / Perch. Nocturne can separate bird from non-bird signal but is not tuned for species-level bird ID.
  • Bat echolocation β€” most is > 8 kHz relative to our 16 kHz sample rate. Use a dedicated ultrasonic pipeline.
  • Legal or conservation determinations without human review.

Training data

Dataset Files Species License Role
InsectSet459 (Zenodo 18554693) 26,298 459 CC-BY-4.0 Insect head fine-tune
iNat Sounds 2024 non-bird 25,983 1,723 MIT Multi-taxon head
iNat Sounds 2024 birds 111,029 3,846 MIT Backbone exposure only, not in output vocab

Total training exposure: ~42k annotated non-bird clips across 2182 species.

Training recipe (v1.1)

  • Backbone: AudioSet-pretrained AST (86M params). 3-epoch head warm-up with backbone frozen; then joint fine-tune.
  • Optimizer: AdamW β€” backbone 1.5e-4, head 3.0e-3 (3Γ— v1), cosine schedule, weight decay 0.01, grad clip 1.0.
  • Loss: focal BCE (Ξ³=2.0) for long-tail multi-label imbalance.
  • Augmentation: SpecAugment (2Γ—32 freq masks, 2Γ—40 time masks), MixUp (Ξ±=0.3).
  • Sampler: √-frequency class-balanced.
  • Precision: bf16 mixed precision + gradient checkpointing.
  • Batch: 32.
  • 40 epochs total, best-of-N by val macro-F1 tracked.

Inference (Python)

import torch, soundfile as sf, torchaudio.functional as AF
from safetensors.torch import load_file
import json
from huggingface_hub import snapshot_download

local = snapshot_download("stratus-labs/nocturne-v1-teacher")
state = load_file(f"{local}/model.safetensors")
vocab = json.loads(open(f"{local}/vocab.json").read_text())
# Then reconstruct the ASTClassifier from soundscape/model.py and load_state_dict(state, strict=False)

Or just hit the public endpoint (curl example above).

Limitations and ethical considerations

  • Coverage bias. Over-represents temperate-zone Orthoptera and Cicadidae (via InsectSet459) and geographies over-represented on iNaturalist. Under-represented: tropical arthropods, deep-forest amphibians, most reptiles.
  • Recording bias. iNat recordings are opportunistic. Do not interpret model confidence as population density.
  • Absence != silence. Many target species have narrow calling windows (breeding season, temperature, time of day). A survey without detections is not a survey without species.
  • Dual-use. Species localization from acoustic recordings can be misused (e.g. locating rare taxa for illegal collection). Consider redacting precise GPS in public datasets built with this model.
  • Data licensing. Downstream users must comply with InsectSet459 (CC-BY-4.0) and iNat 2024 (MIT). Redistribution of raw training clips is not permitted; this model is a derived work.

Citation

@misc{stratuslabs2026nocturne,
  title  = {Nocturne: Bioacoustic Species Recognition for Non-Bird Taxa},
  author = {Stratus Labs},
  year   = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/stratus-labs/nocturne-v1-teacher}}
}

Please also cite the training datasets:

  • InsectSet459 (Zenodo 10.5281/zenodo.18554693)
  • iNat Sounds 2024 (Chasmai et al., NeurIPS 2024)
Downloads last month
45
Safetensors
Model size
87.9M params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support