TheVortexProject's picture
Fix privacy boundary and scope reproducibility claims
2487e6c verified
|
Raw
History Blame Contribute Delete
5.5 kB
---
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.