GitHub - MIT-SPARK/BUFFER-X: [ICCV 2025, Highlight] BUFFER-X: Zero-Shot Point Cloud Registration (original) (raw)


🧭 Structure Overview

fig1

πŸ’» Installation of BUFFER-X

Set up environment

After cloning this repository:

git clone https://github.com/MIT-SPARK/BUFFER-X && cd BUFFER-X

Setup your own virtual environment (e.g., conda create -n bufferx python=3.x or setting your Nvidia Docker env.) and then install the required libraries. We present some shellscripts as follows.

[Python 3.8, Pytorch 1.9.1, CUDA 11.1 on Ubuntu 22.04]

./scripts/install_py3_8_cuda11_1.sh

[Python 3.10, Pytorch 2.7.1, CUDA 11.8, Cudnn 9.1.0 on Ubuntu 24.04]

./scripts/install_py3_10_cuda11_8.sh

[Python 3.11, Pytorch 2.6.0, CUDA 12.4, Cudnn 9.1.0 on Ubuntu 24.04]

./scripts/install_py3_11_cuda12_4.sh

πŸš€ Quick Start

Training and Test

Test on Our Generalization Benchmark

You can easily run our generalization benchmark with BUFFER-X. First, download the model using the following script:

./scripts/download_pretrained_models.sh

Detailed explanation about file directory

The structure should be as follows:

Next, to evaluate BUFFER-X in diverse scenes, please download the preprocessed data by running the following command. It requires around 130 GB. However, to include all other datasets (i.e., Scannetpp_iphone, Scannetpp_faro), approximately 150 GB more storage is required. Due to the data copyrights, we cannot provide preprocessed data for ScanNet++, so if you want to reproduce whole results, please refer to here

./scripts/download_all_data.sh

Then, you can run the below command as follows:

python test.py --dataset <LIST OF DATASET NAMES> --experiment_id <EXPERIMENT ID> --verbose

Experiment ID refers to the saved model’s filename. Provided snapshots include threedmatch and kitti, each trained on the corresponding dataset.

e.g.,

python test.py --dataset 3DMatch TIERS Oxford MIT --experiment_id threedmatch --verbose

You can also run the evaluation script for all datasets at once by using the provided script:

./scripts/eval_all.sh <EXPERIMENT ID>

For heterogeneous evaluation settings introduced in the extended version, use:

./scripts/eval_all_hetero.sh <EXPERIMENT ID>

Detailed explanation about configuration

For heterogeneous evaluation, additional arguments are:

e.g.,

python test.py --dataset TIERS_hetero --src_sensor os0_128 --tgt_sensor os1_64 --experiment_id threedmatch --verbose

Due to the large number and variety of datasets used in our experiments, we provide detailed download instructions and folder structures in a separate document:

DATASETS.md


Using KISS-Matcher as the Pose Solver

This branch adds support for KISS-Matcher as an alternative to RANSAC for the final pose estimation step.

Installation

Please follow the official Python installation instructions provided in the KISS-Matcher repository:https://github.com/MIT-SPARK/KISS-Matcher?tab=readme-ov-file#package-installation

Usage

Pass --pose_estimator kiss_matcher on the command line:

python test.py --dataset 3DMatch --experiment_id threedmatch --pose_estimator kiss_matcher --verbose

To use RANSAC (default behavior):

python test.py --dataset 3DMatch --experiment_id threedmatch --pose_estimator ransac --verbose

Configuration

You can also set the pose estimator and its options directly in the config files (e.g., config/indoor_config.py):

cfg.match.pose_estimator = "kiss_matcher" # "ransac" or "kiss_matcher" cfg.match.kiss_resolution = 0.3 # Voxel resolution for KISS-Matcher

Note: If kiss-matcher is not installed, the pipeline automatically falls back to RANSAC with a warning.


Early Exit (Confidence-Aware Multi-Scale Processing)

BUFFER-X++ introduces an incremental multi-scale processing strategy that stops computing additional scales once the pose estimate is already confident enough. This reduces unnecessary descriptor extraction and speeds up inference.

The early exit is triggered when the number of RANSAC/KISS-Matcher inliers exceeds early_exit_min_inliers after the first scale.

Configuration

cfg.match.enable_early_exit = False # Enable confidence-aware early exit (default: False) cfg.match.early_exit_min_inliers = 50 # Minimum inlier count to trigger early exit


Output Files

After each test run, results are automatically saved:


Training

BUFFER-X supports training on either the 3DMatch or KITTI dataset. As un example, run the following command to train the model:

python train.py --dataset 3DMatch

πŸ“ Citation

If you find our work useful in your research, please consider citing:

@article{Seo_BUFFERX_arXiv_2025,
Title={BUFFER-X: Towards Zero-Shot Point Cloud Registration in Diverse Scenes},
Author={Minkyun Seo and Hyungtae Lim and Kanghee Lee and Luca Carlone and Jaesik Park},
Journal={2503.07940 (arXiv)},
Year={2025}
}

@misc{lim2026zeroshotpointcloudregistration,
title={Towards Zero-Shot Point Cloud Registration Across Diverse Scales, Scenes, and Sensor Setups}, 
author={Hyungtae Lim and Minkyun Seo and Luca Carlone and Jaesik Park},
year={2026},
eprint={2601.02759},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2601.02759}, 
}

πŸ™ Acknowledgements

This work was supported by IITP grant (RS-2021-II211343: AI Graduate School Program at Seoul National University) (5%), and by NRF grants funded by the Korea government (MSIT) (No. 2023R1A1C200781211 (65%) and No. RS-2024-00461409 (30%), respectively).

In addition, we appreciate the open-source contributions of previous authors, and especially thank Sheng Ao, the first author of BUFFER, for allowing us to use the term 'BUFFER' as part of the title of our study.


Updates