All Projects → chrischoy → Deepglobalregistration

chrischoy / Deepglobalregistration

Licence: other
[CVPR 2020 Oral] A differentiable framework for 3D registration

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Deepglobalregistration

D3feat
[TensorFlow] Implementation of CVPR'20 oral paper - D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features https://arxiv.org/abs/2003.03164
Stars: ✭ 143 (-35.59%)
Mutual labels:  3d, pointcloud, registration
Open3d
Open3D: A Modern Library for 3D Data Processing
Stars: ✭ 5,860 (+2539.64%)
Mutual labels:  3d, pointcloud, registration
D3Feat.pytorch
[PyTorch] Official Implementation of CVPR'20 oral paper - D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features https://arxiv.org/abs/2003.03164
Stars: ✭ 99 (-55.41%)
Mutual labels:  registration, pointcloud
CovGT-3DRegistration-matlab
A 3D Scene Registration Method via Covariance Descriptors and an Evolutionary Stable Strategy Game Theory Solver
Stars: ✭ 20 (-90.99%)
Mutual labels:  registration, pointcloud
Fcgf
Fully Convolutional Geometric Features: Fast and accurate 3D features for registration and correspondence.
Stars: ✭ 328 (+47.75%)
Mutual labels:  3d, registration
SpinNet
[CVPR 2021] SpinNet: Learning a General Surface Descriptor for 3D Point Cloud Registration
Stars: ✭ 181 (-18.47%)
Mutual labels:  registration, pointcloud
Cpd
C++ implementation of the Coherent Point Drift point set registration algorithm.
Stars: ✭ 260 (+17.12%)
Mutual labels:  pointcloud, registration
Probreg
Python package for point cloud registration using probabilistic model (Coherent Point Drift, GMMReg, SVR, GMMTree, FilterReg, Bayesian CPD)
Stars: ✭ 306 (+37.84%)
Mutual labels:  3d, registration
Itowns
A Three.js-based framework written in Javascript/WebGL for visualizing 3D geospatial data
Stars: ✭ 517 (+132.88%)
Mutual labels:  3d, pointcloud
Cilantro
A lean C++ library for working with point cloud data
Stars: ✭ 577 (+159.91%)
Mutual labels:  3d, registration
Loam velodyne
Laser Odometry and Mapping (Loam) is a realtime method for state estimation and mapping using a 3D lidar.
Stars: ✭ 1,135 (+411.26%)
Mutual labels:  3d, pointcloud
Py3dtiles
⚠️ Project migrated to : https://gitlab.com/Oslandia/py3dtiles ⚠️
Stars: ✭ 152 (-31.53%)
Mutual labels:  3d, pointcloud
3d Bat
3D Bounding Box Annotation Tool (3D-BAT) Point cloud and Image Labeling
Stars: ✭ 179 (-19.37%)
Mutual labels:  3d, pointcloud
Graph Cnn In 3d Point Cloud Classification
Code for A GRAPH-CNN FOR 3D POINT CLOUD CLASSIFICATION (ICASSP 2018)
Stars: ✭ 206 (-7.21%)
Mutual labels:  pointcloud
Pcat open source
PointCloud Annotation Tools, support to label object bound box, ground, lane and kerb
Stars: ✭ 209 (-5.86%)
Mutual labels:  pointcloud
Babylon.js
Babylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework.
Stars: ✭ 15,479 (+6872.52%)
Mutual labels:  3d
Worldwindandroid
The NASA WorldWind Java SDK for Android (WWA) includes the library, examples and tutorials for building 3D virtual globe applications for phones and tablets.
Stars: ✭ 204 (-8.11%)
Mutual labels:  3d
Mcl 3dl
A ROS node to perform a probabilistic 3-D/6-DOF localization system for mobile robots with 3-D LIDAR(s). It implements pointcloud based Monte Carlo localization that uses a reference pointcloud as a map.
Stars: ✭ 221 (-0.45%)
Mutual labels:  pointcloud
Rusty Shooter
[suspended] 3d shooter written in Rust using rg3d
Stars: ✭ 210 (-5.41%)
Mutual labels:  3d
Django Graphql Auth
Django registration and authentication with GraphQL.
Stars: ✭ 200 (-9.91%)
Mutual labels:  registration

Deep Global Registration

Introduction

This repository contains python scripts for training and testing Deep Global Registration, CVPR 2020 Oral. Deep Global Registration (DGR) proposes a differentiable framework for pairwise registration of real-world 3D scans. DGR consists of the following three modules:

  • a 6-dimensional convolutional network for correspondence confidence prediction
  • a differentiable Weighted Procrustes algorithm for closed-form pose estimation
  • a robust gradient-based SE(3) optimizer for pose refinement.

For more details, please check out

1min oral

Quick Pipleine Visualization

Indoor 3DMatch Registration Outdoor KITTI Lidar Registration

Related Works

