This is the official implementation for paper PU-GACNet: Graph Attention Convolution Network for Point Cloud Upsampling
Previous methods including PU-Net, MPU (3PU), PU-GAN, Dis-PU, PU-GCN and the repositories of PU-GCN support training our PU-GACNet. Please kindly cite all of the methods.
This repository is based on Tensorflow (1.13.1) and the TF operators from PointNet++. Therefore, you need to install tensorflow and compile the TF operators.
You can check the env_install.sh
for details how to install the environment. In the second step, for compiling TF operators, please check compile.sh
and tf_compile.sh
in tf_ops
folder, one has to manually change the path!!.
Clone the repository:
https://github.com/BingHan0458/PU-GACNet
cd PU-GAC
Install the environment:
Once you have modified the path in compile.sh
and tf_compile.sh
under tf_ops
, you can simply install pugac
environment by:
source env_install.sh
conda activate pugac
Download the dataset:
You can download PU1K dataset from Google Drive and place it into PU-GAC/data/PU1K.
The directory tree of the data file is as follows:
data
|__PU1K
|__train
|__pu1k_poisson_256_poisson_1024_pc_2500_patch50_addpugan.h5
|__test
|__original_meshes
|__*.off
|__input_2048
|__*.xyz
|__gt_8192
|__*.xyz
|__realscan_KITTI
|__0000001.xyz
|__...
Since PU1K benchmark data is used, no data preprocessing operations are required. If you want to use your own datasets, you can refer to data_preprocessing/prep_data
for data processing.
Train the models:
PU-GACNet
python main.py --phase train --model pugac --upsampler edge-aware_nodeshuffle --k 20
PU-GCN
python main.py --phase train --model pugcn --upsampler nodeshuffle --k 20
PU-Net
python main.py --phase train --model punet --upsampler multi_cnn
MPU
python main.py --phase train --model mpu --upsampler duplicate
PU-GAN
python main.py --phase train --model pugan --more_up 2
Evaluate the models:
Before testing, please copy the corresponding model to the pretrain
folder. Then you can run the scripts test_pu1k_allmodels.sh
.
source test_pu1k_allmodels.sh # please look this file and `test_pu1k.sh` for details
Test on the real-scanned dataset:
Before testing, please copy the corresponding model to the pretrain
folder. Then you can run the scripts test_realscan_allmodels.sh
.
source test_realscan_allmodels.sh # please look this file and `test_realscan.sh` for details
Visualization:
You can use meshlab or cloudcompare software for visualization. Furthermore, mayavi is also a good choice.
If PU-GACNet and the repo are useful for your research, please consider citing:
@inproceedings{Yu2018Pu,
author = "Lequan Yu and Xianzhi Li and Chi-Wing Fu and Daniel Cohen-Or and Pheng-Ann Heng.",
year = 2018,
title = "{Pu-net: Point cloud upsampling network}",
booktitle="Proceedings of IEEE Conference on Computer Vision and Pattern Recognition {(CVPR-18)}",
pages = "2790-2799",
}
@inproceedings{Wang2019Patch,
author = "Yifan Wang and Shihao Wu and Hui Huang and Daniel Cohen-Or and Olga Sorkine-Hornung.",
year = 2019,
title = "{Patch-based progressive 3d point set upsampling}",
booktitle="Proceedings of IEEE Conference on Computer Vision and Pattern Recognition {(CVPR-19)}",
pages = "5958-5967",
}
@inproceedings{Li2019Pu,
author = "Ruihui Li and Xianzhi Li and Chi-Wing Fu and Daniel Cohen-Or and Pheng-Ann Heng.",
year = 2019,
title = "{Pu-gan: A point cloud upsampling adversarial network}",
booktitle="Proceedings of IEEE International Conference on Computer Vision {(ICCV-19)}",
pages = "7203-7212",
}
@inproceedings{Li2021Point,
author = "Ruihui Li and Xianzhi Li and PhengAnn Heng and ChiWing Fu.",
year = 2021,
title = "{Point cloud upsampling via disentangled refinement}",
booktitle="Proceedings of IEEE Conference on Computer Vision and Pattern Recognition {(CVPR-21)}",
pages = "344-353",
}
@inproceedings{Qian2021Pu,
author = "Guocheng Qian and Abdulellah Abualshour and Guohao Li and Ali Thabet and Bernard Ghanem.",
year = 2021,
title = "{Pu-gcn: Point cloud upsampling using graph convolutional networks}",
booktitle="Proceedings of IEEE Conference on Computer Vision and Pattern Recognition {(CVPR-21)}",
pages = "11683-11692",
}