You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
init="bufferx": a zero-shot learned seed via BUFFER-X (ICCV 2025, "Towards Zero-Shot
Point Cloud Registration in Diverse Scenes", MIT-SPARK/BUFFER-X) — a single generalist model
that registers across sensors/scales with no per-dataset training — refined by the same
overlap-aware ICP (+ Sim(3) scale) as "learned"/"robust". Optional and lazily loaded
(mirrors the GeoTransformer backend); falls back to "robust" with a logged note when its
built CUDA extensions / Hugging Face weights are absent. Setup: splatreg/third_party_models/README-BUFFERX.md; full modern-stack build recipe
(CUDA 12.8 / sm_120 / torch 2.11 / numpy 2.x) in docs/BUFFERX_BUILD_MODERN_CUDA.md. Added to
the register/splatreg align --init choices.
register(init="learned", seed_gate=True): an opt-in (default off) Decision-PCR-style
(arXiv 2507.14965) confidence gate that scores the learned seed (mutual-NN inlier ratio + SC²
spatial consistency, reusing the mac rigidity machinery) and rejects/reseeds a low-confidence
hypothesis from the classical "robust" path before LM refinement, instead of blindly refining
the top seed. Scores surface in result.info["seed_gate"]. Tests: tests/test_bufferx_seedgate.py (fallback path + gate accepts good seed / rejects planted decoy).
Fixed
BUFFER-X weight loading: the pretrained checkpoints are full-model state_dicts (keys
prefixed Desc./Pose.), so loading them into the .Desc/.Pose submodules under strict=False matched nothing and silently ran on random weights (garbage seeds). Now loaded
into the whole model, so init="bufferx" produces real seeds (commit c54d8c9).
Changed
Declared minimum dependency floors in pyproject.toml (torch>=2.1, numpy>=1.24) instead of
unpinned torch/numpy, so a fresh install resolves an interpreter with the tensor APIs the
package actually uses.
tests/test_cli.py::test_console_script_registered now skips (was a hard failure) when the splatreg console-script entry point is not installed in the environment, with a note to run pip install -e .; the assertion still runs and is meaningful once the package is installed.
Verified
init="bufferx" built and run on real 3DMatch, both seeds pushed through the identical
splatreg refine so the comparison isolates the seed. Complete official gt.log pair sets
(recall = RRE < 15° and RTE < 0.3 m): 3DMatch (8/8 scenes, n=1619) BUFFER-X seed recall 0.962 (median RRE 1.46°) vs the classical robust FPFH seed 0.630 (2.12°); official 3DLoMatch (n=1781) BUFFER-X 0.777 (2.77°) vs classical 0.122 (103.4°) — 6.4× the recall where the classical seed's median error is effectively random. BUFFER-X wins
every scene on both splits.
Earlier GT-derived run (pairs derived from the fragments' .info.txt poses, 50/scene, all 8
scenes): high-overlap (overlap ≥ 0.3, n=371) BUFFER-X 0.965 (median RRE 1.70°) vs 0.569 (3.04°);
low-overlap 3DLoMatch regime (overlap 0.10–0.30, n=400) 0.752 (3.23°) vs 0.092 (107.9°) — an 8×
recall lift where classical FPFH collapses to ~random. BUFFER-X wins all 8 scenes in both regimes.
Caveat: both seeds share the lighter feature_align refine — a fair head-to-head that isolates
the seed, but not the full-pipeline absolute numbers.
Removed
The ScanNet-GSReg (GaussReg ECCV'24) benchmark harness and all references to it.
The dataset is not readily available, so the real-data validation anchor is the
controlled-capture harness (realdata_bench.py / bundle_real_bench.py) instead.