Skip to content

feat: SK-ROCK and equivariant bootstrap baselines for sparse UQ compa…#3

Open
MatteoGaetzner wants to merge 1 commit into
mainfrom
feat/plot-uq-skrock-eb
Open

feat: SK-ROCK and equivariant bootstrap baselines for sparse UQ compa…#3
MatteoGaetzner wants to merge 1 commit into
mainfrom
feat/plot-uq-skrock-eb

Conversation

@MatteoGaetzner
Copy link
Copy Markdown
Collaborator

Summary

Adds two posterior-sampling baselines to the sparse-setting uncertainty-quantification comparison alongside the existing FBP/U-Net bootstrap, U-Net ensemble, and diffusion-boundary methods. Both are calibrated on the first 10 test images and evaluated on images 10–110 across all three datasets, six intensities, and ten seeds. The paper figure sparse_combined_chosen_metrics.pdf now renders 7 methods instead of 5.
What’s new.

  • SK-ROCK Langevin sampler (Pereyra et al. 2020) via deepinv’s SKRockIterator + LogPoissonLikelihood, with a Moreau-Yosida TV prior. Per-cell tv_weight calibrated by ECE on the first 10 test images.
  • Equivariant Bootstrap (Tachella & Pereyra 2024) on the FBPUNet estimator with Gaussian rotation augmentations, n_bootstraps=1000 to match the other bootstrap baselines. Per-cell rotation_std_deg/flip calibrated similarly.

Plumbing

  • uqct.eval.cli grows skrock and equivariant-bootstrapping subcommands; standalone CLIs at uqct.eval.{skrock,equivariant_bootstrapping}.
  • uqct.vis.plot_uq reads per-image UQ parquets via a fast-path; original results/uq_comparison.json is untouched.
  • uqct.vis.style is now an explicit per-method color dict so adding methods doesn’t shift the paper’s existing colors. One intentional swap: tab:red → Okabe-Ito vermillion (#D55E00) for color-vision-deficiency distinguishability from tab:blue.
  • uqct.ct.nll_mixture_angle_schedule rewritten to walk the schedule block-by-block; bit-identical output, much lower peak memory (relevant at SK-ROCK’s R=500 samples).
  • SLURM array templates (scripts/submit_{skrock,equivariant_bootstrapping,bundled}.sh), a multi-seed parquet aggregator (scripts/compute_uq_skrock_eb.py), and physics/adjoint tests (tests/test_skrock.py).
  • deepinv added as a runtime dependency.

Reproduce

uv syncsbatch scripts/submit_{skrock,equivariant_bootstrapping}.sh (or run uqct.eval.cli {skrock,equivariant-bootstrapping} locally) → uv run python scripts/compute_uq_skrock_eb.py --method skrock / --method equivariant_bootstrappinguv run python -m uqct.vis.plot_uq.

@MatteoGaetzner MatteoGaetzner requested a review from kirschnj May 15, 2026 11:41
…rison

Adds two posterior-sampling baselines to the sparse-setting UQ comparison
alongside the existing FBP/U-Net bootstrap and U-Net ensemble:

* SK-ROCK Langevin sampler (Pereyra, Vargas-Mieles, Zygalakis SIIMS 2020)
  via deepinv's SKRockIterator + LogPoissonLikelihood, mapped onto the
  codebase's Beer-Lambert / Poisson forward model. TV (Moreau-Yosida)
  prior auto-calibrated from total intensity; per-cell tv_weight
  overrides recorded in settings.toml from the calibration sweep on the
  first 10 test images (ECE objective).
* Equivariant bootstrap (Tachella & Pereyra, AISTATS 2024) using the
  FBPUNet estimator augmented with Gaussian rotation perturbations
  (n_bootstraps=1000 to match the FBP/U-Net bootstrap budgets). Per-cell
  rotation_std_deg / flip overrides recorded in settings.toml from the
  same first-10-images calibration sweep.

Plumbing:
* uqct.eval.cli grows skrock and equivariant-bootstrapping subcommands
  (build_chunked_grid + the shared _skip_if_done / _find_calibrated /
  _dispatch_jobs helpers). Standalone CLIs at uqct.eval.{skrock,
  equivariant_bootstrapping} too.
* uqct.vis.plot_uq + uqct.vis.style extended to render the two new
  methods in sparse_combined_chosen_metrics.pdf with the paper's
  per-method chosen-CI variant. One color change vs. the accepted paper
  palette: tab:red -> Okabe-Ito vermillion (#D55E00) so that red/blue
  remain distinguishable under common color-vision deficiencies.
* uqct.ct.nll_mixture_angle_schedule rewritten to walk the angle
  schedule per-block rather than materialising the full (N, s, n_pred,
  n_angles, H) tensor; bit-identical output, vastly lower peak memory
  (relevant for SK-ROCK's R=500 cell sizes).
* scripts/submit_{skrock,equivariant_bootstrapping,bundled}.sh: SLURM
  array templates for the full sparse-setting sweep.
* scripts/compute_uq_skrock_eb.py: per-image CI-width + coverage
  aggregator that feeds uqct.vis.plot_uq's parquet fast-path. Supports
  per-seed and multi-seed compute for the new methods.
* tests/test_skrock.py: physics/adjoint consistency, TV-prior
  components.
* deepinv added as a runtime dependency.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@MatteoGaetzner MatteoGaetzner force-pushed the feat/plot-uq-skrock-eb branch from 490842e to 698223e Compare May 17, 2026 17:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant