🔥🔥🔥 Our paper is accepted by IEEE Transactions on Geoscience and Remote Sensing (TGRS) 🔥🔥🔥 SphereNet: Learning a Noise-Robust and General Descriptor for Point Cloud Registration.
This code has been tested with
- Python 3.9, Pytorch 1.11.0, CUDA 10.2 on Arch Linux.
- Python 3.9, Pytorch 1.11.0, CUDA 11.1 on Ubuntu 20.04.
- Clone the repository
git clone https://github.com/GuiyuZhao/SphereNet && cd SphereNet
- Setup conda virtual environment
conda create -n spherenet python=3.9
source activate spinnet
conda install pytorch==1.11.0 torchvision==0.12.0 cudatoolkit=11.3 -c pytorch
conda install -c open3d-admin open3d==0.11.1
pip install "git+git://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"
- Prepare the datasets
You can download the KITTI dataset from Google Drive or Baidu Yun (Verification code:d1vn), download the KITTI dataset from website, and download processed 3DMatch dataset from Baidu Yun (Verification code:6nkf).
Then the structure is as follows:
--data--3DMatch--fragments
|--intermediate-files-real
|--keypoints
|--patches
--data--KITTI--dataset
|--icp
|--patches
--data--ETH--gazebo_summer
|--gazebo_winter
|--wood_autmn
|--wood_summer
Follow the SpinNet to download and place the 3DMatch dataset.
Training
Training SphereNet on the 3DMatch dataset:
cd ./ThreeDMatch/Train
python train.py
Testing
We provide two methods based on keypoint extraction for testing.
Evaluate the performance of the trained models on the 3DMatch dataset by random sampling.
cd ./ThreeDMatch/Test
python preparation.py
The learned descriptors for each point will be saved in ThreeDMatch/Test/SphereNet_{timestr}/
folder and
samplings
is the number of keypoints.
Then the Feature Matching Recall(FMR)
and transformation
can be calculated by running:
python evaluate_3DMatch.py [timestr] [samplings]
Evaluate the performance of the trained models on the 3DMatch dataset with keypoint extraction module of Predator.
cd ./ThreeDMatch/Test
python preparation_3DMatch_kp.py [samplings]
Then the Feature Matching Recall(FMR)
and transformation
can be calculated by running:
python evaluate_3DMatch_kp.py [timestr] [samplings]
Testing
Evaluate the performance of the trained models on 3DLoMatch by random sampling.
cd ./ThreeDMatch/Test
python preparation.py
Then the Feature Matching Recall(FMR)
and transformation
can be calculated by running:
python evaluate_3DLoMatch.py [timestr] [samplings]
Evaluate the performance of the trained models on 3DLoMatch with keypoint extraction module of Predator.
cd ./ThreeDMatch/Test
python preparation_3DLoMatch_kp.py [samplings]
Then the Feature Matching Recall(FMR)
and transformation
can be calculated by running:
python evaluate_3DLoMatch_kp.py [timestr] [samplings]
Evaluate the performance of the trained models on 3DMatch-noise by random sampling.
type
is the type of noise, type=1
for Noise 1, type=2
for Noise 2, and type=3
for Noise 3.
cd ./ThreeDMatch/Test
python preparation.py [type]
Then the Feature Matching Recall(FMR)
and transformation
can be calculated by running:
python evaluate_3DMatch.py [timestr] [samplings]
Evaluate the performance of the trained models on 3DMatch-noise with keypoint extraction module of Predator.
cd ./ThreeDMatch/Test
python preparation_3DMatch_kp.py [samplings] [type]
Then the Feature Matching Recall(FMR)
and transformation
can be calculated by running:
python evaluate_3DMatch_kp.py [timestr] [samplings]
3DMatch to ETH
The test set can be downloaded from here, and put the folder into data
Generalization from 3DMatch dataset to ETH dataset:
cd ./generalization/ThreeDMatch-to-ETH
python preparation.py
Then the Feature Matching Recall
and transformation
can be calculated by running
python evaluate.py [timestr]
3DMatch to KITTI
Generalization from 3DMatch dataset to KITTI dataset:
cd ./generalization/ThreeDMatch-to-KITTI
python test.py
If necessary, you will need to change the radius parameter to fit your data.
cd ./ThreeDMatch/Test
python demo.py [samplings] [source_path] [target_path]
In this project, we use parts of the implementations of the following works:
- 03/05/2023: The code is released!
- 12/13/2023: Our paper is accepted by IEEE Transactions on Geoscience and Remote Sensing!
@ARTICLE{10356130,
author={Zhao, Guiyu and Guo, Zhentao and Wang, Xin and Ma, Hongbin},
journal={IEEE Transactions on Geoscience and Remote Sensing},
title={SphereNet: Learning a Noise-Robust and General Descriptor for Point Cloud Registration},
year={2024},
volume={62},
number={},
pages={1-16},
doi={10.1109/TGRS.2023.3342423}
}