feat: SK-ROCK and equivariant bootstrap baselines for sparse UQ compa…#3
Open
MatteoGaetzner wants to merge 1 commit into
Open
feat: SK-ROCK and equivariant bootstrap baselines for sparse UQ compa…#3MatteoGaetzner wants to merge 1 commit into
MatteoGaetzner wants to merge 1 commit into
Conversation
…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>
490842e to
698223e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
Plumbing
uqct.eval.cligrows skrock and equivariant-bootstrapping subcommands; standalone CLIs atuqct.eval.{skrock,equivariant_bootstrapping}.uqct.vis.plot_uqreads per-image UQ parquets via a fast-path; originalresults/uq_comparison.jsonis untouched.uqct.vis.styleis 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_schedulerewritten to walk the schedule block-by-block; bit-identical output, much lower peak memory (relevant at SK-ROCK’s R=500 samples).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).Reproduce
uv sync→sbatch scripts/submit_{skrock,equivariant_bootstrapping}.sh(or runuqct.eval.cli {skrock,equivariant-bootstrapping}locally) →uv run python scripts/compute_uq_skrock_eb.py --method skrock/--method equivariant_bootstrapping→uv run python -m uqct.vis.plot_uq.