Repository navigation
Conversation
The species-282 badge put BirdBox's species labels up front, although the recommended workflow combines BirdBox boxes with BirdNET for the labels. It is gone from the README and the docs landing page. The landing page's Python badge now links to the 3.12.13 release like the README and the installation page. Co-Authored-By: Claude Opus 5.5 <[email protected]>
The STFT kernel (1920 x 1 x 2048 float32, 15.7 MB) was the largest constant of every exported graph, almost half of Just-Bird_fp16.onnx. Its phases only depend on (bin * sample) % n_fft, so the file now stores one period of cosine and sine values plus the window, and nodes in the parent graph rebuild the kernel in float64 and cast it to float32, as dft_convolution_kernel does. The loop body reads it as an outer-scope value. The export checks in numpy that the lookup reproduces the kernel exactly. The re-exported Just-Bird_fp16.onnx shrinks from 35 MB to 20 MB. Its detections and raw_all are bit-identical to the previous file in ONNX Runtime (Python) and ONNX Runtime Web 1.20.1 (WASM), with the same load time. tests/onnx_graph_parity.py: 99.8% of the detect_birds.py boxes, mean IoU 0.995. Co-Authored-By: Claude Opus 5.5 <[email protected]>
A model menu at the top of the Demo lists docs/models/manifest.json. Just-Bird_fp16.onnx stays the default; All-In-One_fp16.onnx (51 MB, exported from models/All-In-One.pt) is the second entry. Switching runs the detection again with the new model and its suggested slider values; the person's drawn boxes stay, changes to detected boxes are reset. All-In-One merges by song reconstruction, not window fusion. songs.js ports reconstruct_songs_tensor so its sliders stay instant, and the second slider becomes the song gap (default 0.1 s). With more than one class, the table and the tooltip name the species (common names from src/config.py in the manifest), and the JSON export records the model's merge and gap. tests/js/demo_fusion_parity.mjs becomes demo_merge_parity.mjs and checks fusion.js or songs.js, depending on the model's manifest entry: 16 of 16 settings identical to the graph for both models. tests/onnx_graph_parity.py: the fp16 graph matches 99.7% of the All-In-One.pt boxes with the same species, mean IoU 0.997. The title reads "BirdBox in your browser" now that the model can change. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
onnx_export.pyno longer stores the 15.7 MB STFT kernel; the graph rebuilds it when the model loads, bit-identical.Just-Bird_fp16.onnxshrinks from 35 MB to 20 MB, the newAll-In-One_fp16.onnxis 51 MB instead of 66 MB.species-282badge is gone from the README and the docs landing page. The recommended workflow combines BirdBox boxes with BirdNET for labels, so BirdBox's species count should not be up front. The landing page's Python badge now links to 3.12.13 like the README.Model menu
docs/models/manifest.json; the first entry is the default. Switching runs detection again with the model's suggested slider values. Drawn boxes stay; verified, moved or removed detected boxes are reset, with a notice.songs.jsportsreconstruct_songs_tensor, so the sliders stay instant; the second slider becomes Song gap (default 0.1 s).song_gapandcommon_names(fromsrc/config.py).phrase_gapfor fusion,song_gap_thresholdfor reconstruct, asdetect_birds.pywrites them).Rebuilding the STFT kernel at load
(k * n) % 2048. The file stores one period of cosine and sine values plus the window (about 50 KB);dft_kernel_builderadds nodes that do the lookup and products in float64 and cast to float32, asdft_convolution_kerneldoes. The loop body reads the kernel as an outer-scope value.onnx_export.pyuses it, for every model and precision. fp32 graphs shrink too (Just-Bird 53 → 38 MB, All-In-One 114 → 99 MB).Results
tests/onnx_graph_parity.py)detect_birds.pywith the.ptmodel matchedJust-Bird_fp16.onnxAll-In-One_fp16.onnxAll-In-One_fp32.onnx(reference)Test plan
detectionsandraw_allontests/test.wav, in ONNX Runtime (Python) and ONNX Runtime Web 1.20.1 (WASM); same load timetests/onnx_graph_parity.pyfor both demo models (table above)tests/js/demo_merge_parity.mjs(renamed fromdemo_fusion_parity.mjs, checksfusion.jsorsongs.jsby the manifest entry): 16/16 settings identical for Just-Bird and for All-In-Onecheck_license_headers.pypassesdocs/models/All-In-One_fp16.onnxadds 51 MB to the repository.🤖 Generated with Claude Code