splatreg 1.3.0: MAC seed, the honest verdict, and the production sweep
splatreg 1.3.0
The production-sweep release: the MAC maximal-clique seed with its honest measured verdict, the align-without-merge workflow, and a full code/docs audit. Every claim below traces to a recorded run or a test (RESULTS.md).
init="mac": maximal-clique correspondence seed (Zhang et al., CVPR 2023)
Pure torch + networkx reimplementation (pip install "splatreg[mac]"): SC2-weighted rigidity compatibility graph, Bron-Kerbosch maximal cliques as consensus hypotheses, weighted SVD per clique, plus a Sim(3) extension via the median pairwise-distance-ratio scale. Measured (tests/test_mac.py):
- matches the fast-init RANSAC engine at 30/60/90% random outliers (rot err <= 0.2 deg);
- decisively wins the structured-decoy regime: on a 90%-contaminated set with a reflection-consistent decoy cluster the greedy-prefilter+RANSAC engine fails at ~78 deg while MAC stays < 0.2 deg;
- all-outlier sets return an honest
success=Falseidentity, never a silent wrong pose; - 500 correspondences run in ~0.1 s on a 2-thread CPU.
The official-split verdict, stated honestly
seed_selector="mac" runs MAC over GeoTransformer's learned correspondences on the full official 3DMatch/3DLoMatch splits (same forward, same native 0.025 voxel, same residual-gated refine; only the hypothesis stage differs). Result: a wash, not a lift. 3DLoMatch 72.1% mean / 74.6% pooled (MAC) vs 72.5% / 74.4% (LGR); 3DMatch 91.7% / 93.8% vs 91.5% / 93.5%; every delta within plus or minus 4 pairs, at ~+50% runtime. At native voxel the learned correspondences are already consensus-dominated (median 600-800 MAC inliers), so seed_selector="lgr" stays the default and "mac" remains the tool for genuinely contaminated correspondence sets (RESULTS.md section 5k).
Carried forward from 1.2.0 (same-day release)
- SH Wigner rotation: higher-order SH bands (
f_rest) now rotate with the splat inapply_transform/merge/ thealignCLI (Ivanic-Ruedenberg real-basis Wigner-D, 3DGS sign convention); rotated-coefficient evaluation matches an independent basis evaluator to ~2.4e-15 in float64. - Public
apply_transform()and the single-forward align-without-merge workflow: register two scans, bake the recovered SE(3)/Sim(3) into the source, keep both scans as separate registered PLYs. - Photometric exposure compensation (default ON) and the coarse-to-fine render ladder: a x1.3 tint that absorbed into the Sim(3) scale (0.10% -> 3.99% scale error) recovers to 0.47% with compensation; the 32-64-96 ladder lands 2.55 deg where a cold single rung stalls at 5.61 deg.
- Pose covariance: builtin-LM solves expose
info["information"]/info["covariance"]for pose-graph weighting (Nonewhen singular, never faked).
Production sweep
- Dead code removed, ruff clean across package/tests/benchmarks; CLI and the Colab notebook now use the public
apply_transform. - README restructured as a storefront: capability matrix vs the alternative splat tools, results table with per-row provenance.
- Docs refreshed: https://archerkattri.github.io/splatreg/ (MAC verdict, SH rotation, covariance, align-without-merge).
CHANGELOG.mdadded.
Gate
143 tests passing (CPU, CUDA_VISIBLE_DEVICES=""), validate_recovery.py --fast 6/6 cells within gate, mkdocs build --strict clean.
Install: pip install splatreg==1.3.0 · Docs: https://archerkattri.github.io/splatreg/ · Cite: DOI 10.5281/zenodo.20618389