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.


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):


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):



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.

  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},

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