Skip to content

Laka-3DV/TurboReg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TurboReg Title
Paper PDF arXiv arXiv

Shaocheng Yan   Pengcheng Shi   Zhenjun Zhao   Kaixin Wang   Kuang Cao   Ji Wu   Jiayuan Li

Teaser
A highly efficient and robust estimator for point cloud registration (PCR), supporting both CPU and GPU platforms.

🌀 Overview

TurboReg is a highly efficient and robust estimator for point cloud registration (PCR), supporting both CPU and GPU platforms. It achieves 60+ FPS while maintaining state-of-the-art registration recall.

Highlights

  • State-of-the-art performance on 3DMatch and KITTI datasets
  • Efficient runtime (60+ FPS)
  • Learning-free, parameter-friendly design

Here's a general comparison of TurboReg with existing methods:

Comparison with Existing Methods

Method Name Venue (Year) Performance (Recall) CPU Efficiency GPU Efficiency
SC2-PCR CVPR 2022
MAC CVPR 2023
FastMAC CVPR 2024
TurboReg 🎖 ICCV 2025 ✅ (60+FPS)

📦 Installation

Python API

Note: The Python API of TurboReg is implemented in C++ and exposed via PyBind11, offering C++-level performance within Python.

Create a Python virtual environment and install PyTorch (with CUDA support):

# Python Enviroment
git clone https://github.com/Laka-3DV/TurboReg.git
cd TurboReg

conda create -n turboreg python=3.11
conda activate turboreg

pip install open3d tyro

# Install PyTorch (select the appropriate version for your CUDA setup from https://pytorch.org/)
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

Install TurboReg by running:

cd bindings
pip install .
cd ..

You can try TurboReg with just a few lines of code:

import numpy as np
import torch
import turboreg_gpu  # NOTE: torch must be imported before turboreg_gpu

# Load input correspondences
kpts_src = torch.from_numpy(np.loadtxt('demo_data/000_fpfh_kpts_src.txt')).cuda().float()
kpts_dst = torch.from_numpy(np.loadtxt('demo_data/000_fpfh_kpts_dst.txt')).cuda().float()

# Initialize TurboReg with specific parameters:
reger = turboreg_gpu.TurboRegGPU(
    6000,      # max_N: Maximum number of correspondences
    0.012,     # tau_length_consis: \tau (consistency threshold for feature length/distance)
    2000,      # num_pivot: Number of pivot points, K_1
    0.15,      # radiu_nms: Radius for avoiding the instability of the solution
    0.1,       # tau_inlier: Threshold for inlier points. NOTE: just for post-refinement (REF@PointDSC/SC2PCR/MAC)
    "IN"       # eval_metric: MetricType (e.g., "IN" for Inlier Number, or "MAE" / "MSE")
)

# Run registration
trans = reger.run_reg(kpts_src, kpts_dst)

To run the demo:

cd ./demo_py
python o3d_fpfh.py

C++ Build Instructions

🔧 Dependencies

  • CMake ≥ 3.10
  • LibTorch (No independent installation required; use directly within your Python virtual environment (i.e., turboreg))

GPU version uses LibTorch from the Python virtual environment. For CPU version, you can refer to ./turboreg_cpu/ (TBD).

mkdir build_ && cd build_ 
cmake .. -DCMAKE_PREFIX_PATH=`python -c "import torch; print(torch.utils.cmake_prefix_path)"`
make -j8

# Run C++ demo
./demo_cpp/demo_corr_fpfh

🧪 Experiment Reproduction

Download the processed 3DMatch correspondences from MAC++. Expected folder structure:

DIR_3DMATCH_FPFH_FCGF
.
├── 3DMatch
│   ├── all_fcgf
│       ├── 7-scenes-redkitchen
│       └── ...
│   └── all_fpfh
│       ├── 7-scenes-redkitchen
│       └── ...

Then, run the folloing script

# For 3DMatch + FPFH
python -m demo_py.exp_3dmatch --desc fpfh --dataname 3DMatch --dir_dataset "DIR_3DMATCH_FPFH_FCGF" --max_N 7000 --tau_length_consis 0.012 --num_pivot 2000 --radiu_nms 0.15 --tau_inlier 0.1 --metric_str "IN"

# For 3DMatch + FCGF
python -m demo_py.exp_3dmatch --desc fcgf --dataname 3DMatch --dir_dataset "DIR_3DMATCH_FPFH_FCGF" --max_N 6000 --tau_length_consis 0.012 --num_pivot 2000 --radiu_nms 0.10 --tau_inlier 0.1 --metric_str "MAE"

📈 Registration Performance (RR ↑, RE ↓, TE ↓, FPS ↑)

Dataset Descriptor RR (%) RE (°) TE (cm) FPS
3DMatch FPFH 84.10 2.19 6.81 52.87
3DMatch FCGF 93.59 2.04 6.42 64.55
3DMatch Predator 94.89 2.07 6.04 63.31
3DLoMatch FPFH 40.99 3.85 10.16 62.31
3DLoMatch FCGF 59.74 3.76 10.40 61.43
3DLoMatch Predator 73.07 3.28 9.53 67.68
KITTI FPFH 98.56 0.47 8.96 68.93
KITTI FCGF 98.38 0.40 8.12 67.81

📖 Citation

If you find this code useful for your work or use it in your project, please consider citing:

@article{yan2025turboreg,
  title={TurboReg: TurboClique for Robust and Efficient Point Cloud Registration},
  author={Yan, Shaocheng and Shi, Pengcheng and Zhao, Zhenjun and Wang, Kaixin and Cao, Kuang and Wu, Ji and Li, Jiayuan},
  journal={arXiv preprint arXiv:2507.01439},
  year={2025}
}

🙏 Acknowledgements

TurboReg builds upon several excellent open-source works: