sleap-nn v0.3.3 Release Notes
Summary
SLEAP-NN v0.3.3 is a small correctness-focused follow-up to v0.3.2, fixing a top-down inference scale-sharing regression where the centered-instance stage silently inherited the centroid stage's scale instead of its own, closing an observability gap where predict's output provenance never recorded the scale/crop_size that actually ran, and fixing two training-config validation gaps — an unvalidated anchor_part that crashed confusingly deep, and an LR scheduler priority order that silently ignored its own documented precedence. 3 PRs since v0.3.2.
Installation
# Install / upgrade the CLI tool (auto-selects the right torch backend)
uv tool install sleap-nn --torch-backend auto --upgrade
# Verify
sleap-nn --version
# Expected output: sleap-nn 0.3.3Fixes
- Fixed a regression where the top-down inference pipeline's centered-instance stage silently inherited the centroid stage's
preprocessing.scaleinstead of using its own trained value, whenever the two models were trained at different scales (a common setup — centroid models are often trained at lower resolution for speed; this is literally the GUI's own default training-profile pairing). This corrupted confidence-map peak-finding badly enough to drop detections almost entirely: on a real 2560-frame project with mismatched scales (centroid=0.5, centered_instance=1.0),sleap-nn predictwent from 5120 correct instances (v0.3.1) to 0, andsleap-nn trackdropped from 5120 to 11. Both pipelines now correctly resolve and apply each stage's own scale by default, while still honoring an explicit--input_scaleoverride applied uniformly to both stages (#725). - Fixed
sleap-nn predictnever recordingscale/crop_sizein its output provenance metadata at all, unlike the legacytrackpipeline (which recorded only the raw CLI override, not necessarily the resolved value that actually ran). Provenance now reads the actual resolved scale off each stage's built inference layer; for top-down models it recordscentroid_scale/instance_scale/crop_sizedistinctly rather than collapsing to one shared value (#728). - Fixed
anchor_parthaving no upfront validation forcentered_instance/multi_class_topdown/centered_instance_segmentationmodels: a typo'd or nonexistentanchor_partpassed config setup cleanly and only failed deep inside dataset construction, with an error message that misleadingly blamedpart_namesinstead of the actual offending field. A clear, correctly-attributed error is now raised upfront. (centroidmodels are intentionally exempt — an unmatchedanchor_partthere is a documented fallback case, not an error.) (#729) - Fixed
configure_optimizers()'s LR scheduler selection ignoring its own documented priority (cosine_annealing_warmup > linear_warmup_linear_decay > step_lr > reduce_lr_on_plateau): it iterated scheduler fields in declaration order instead, so any user who setcosine_annealing_warmup/linear_warmup_linear_decaywithout also explicitly nulling the always-populated-by-defaultreduce_lr_on_plateausilently gotReduceLROnPlateauinstead — no error, no warning, training just ran with the wrong LR schedule indefinitely. The scheduler is now selected in the documented priority order (#729).
Dependencies & Build
- sleap-io pin unchanged at
>=0.9.2,<0.10.0— 0.9.2 remains the latest release on both PyPI and GitHub, so no upper-bound audit was needed this cycle.
Changelog
- #725: fix(infer): topdown centered-instance stage silently inherits centroid's scale (@gitttt-1234)
- #728: fix(infer): predict never recorded input_scale/crop_size in provenance (@gitttt-1234)
- #729: fix(train): anchor_part crashes confusingly deep; LR scheduler priority ignored (@gitttt-1234)
- #730: chore: bump version to 0.3.3 (@gitttt-1234)
Contributors: @gitttt-1234
Full Changelog: v0.3.2...v0.3.3