Recent end-to-end frameworks combine feature learning and pose optimization. PointNetLK combines PointNet global features with an iterative pose optimization method. Wang et al. in Deep Closest Point train graph neural network features by backpropagating through pose optimization. We further advance this line of work. In particular, our Weighted Procrustes method reduces the complexity of optimization from quadratic to linear and enables the use of dense correspondences for highly accurate registration of real-world scans.

Deep Global Registration

The first component is a 6-dimensional convolutional network that analyzes the geometry of 3D correspondences and estimates their accuracy. Please refer to High-dim ConvNets, CVPR'20 for more details.

The second component we develop is a differentiable Weighted Procrustes solver. The Procrustes method provides a closed-form solution for rigid registration in SE(3). A differentiable version of the Procrustes method used for end-to-end registration passes gradients through coordinates, which requires O(N^2) time and memory for N keypoints. Instead, the Weighted Procrustes method passes gradients through the weights associated with correspondences rather than correspondence coordinates. The computational complexity of the Weighted Procrustes method is linear to the number of correspondences, allowing the registration pipeline to use dense correspondence sets rather than sparse keypoints. This substantially increases registration accuracy.

Our third component is a robust optimization module that fine-tunes the alignment produced by the Weighted Procrustes solver and the failure detection module. This optimization module minimizes a differentiable loss via gradient descent on the continuous SE(3) representation space. The optimization is fast since it does not require neighbor search in the inner loop such as ICP.

Configuration

Our network is built on the MinkowskiEngine and the system requirements are:

  • Ubuntu 14.04 or higher
  • CUDA 10.1.243 or higher
  • pytorch 1.5 or higher
  • python 3.6 or higher
  • GCC 7

You can install the MinkowskiEngine and the python requirements on your system with:

# Install MinkowskiEngine
sudo apt install libopenblas-dev g++-7
pip install torch
export CXX=g++-7; pip install -U MinkowskiEngine --install-option="--blas=openblas" -v

# Download and setup DeepGlobalRegistration
git clone https://github.com/chrischoy/DeepGlobalRegistration.git
cd DeepGlobalRegistration
pip install -r requirements.txt

Demo

You may register your own data with relevant pretrained DGR models. 3DMatch is suitable for indoor RGB-D scans; KITTI is for outdoor LiDAR scans.

Inlier Model FCGF model Dataset Voxel Size Feature Dimension Performance Link
ResUNetBN2C ResUNetBN2C 3DMatch 5cm (0.05) 32 TE: 7.34cm, RE: 2.43deg weights
ResUNetBN2C ResUNetBN2C KITTI 30cm (0.3) 32 TE: 3.14cm, RE: 0.14deg weights
python demo.py
Input PointClouds Output Prediction

Experiments

Comparison Speed vs. Recall Pareto Frontier
Comparison Frontier

Training

The entire network depends on pretrained FCGF models. Please download corresponding models before training. | Model | Normalized Feature | Dataset | Voxel Size | Feature Dimension | Link | |:-----------:|:-------------------:|:-------:|:-------------:|:-----------------:|:------:| | ResUNetBN2C | True | 3DMatch | 5cm (0.05) | 32 | download | | ResUNetBN2C | True | KITTI | 30cm (0.3) | 32 | download |

3DMatch

You may download preprocessed data and train via these commands:

./scripts/download_3dmatch.sh /path/to/3dmatch
export THREED_MATCH_DIR=/path/to/3dmatch; FCGF_WEIGHTS=/path/to/fcgf_3dmatch.pth ./scripts/train_3dmatch.sh

KITTI

Follow the instruction on KITTI Odometry website to download the KITTI odometry train set. Then train with

export KITTI_PATH=/path/to/kitti; FCGF_WEIGHTS=/path/to/fcgf_kitti.pth ./scripts/train_kitti.sh

Testing

3DMatch test set is different from train set and is available at the download section of the official website. You may download and decompress these scenes to a new folder.

To evaluate trained model on 3DMatch or KITTI, you may use

python -m scripts.test_3dmatch --threed_match_dir /path/to/3dmatch_test/ --weights /path/to/dgr_3dmatch.pth

and

python -m scripts.test_kitti --kitti_dir /path/to/kitti/ --weights /path/to/dgr_kitti.pth

Generate figures

We also provide experimental results of 3DMatch comparisons in results.npz. To reproduce figures we presented in the paper, you may use

python scripts/analyze_stats.py assets/results.npz

Citing our work

Please cite the following papers if you use our code:

@inproceedings{choy2020deep,
  title={Deep Global Registration},
  author={Choy, Christopher and Dong, Wei and Koltun, Vladlen},
  booktitle={CVPR},
  year={2020}
}

@inproceedings{choy2019fully,
  title = {Fully Convolutional Geometric Features},
  author = {Choy, Christopher and Park, Jaesik and Koltun, Vladlen},
  booktitle = {ICCV},
  year = {2019}
}

@inproceedings{choy20194d,
  title={4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks},
  author={Choy, Christopher and Gwak, JunYoung and Savarese, Silvio},
  booktitle={CVPR},
  year={2019}
}

Concurrent Works

There have a number of 3D registration works published concurrently.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].