--- license: cc-by-nc-sa-4.0 library_name: scikit-learn tags: - audio-classification - bioacoustics - perch - chicken - research --- # ChickenNet Research 0.1.0 — Perch 2 A research-only three-head chicken-vocalization classifier fitted on frozen 1,536-dimensional Google Perch 2 embeddings. **Status:** research candidate, not deployed. **Artifact SHA-256:** `a5b83b648b19d2837fe775161cf35fce22f2a717e630c08253f2b9c6d2fe58d0` **Dataset hash:** `974df55df9a3262944e32563e1111cf6f32cf52a128548a39aab5d69852bc3b0` ## Outputs The fitted heads are independent. They are not a softmax and do not sum to one. The serialized inference contract gates both subtype heads on `chicken_vocalization_present`, so crow or other-vocalization labels are suppressed when the broad head does not pass. | Head | Locked threshold | |---|---:| | `chicken_vocalization_present` | 0.21 | | `chicken_crow` | 0.20 | | `chicken_other_vocalization` | 0.34 | A window may activate the broad presence head plus one subtype head. Low scores across every head should be treated as abstention/background. ## Feature contract - Backbone: Google Perch 2 CPU release - Input to Perch: five seconds, 32 kHz, mono, float32 - Input to this artifact: one 1,536-dimensional Perch embedding - Verified Perch model-tree SHA-256: `3fb2d54b3e34534f1130052b25737e54bbb5ebfd340ec040d4510772b64c81ff` - The Perch weights are **not** included in this repository. The official Perch code repository is Apache-2.0. The Kaggle model-weight license was not exposed by the metadata available during this build, so this card does not claim that the weights themselves are Apache-2.0. ## Training data | Source | Windows | Role | Rights | |---|---:|---|---| | Ross-308 | 317 | chicken vocalization contexts and animal-free ambient recordings | CC BY 4.0 | | ESC-50 | 2,000 | rooster, hen, and broad environmental negatives | CC BY-NC 3.0 / noncommercial research lane | Total: 2,317 five-second windows. Ross-308 was split by individual bird. Its health and lighting fields were retained only as provenance, never used as targets. Clean annotations were merged into non-overlapping five-second contexts from the parent recordings. Noisy/clipped/contact-artifact annotations were excluded and logged. ESC-50 was split by original Freesound `src_file`, not its published fold alone. The audit found original source IDs crossing published folds; grouping by `src_file` prevents that leakage. No source audio is redistributed here. ## Evaluation ### Internal grouped test | Head | Positive support | AP | F1 | |---|---:|---:|---:| | chicken vocalization | 62 | 1.000 | 1.000 | | crow | 4 | 1.000 | 1.000 | | other vocalization | 58 | 1.000 | 1.000 | These values are an internal fit check, not field-readiness evidence. Crow support is especially small, and source-domain shortcuts can remain despite grouped splits. ### Locked external iNaturalist challenge The thresholds were frozen before this challenge. It contains 42 permissively licensed Domestic Chicken sounds from 30 observers: 31 CC BY and 11 CC0. - Broad-head passes: 33/42 - Broad-head weak-positive hit rate: **78.6%** - Median broad-head score: **0.858** This is a taxon-level weak-positive challenge. A centered crop may not contain an audible chicken call. It has no negative examples, so precision and false-positive rate cannot be measured. Crow versus other-call metrics are not reported because call type is not annotated. ### Private stationary-microphone confound audit A private reviewed frog archive supplied 1,308 local fixed-microphone windows. Chicken absence was not separately reviewed, so the following is an upper bound on candidate false positives, not a confirmed false-positive rate: - broad-head candidate positives: 10/1,308 windows across 8/436 files; - crow-head candidate positives: 9/1,308 windows across 7/436 files; - other-vocalization candidate positives: 0/1,308 windows. No private paths or audio are included in the public artifact. ## Use ```python import joblib from insectnet.candidate import active_labels, predict_candidate package = joblib.load("chickennet-research-0.1.0-perch2.joblib") embedding = ... # shape (N, 1536), produced by the verified Perch 2 feature contract scores = predict_candidate(package, embedding) detections = [active_labels(package, row) for row in scores] ``` Do not feed waveforms directly into this artifact. ## Limitations - Not calibrated for local field deployment. - No independently reviewed chicken-negative field set yet. - Crow has only four positive test examples. - Domestic Chicken taxonomy does not provide call-type labels. - Ross-308 is a small controlled broiler corpus. - ESC-50 introduces a noncommercial restriction and coarse source domains. - The private local candidate positives still require listening review. - Thresholds should not be changed on the published external challenge. ## Sources - Ross-308: Díaz de Cerio et al., DOI `10.34810/DATA3437` - ESC-50: Piczak, DOI `10.1145/2733373.2806390` - Perch: Ghani et al., *Global birdsong embeddings enable superior transfer learning for bioacoustic classification*, Scientific Reports (2023) Source summaries, retained-private manifest hashes, run metrics, and the public challenge report are included alongside the artifact. Exact row-level training manifests are not published; the public bundle supports artifact/summary consistency checks but cannot by itself reproduce every split assignment.