1.5.0
This release lands semantic segmentation in soma via the slide-manifest dense path: whole slides plus annotation masks flow through hs2p annotation sampling and slide2vec dense region extraction into cached grids and a segmentation head — validated end-to-end on the BEETLE breast-cancer benchmark. It also realigns soma's dependency floors onto the latest hs2p 4.2.0 / slide2vec 5.0.0 stack.
Added
- Annotation-aware segmentation ingestion. New
dataset_type="segmentation"slide-manifest mode withmasks:/sampling:config: slides + multiresolution annotation masks → annotation-sampled ROIs → cached dense grids → segmentation training, wired end-to-end through the existing cached dense path (caching stays soma's responsibility; slide2vec remains a pure extraction engine). (#90) - BEETLE recipe on the slide-manifest path.
examples/make_beetle_manifest.py(slide-level manifest + CV splits + per-class coverage) andexamples/segmentation_beetle.yaml(phikon sliding-224 @ 0.5 µm/px,lightweight_convdecoder). Addsbuild_label_remap(raw mask pixel → class index,background→ignore) and sliding-window encode so a native-224 encoder can serve a 512 px supervision tile. (#99)
Fixed
- Dense overlays for slide-manifest ROIs. The overlay writer now reads just the ROI window at the run spacing instead of decoding the whole WSI, fixing a
DecompressionBombErrorthat crashed test evaluation — prediction/GT overlays now work on the slide-manifest path. (#101)
Changed
- Dependency floors realigned:
hs2p>=4.2.0andslide2vec[fm]>=5.0.0. The dense path migrated off hs2p's removedTilingConfig.tissue_thresholdscalar to the resolvedmin_coveragemap, with no on-disk cache invalidation. (#103) - Sampling aligned with hs2p
mergedmode (renamed fromsingle), backed by a real un-stubbed sampling integration test against a synthetic pyramidal WSI fixture. (#96) - BEETLE docs consolidated: the slide-manifest cached path is now the sole documented recipe; references to the superseded standalone scripts were removed. (#102)
- CI: skip the test suite and docs build on
release-*version-bump PRs (a pyproject-only change carries no signal). (#88, #89)