Skip to content

SLEAP-NN v0.3.3

Latest

Choose a tag to compare

@gitttt-1234 gitttt-1234 released this 11 Aug 16:27
0b7daba

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.3

Fixes

  • Fixed a regression where the top-down inference pipeline's centered-instance stage silently inherited the centroid stage's preprocessing.scale instead 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 predict went from 5120 correct instances (v0.3.1) to 0, and sleap-nn track dropped from 5120 to 11. Both pipelines now correctly resolve and apply each stage's own scale by default, while still honoring an explicit --input_scale override applied uniformly to both stages (#725).
  • Fixed sleap-nn predict never recording scale/crop_size in its output provenance metadata at all, unlike the legacy track pipeline (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 records centroid_scale/instance_scale/crop_size distinctly rather than collapsing to one shared value (#728).
  • Fixed anchor_part having no upfront validation for centered_instance/multi_class_topdown/centered_instance_segmentation models: a typo'd or nonexistent anchor_part passed config setup cleanly and only failed deep inside dataset construction, with an error message that misleadingly blamed part_names instead of the actual offending field. A clear, correctly-attributed error is now raised upfront. (centroid models are intentionally exempt — an unmatched anchor_part there 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 set cosine_annealing_warmup/linear_warmup_linear_decay without also explicitly nulling the always-populated-by-default reduce_lr_on_plateau silently got ReduceLROnPlateau instead — 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