Skip to content

1.6.0

Choose a tag to compare

@clemsgrs clemsgrs released this 02 Jul 14:07

soma 1.6.0 turns detection into a first-class, benchmarked task, adds annotation-restricted MIL bags, migrates the dense path onto slide2vec 5.2 streaming extraction with fp16 caching, hardens dense-cache correctness and speed, and ships a restructured docs site with executable tutorials. It also carries several breaking config renames (see below).

Added

  • Detection, end-to-end, benchmarked on OCELOT 2023. The frozen-encoder → dense token grid → heatmap-regression → F1@δ detection path is now validated on a real cell-detection dataset with an honest, published-comparable number. Includes curation (#143), multi-resolution rendering (#156), oracle-bound greedy reporting (#155), a reproduction harness with --set config overrides (#169), encoder×spacing variant configs (#158), the frozen-probe selection→confirmation campaign + results (#206), and a benchmark docs page (#157). Point-matcher assignment is now the matching primitive (#181).
  • Detection qualitative artifacts. Consolidated eval + DetectionArtifactWriter with plain overlays and manifest/metrics CSVs (#182), per-class match-status overlays (#183), opt-in heatmap overlays + npz sidecar (#184), and H&E-legible overlays with eval-only artifact regeneration (#185).
  • Annotation-restricted MIL bags. A tumor-only (mask-restricted) merged bag per slide for dataset_type=slide (#115) and dataset_type=patient (#116), driven by masks/sampling in PreprocessingConfig.
  • fp16 dense-grid cache — dense grids can be stored at half precision, ~halving cache footprint (#166, unified under cache.dtype in #179).
  • evaluation.holdout_test to skip test-split evaluation on tune-only / model-selection runs (#178).

Changed

  • Dense extraction migrated onto slide2vec 5.2 iter_regions_dense streaming; soma's sliding/blend fork deleted (#162). Per-slide memory is now flat (constant RSS), removing the OOM failure mode on large slides. Dependency floor raised to slide2vec[fm]>=5.2.0 (#159, #179).
  • Dense-cache correctness & speed: fixed experiment identity for dense/artifact configs (#129), unified cache-backed dense source handling (#134), tightened cache-completion + metadata-refresh semantics (#135), fast cache scan via a single listing + gated sidecar validation (#141), resumable extraction that encodes only missing samples (#142), encoder skipped when the cache is already complete (#177), and shared dense fold planning extracted (#131).
  • Docs restructured into a task / method / benchmark site — component homes (#196), slide-level task pages + Tasks index (#195), dense task pages + methods matrices (#199), a benchmark layer covering the EVA suite + OCELOT refit (#201), landing re-grid + consistency passes (#204, #205), and CI that skips the Dockerized suite on docs-only PRs (#198). Adds two executable walkthrough tutorials: decoder-free attention-probing segmentation (#202) and multi-encoder composite (#203).
  • Housekeeping: aligned package metadata + public API discovery (#128), implementation-backed docs config examples (#130), all example configs load (#117), OCELOT configs use a relative output/ path and drop the expandable_segments hint (#160, #168).

Breaking

  • Tissue threshold is now a per-class preprocessing.min_coverage map; the scalar is gone (#107).
  • masks/sampling relocated into PreprocessingConfig (#113); the reserved background rule was dropped from the masks vocabulary (#114).
  • Cache dtype unified behind cache.dtype for pooled + dense storage, replacing the dense-only cache.dense_dtype (#179).
  • save_probabilities renamed with symmetric dense-artifact eval flags (#180).
  • Checkpoint metrics renamed to selected (1-based peak epoch, history shim removed) (#133, #136).