README.md

April 24, 2022 ยท View on GitHub

Our recent registraion works:

Introduction

A Simple Point Cloud Registration Pipeline based on Deep Learning. Detailed Information Please Visit this Zhihu Blog.

Install

  • requirements.txt pip install -r requirements.txt
  • open3d-python==0.9.0.0 python -m pip install open3d==0.9
  • emd loss cd loss/cuda/emd_torch & python setup.py install

Start

  • Download data from [here, 435M]

  • evaluate and show(download the pretrained checkpoint [Complete, pwd: c4z7, 16.09 M] or [Paritial, pwd: pcno, 16.09] first)

    # Iterative Benchmark
    python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --checkpoint your_ckpt_path/test_min_loss.pth --cuda
    
    # Visualization
    # python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --checkpoint your_ckpt_path/test_min_loss.pth  --show
    
    # ICP
    # python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --method icp
    
    # FGR
    # python modelnet40_evaluate.py --root your_data_path/modelnet40_ply_hdf5_2048 --method fgr --normal
    
    
  • train

    CUDA_VISIBLE_DEVICES=0 python modelnet40_train.py --root your_data_path/modelnet40_ply_hdf5_2048
    

Experiments

  • Point-to-Point Correspondences(R error is large due to EMDLoss, see here)
Methodisotropic Risotropic tanisotropic R(mse, mae)anisotropic t(mse, mae)time(s)
ICP11.440.1617.64(5.48)0.22(0.07)0.07
FGR0.010.000.07(0.00)0.00(0.00)0.19
IBenchmark5.680.079.77(2.69)0.12(0.03)0.022
IBenchmark + ICP3.650.049.22(1.66)0.11(0.02)
  • Noise Data(infer_npts = 1024)
Methodisotropic Risotropic tanisotropic R(mse, mae)anisotropic t(mse, mae)
ICP12.140.1718.32(5.86)0.23(0.08)
FGR4.270.0611.55(2.43)0.09(0.03)
IBenchmark6.250.089.28(2.94)0.12(0.04)
IBenchmark + ICP5.100.0710.51(2.39)0.13(0.03)
  • Partial-to-Complete Registration(infer_npts = 1024)
Methodisotropic Risotropic tanisotropic R(mse, mae)anisotropic t(mse, mae)
ICP21.330.3222.83(10.51)0.31(0.15)
FGR9.490.1219.51(5.58)0.17(0.06)
IBenchmark15.020.2215.78(7.45)0.21(0.10)
IBenchmark + ICP9.210.1314.73(4.43)0.18(0.06)

Note:

  • Detailed metrics information please refer to RPM-Net[CVPR 2020].

Train your Own Data

  • Prepare the data in the following structure
    |- CustomData(dir)
        |- train_data(dir)
            - train1.pcd
            - train2.pcd
            - ...
        |- val_data(dir)
            - val1.pcd
            - val2.pcd
            - ...
    
  • Train
    python custom_train.py --root your_datapath/CustomData --train_npts 2048 
    # Note: train_npts depends on your dataset
    
  • Evaluate
    # Evaluate, infer_npts depends on your dataset
    python custom_evaluate.py --root your_datapath/CustomData --infer_npts 2048 --checkpoint work_dirs/models/checkpoints/test_min_loss.pth --cuda
    
    # Visualize, infer_npts depends on your dataset
    python custom_evaluate.py --root your_datapath/CustomData --infer_npts 2048 --checkpoint work_dirs/models/checkpoints/test_min_loss.pth --show
    

Acknowledgements

Thanks for the open source code for helping me to train the Point Cloud Registration Network successfully.