Home

Awesome

[ICCV 2021] OMNet: Learning Overlapping Mask for Partial-to-Partial Point Cloud Registration

This is the Pytorch implementation of our ICCV2021 paper OMNet. For our MegEngine implementation, please refer to this repo.

Our presentation video: [Youtube][Bilibili].

Our Poster

image

Dependencies

Data Preparation

OS data

We refer the original data from PointNet as OS data, where point clouds are only sampled once from corresponding CAD models. We offer two ways to use OS data, (1) you can download this data from its original link original_OS_data.zip. (2) you can also download the data that has been preprocessed by us from link our_OS_data.zip.

TS data

Since OS data incurs over-fitting issue, we propose our TS data, where point clouds are randomly sampled twice from CAD models. You need to download our preprocessed ModelNet40 dataset first, where 8 axisymmetrical categories are removed and all CAD models have 40 randomly sampled point clouds. The download link is TS_data.zip. All 40 point clouds of a CAD model are stacked to form a (40, 2048, 3) numpy array, you can easily obtain this data by using following code:

import numpy as np
points = np.load("path_of_npy_file")
print(points.shape, type(points))  # (40, 2048, 3), <class 'numpy.ndarray'>

Then, you need to put the data into ./dataset/data, and the contents of directories are as follows:

./dataset/data/
├── modelnet40_half1_rm_rotate.txt
├── modelnet40_half2_rm_rotate.txt
├── modelnet_os
│   ├── modelnet_os_test.pickle
│   ├── modelnet_os_train.pickle
│   ├── modelnet_os_val.pickle
│   ├── test [1146 entries exceeds filelimit, not opening dir]
│   ├── train [4194 entries exceeds filelimit, not opening dir]
│   └── val [1002 entries exceeds filelimit, not opening dir]
└── modelnet_ts
    ├── modelnet_ts_test.pickle
    ├── modelnet_ts_train.pickle
    ├── modelnet_ts_val.pickle
    ├── shape_names.txt
    ├── test [1146 entries exceeds filelimit, not opening dir]
    ├── train [4196 entries exceeds filelimit, not opening dir]
    └── val [1002 entries exceeds filelimit, not opening dir]

Training and Evaluation

Begin training

For ModelNet40 dataset, you can just run:

python3 train.py --model_dir=./experiments/experiment_omnet/

For other dataset, you need to add your own dataset code in ./dataset/data_loader.py. Training with a lower batch size, such as 16, may obtain worse performance than training with a larger batch size, e.g., 64.

Begin testing

You need to download the pretrained checkpoint and run:

python3 evaluate.py --model_dir=./experiments/experiment_omnet --restore_file=./experiments/experiment_omnet/val_model_best.pth

The following table shows our performance on ModelNet40, where val and test indicate Unseen Shapes and Unseen Categories respectively. PRNet and RPMNet indicate the partial manners used in PRNet and RPMNet respectively.

datasetRMSE(R)MAE(R)RMSE(t)MAE(t)Error(R)Error(t)checkpoint
OS_PRNet_cleanval0.9120.3390.00780.00490.6390.0099Google Drive
test2.2470.6520.01770.00771.2410.0154Google Drive
TS_PRNet_cleanval1.0320.5060.00850.00570.9840.0113Google Drive
test2.3720.9740.01460.00771.8920.0152Google Drive
OS_PRNet_noiseval1.0290.5730.00890.00611.0770.0123Google Drive
test2.3180.9570.01550.00781.8090.0156Google Drive
TS_PRNet_noiseval1.3140.7710.01020.00741.4900.0148Google Drive
test2.4431.1890.01810.00972.3110.0193Google Drive
OS_RPMNet_cleanval0.7710.2770.01540.00560.5610.0122Google Drive
test3.7191.3140.03920.01512.6590.0321Google Drive
TS_RPMNet_cleanval1.4010.5440.02410.00951.1280.0202Google Drive
test4.0161.6220.04190.01843.2050.0394Google Drive
OS_RPMNet_noiseval0.9980.5550.01720.00781.0790.0167Google Drive
test3.5721.5700.03910.01723.0730.0359Google Drive
TS_RPMNet_noiseval1.5220.8170.01890.00981.6220.0208-
test4.3561.9240.04860.02233.8340.0476-

Citation

@InProceedings{Xu_2021_ICCV,
    author={Xu, Hao and Liu, Shuaicheng and Wang, Guangfu and Liu, Guanghui and Zeng, Bing},
    title={OMNet: Learning Overlapping Mask for Partial-to-Partial Point Cloud Registration},
    booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
    month={October},
    year={2021},
    pages={3132-3141}
}

Acknowledgments

In this project we use (parts of) the official implementations of the following works:

We thank the respective authors for open sourcing their methods.