This is an official implementation of DBDNet:Partial-to-Partial Point Cloud Registration with Dual Branches Decoupling that is accepted to Knowledge-Based Systems.
Point cloud registration plays a crucial role in various computer vision tasks. In this paper, we concentrate on two aspects of the point cloud registration problem: rotation–translation decoupling and partial overlapping. To eliminate the error introduced by rotation and translation mutual interference, we propose a dual branches structure that produces separate correspondence matrices for rotation and translation. These dual branches are guided by distinct loss functions, facilitating independent calculation of rotation and translation. For partial-to-partial registration, we consider overlap prediction as a preordering task before the registration procedure. We propose an overlap predictor to initially identify common parts within the source and target point clouds. Subsequently, only these overlapping points are routed to the registration module. To accurately predict pointwise masks, we employ an overlap predictor that benefits from explicit feature interaction introduced by the powerful attention mechanism. Additionally, we design a multi-resolution feature extraction network to capture patterns in various scales, thereby enabling our model to exploit both local and global features. Experimental results on both synthetic and real-world datasets validate the effectiveness of our proposed method.
First, create the conda environment.
conda create -n dbd python=3.9
conda activate dbd
pip install -r requirements.txt
Then, install the pointnet_ops_lib and pointnet2_ops_lib in model folder.
The ModelNet40 data can be found from modelnet40_ply_hdf5_2048.
The 3DMatch data can be found from Predator project page, the .pkl
files can be found from here.
Please organize the data to ./data
following the example data structure as:
data/
├── 3dmatch/
└── indoor/
├── train/
├── test/
├── 3DLoMatch.pkl
├── 3DMatch.pkl
├── train.pkl
└── valid.pkl
└── modelnet40_ply_hdf5_2048
Then generate the required overlap files by:
python tools/3dmatch_overlap_compute.py
The generated files will located in data/3dmatch/indoor
folder.
Train the overlap model.
python train.py --config config/modelnet40_overlap.yaml
python train.py --config config/3dmatch_overlap.yaml
Train the registration model.
python train.py --config config/modelnet40.yaml
python train.py --config config/3dmatch.yaml
We provide the pre-trained model checkpoints, download and put the weight files to ./ckpt
folder.
python test.py --config config/modelnet40.yaml --ckpt ckpt/modelnet40_noise.pth
python test.py --config config/3dmatch.yaml --ckpt ckpt/3dmatch.pth
python test.py --config config/3dlomatch.yaml --ckpt ckpt/3dmatch.pth
If you find this code useful for your work, please consider citing:
@article{li2024dbdnet,
title={DBDNet: Partial-to-partial point cloud registration with dual branches decoupling},
author={Li, Shiqi and Zhu, Jihua and Xie, Yifan},
journal={Knowledge-Based Systems},
pages={111864},
year={2024},
publisher={Elsevier}
}
We thank the authors of the RPMNet, OverlapPredator, RegTR, FINet, PointTransformerV2, Pointnet2_PyTorch for open sourcing their codes.