AdaFit: Rethinking Learning-based Normal Estimation on Point Clouds (ICCV 2021 oral)

**Project Page | Arxiv **

Runsong Zhu¹, Yuan Liu², Zhen Dong¹, Tengping jiang¹, Yuan Wang¹, Wenping Wang³, Bisheng Yang¹.

¹Wuhan University + ²The University of Hong Kong + ³Texas A&M University.

Requirements

we conduct the experiment in the following setting:

  • Ubuntu 16.04
  • CUDA 10.1
  • Python v3.7
  • Pytorch v1.4 & torchvision v0.5.0
  • matplotlib v2.2.4
  • numpy v1.17.4
  • tensorboardX v1.9
  • scikit-learn v0.21.3
  • scipy v1.3.2
  • urllib3 v1.25.8

How to use the code

Data praparation

you need to download PCPNet dataset and place it in ./data/

single-scale AdaFit (Train + Test on PCPNet):

python run_AdaFit_single_experiment_single_scale.py

Note that, the difference between single-scale verison of our AdaFit and DeepFit is the offset-learning part, which you only need to add the following code.:

# parameter

self.conv_bias = nn.Conv1d(128, 3, 1)

# train /test 

...
bias =  self.conv_bias(x)
bias[:,:,0] = 0
points = points + bias
...

AdaFit (Train + Test on PCPNet):

python run_AdaFit_single_experiment_multi_scale.py

Acknowledgement

The code is heavily based on DeepFit.

If you find our work useful in your research, please cite our paper. And please also cite the DeepFit paper.

@article{zhu2021adafit,
  title={AdaFit: Rethinking Learning-based Normal Estimation on Point Clouds},
  author={Zhu, Runsong and Liu, Yuan and Dong, Zhen and Jiang, Tengping and Wang, Yuan and Wang, Wenping and Yang, Bisheng},
  journal={arXiv preprint arXiv:2108.05836},
  year={2021}
}

@article{ben2020deepfit,
  title={DeepFit: 3D Surface Fitting via Neural Network Weighted Least Squares},
  author={Ben-Shabat, Yizhak and Gould, Stephen},
  journal={arXiv preprint arXiv:2003.10826},
  year={2020}
}

GitHub

https://github.com/Runsong123/AdaFit