Points2Surf: Learning Implicit Surfaces from Point Clouds (ECCV 2020 Spotlight)

Overview

Points2Surf: Learning Implicit Surfaces from Point Clouds (ECCV 2020 Spotlight)

This is our implementation of Points2Surf, a network that estimates a signed distance function from point clouds. This SDF is turned into a mesh with Marching Cubes. For more details, please watch the short video and long video.

Points2Surf reconstructs objects from arbitrary points clouds more accurately than DeepSDF, AtlasNet and Screened Poisson Surface Reconstruction.

The architecture is similar to PCPNet. In contrast to other ML-based surface reconstruction methods, e.g. DeepSDF and AtlasNet, Points2Surf is patch-based and therefore independent from classes. The strongly improved generalization leads to much better results, even better than Screened Poisson Surface Reconstruction in most cases.

This code was mostly written by Philipp Erler and Paul Guerrero. This work was published at ECCV 2020.

Prerequisites

  • Python >= 3.7
  • PyTorch >= 1.6
  • CUDA and CuDNN if using GPU
  • BlenSor 1.0.18 RC 10 for dataset generation

Quick Start

To get a minimal working example for training and reconstruction, follow these steps. We recommend using Anaconda to manage the Python environment. Otherwise, you can install the required packages with Pip as defined in the requirements.txt.

# clone this repo
# a minimal dataset is included (2 shapes for training, 1 for evaluation)
git clone https://github.com/ErlerPhilipp/points2surf.git

# go into the cloned dir
cd points2surf

# create a conda environment with the required packages
conda env create --file p2s.yml

# activate the new conda environment
conda activate p2s

# train and evaluate the vanilla model with default settings
python full_run.py

Reconstruct Surfaces from our Point Clouds

Reconstruct meshes from a point clouds to replicate our results:

# download the test datasets
python datasets/download_datasets_abc.py
python datasets/download_datasets_famous.py
python datasets/download_datasets_thingi10k.py
python datasets/download_datasets_real_world.py

# download the pre-trained models
python models/download_models_vanilla.py
python models/download_models_ablation.py
python models/download_models_max.py

# start the evaluation for each model
# Points2Surf main model, trained for 150 epochs
bash experiments/eval_p2s_vanilla.sh

# ablation models, trained to for 50 epochs
bash experiments/eval_p2s_small_radius.sh
bash experiments/eval_p2s_medium_radius.sh
bash experiments/eval_p2s_large_radius.sh
bash experiments/eval_p2s_small_kNN.sh
bash experiments/eval_p2s_large_kNN.sh
bash experiments/eval_p2s_shared_transformer.sh
bash experiments/eval_p2s_no_qstn.sh
bash experiments/eval_p2s_uniform.sh
bash experiments/eval_p2s_vanilla_ablation.sh

# additional ablation models, trained for 50 epochs
bash experiments/eval_p2s_regression.sh
bash experiments/eval_p2s_shared_encoder.sh

# best model based on the ablation results, trained for 250 epochs
bash experiments/eval_p2s_max.sh

Each eval script reconstructs all test sets using the specified model. Running one evaluation takes around one day on a normal PC with e.g. a 1070 GTX and grid resolution = 256.

To get the best results, take the Max model. It's 15% smaller and produces 4% better results (mean Chamfer distance over all test sets) than the Vanilla model. It avoids the QSTN and uses uniform sub-sampling.

Training with our Dataset

To train the P2S models from the paper with our training set:

# download the ABC training and validation set
python datasets/download_datasets_abc_training.py

# start the evaluation for each model
# Points2Surf main model, train for 150 epochs
bash experiments/train_p2s_vanilla.sh

# ablation models, train to for 50 epochs
bash experiments/train_p2s_small_radius.sh
bash experiments/train_p2s_medium_radius.sh
bash experiments/train_p2s_large_radius.sh
bash experiments/train_p2s_small_kNN.sh
bash experiments/train_p2s_large_kNN.sh
bash experiments/train_p2s_shared_transformer.sh
bash experiments/train_p2s_no_qstn.sh
bash experiments/train_p2s_uniform.sh
bash experiments/train_p2s_vanilla_ablation.sh

# additional ablation models, train for 50 epochs
bash experiments/train_p2s_regression.sh
bash experiments/train_p2s_shared_encoder.sh

# best model based on the ablation results, train for 250 epochs
bash experiments/train_p2s_max.sh

With 4 RTX 2080Ti, we trained around 5 days to 150 epochs. Full convergence is at 200-250 epochs but the Chamfer distance doesn't change much. The topological noise might be reduced, though.

Logging of loss (absolute distance, sign logits and both) with Tensorboard is done by default. Additionally, we log the accuracy, recall and F1 score for the sign prediction. You can start a Tensorboard server with:

bash start_tensorboard.sh

Make your own Datasets

The point clouds are stored as NumPy arrays of type np.float32 with ending .npy where each line contains the 3 coordinates of a point. The point clouds need to be normalized to the (-1..+1)-range.

A dataset is given by a text file containing the file name (without extension) of one point cloud per line. The file name is given relative to the location of the text file.

Dataset from Meshes for Training and Reconstruction

To make your own dataset from meshes, place your ground-truth meshes in ./datasets/(DATASET_NAME)/00_base_meshes/. Meshes must be of a type that Trimesh can load, e.g. .ply, .stl, .obj or .off. Because we need to compute signed distances for the training set, these input meshes must represent solids, i.e be manifold and watertight. Triangulated CAD objects like in the ABC-Dataset work in most cases. Next, create the text file ./datasets/(DATASET_NAME)/settings.ini with the following settings:

[general]
only_for_evaluation = 0
grid_resolution = 256
epsilon = 5
num_scans_per_mesh_min = 5
num_scans_per_mesh_max = 30
scanner_noise_sigma_min = 0.0
scanner_noise_sigma_max = 0.05

When you set only_for_evaluation = 1, the dataset preparation script skips most processing steps and produces only the text file for the test set.

For the point-cloud sampling, we used BlenSor 1.0.18 RC 10. Windows users need to fix a bug in the BlenSor code. Make sure that the blensor_bin variable in make_dataset.py points to your BlenSor binary, e.g. blensor_bin = "bin/Blensor-x64.AppImage".

You may need to change other paths or the number of worker processes and run:

python make_dataset.py

The ABC var-noise dataset with about 5k shapes takes around 8 hours using 15 worker processes on a Ryzen 7. Most computation time is required for the sampling and the GT signed distances.

Dataset from Point Clouds for Reconstruction

If you only want to reconstruct your own point clouds, place them in ./datasets/(DATASET_NAME)/00_base_pc/. The accepted file types are the same as for meshes.

You need to change some settings like the dataset name and the number of worker processes in make_pc_dataset.py and then run it with:

python make_pc_dataset.py

Manually Created Dataset for Reconstruction

In case you already have your point clouds as Numpy files, you can create a dataset manually. Put the *.npy files in the (DATASET_NAME)/04_pts/ directory. Then, you need to list the names (without extensions, one per line) in a textfile (DATASET_NAME)/testset.txt.

Related Work

Kazhdan, Michael, and Hugues Hoppe. "Screened poisson surface reconstruction." ACM Transactions on Graphics (ToG) 32.3 (2013): 1-13.

This work is the most important baseline for surface reconstruction. It fits a surface into a point cloud.

Groueix, Thibault, et al. "A papier-mâché approach to learning 3d surface generation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.

This is one of the first data-driven methods for surface reconstruction. It learns to approximate objects with 'patches', deformed and subdivided rectangles.

Park, Jeong Joon, et al. "Deepsdf: Learning continuous signed distance functions for shape representation." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.

This is one of the first data-driven methods for surface reconstruction. It learns to approximate a signed distance function from points.

Chabra, Rohan, et al. "Deep Local Shapes: Learning Local SDF Priors for Detailed 3D Reconstruction." arXiv preprint arXiv:2003.10983 (2020).

This concurrent work uses a similar approach as ours. It produces smooth surfaces but requires point normals.

Citation

If you use our work, please cite our paper:

@InProceedings{ErlerEtAl:Points2Surf:ECCV:2020,
  title   = {{Points2Surf}: Learning Implicit Surfaces from Point Clouds}, 
  author="Erler, Philipp
    and Guerrero, Paul
    and Ohrhallinger, Stefan
    and Mitra, Niloy J.
    and Wimmer, Michael",
  editor="Vedaldi, Andrea
    and Bischof, Horst
    and Brox, Thomas
    and Frahm, Jan-Michael",
  year    = {2020},
  booktitle="Computer Vision -- ECCV 2020",
  publisher="Springer International Publishing",
  address="Cham",
  pages="108--124",
  abstract="A key step in any scanning-based asset creation workflow is to convert unordered point clouds to a surface. Classical methods (e.g., Poisson reconstruction) start to degrade in the presence of noisy and partial scans. Hence, deep learning based methods have recently been proposed to produce complete surfaces, even from partial scans. However, such data-driven methods struggle to generalize to new shapes with large geometric and topological variations. We present Points2Surf, a novel patch-based learning framework that produces accurate surfaces directly from raw scans without normals. Learning a prior over a combination of detailed local patches and coarse global information improves generalization performance and reconstruction accuracy. Our extensive comparison on both synthetic and real data demonstrates a clear advantage of our method over state-of-the-art alternatives on previously unseen classes (on average, Points2Surf brings down reconstruction error by 30{\%} over SPR and by 270{\%}+ over deep learning based SotA methods) at the cost of longer computation times and a slight increase in small-scale topological noise in some cases. Our source code, pre-trained model, and dataset are available at: https://github.com/ErlerPhilipp/points2surf.",
  isbn="978-3-030-58558-7"
  doi = {10.1007/978-3-030-58558-7_7},
}
Comments
  • How to invoke the pretrained model?

    How to invoke the pretrained model?

    Thanks for the detailed code. Hi, I'm a novice in this field. The problem I'm facing now is how to call the pre-trained models (e.g. vanilla, ablation, max) to reconstruct our own point cloud data. I only use the command line in README.md to downloa them, but I don't know how to call them. I currently use full_ run.py to reconstruct our own point cloud data, but it is not effective.

    opened by qilin2008201 4
  • Missing keys and unexpected keys in state_dict

    Missing keys and unexpected keys in state_dict

    When running this command bash experiments/eval_p2s_vanilla.sh, I get following output

    Random Seed: 40938661
    getting information for 100 shapes
    models/p2s_vanilla_model_149.pth
    Traceback (most recent call last):
      File "/home/origin/codes/points2surf-master/full_eval.py", line 81, in <module>
        full_eval(opt=points_to_surf_eval.parse_arguments())
      File "/home/origin/codes/points2surf-master/full_eval.py", line 46, in full_eval
        points_to_surf_eval.points_to_surf_eval(opt)
      File "/home/origin/codes/points2surf-master/source/points_to_surf_eval.py", line 338, in points_to_surf_eval
        p2s_model = make_regressor(train_opt=train_opt, pred_dim=pred_dim, model_filename=model_filename, device=device)
      File "/home/origin/codes/points2surf-master/source/points_to_surf_eval.py", line 172, in make_regressor
        p2s_model.load_state_dict(state)
      File "/home/origin/anaconda3/envs/p2s/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1497, in load_state_dict
        raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
    RuntimeError: Error(s) in loading state_dict for DataParallel:
    	Missing key(s) in state_dict: "module.feat_global.stn1.conv1.weight", "module.feat_global.stn1.conv1.bias", "module.feat_global.stn1.conv2.weight", "module.feat_global.stn1.conv2.bias", "module.feat_global.stn1.conv3.weight", "module.feat_global.stn1.conv3.bias", "module.feat_global.stn1.fc1.weight", "module.feat_global.stn1.fc1.bias", "module.feat_global.stn1.fc2.weight", "module.feat_global.stn1.fc2.bias", "module.feat_global.stn1.fc3.weight", "module.feat_global.stn1.fc3.bias", "module.feat_global.stn1.bn1.weight", "module.feat_global.stn1.bn1.bias", "module.feat_global.stn1.bn1.running_mean", "module.feat_global.stn1.bn1.running_var", "module.feat_global.stn1.bn2.weight", "module.feat_global.stn1.bn2.bias", "module.feat_global.stn1.bn2.running_mean", "module.feat_global.stn1.bn2.running_var", "module.feat_global.stn1.bn3.weight", "module.feat_global.stn1.bn3.bias", "module.feat_global.stn1.bn3.running_mean", "module.feat_global.stn1.bn3.running_var", "module.feat_global.stn1.bn4.weight", "module.feat_global.stn1.bn4.bias", "module.feat_global.stn1.bn4.running_mean", "module.feat_global.stn1.bn4.running_var", "module.feat_global.stn1.bn5.weight", "module.feat_global.stn1.bn5.bias", "module.feat_global.stn1.bn5.running_mean", "module.feat_global.stn1.bn5.running_var". 
    	Unexpected key(s) in state_dict: "module.point_stn.conv1.weight", "module.point_stn.conv1.bias", "module.point_stn.conv2.weight", "module.point_stn.conv2.bias", "module.point_stn.conv3.weight", "module.point_stn.conv3.bias", "module.point_stn.fc1.weight", "module.point_stn.fc1.bias", "module.point_stn.fc2.weight", "module.point_stn.fc2.bias", "module.point_stn.fc3.weight", "module.point_stn.fc3.bias", "module.point_stn.bn1.weight", "module.point_stn.bn1.bias", "module.point_stn.bn1.running_mean", "module.point_stn.bn1.running_var", "module.point_stn.bn1.num_batches_tracked", "module.point_stn.bn2.weight", "module.point_stn.bn2.bias", "module.point_stn.bn2.running_mean", "module.point_stn.bn2.running_var", "module.point_stn.bn2.num_batches_tracked", "module.point_stn.bn3.weight", "module.point_stn.bn3.bias", "module.point_stn.bn3.running_mean", "module.point_stn.bn3.running_var", "module.point_stn.bn3.num_batches_tracked", "module.point_stn.bn4.weight", "module.point_stn.bn4.bias", "module.point_stn.bn4.running_mean", "module.point_stn.bn4.running_var", "module.point_stn.bn4.num_batches_tracked", "module.point_stn.bn5.weight", "module.point_stn.bn5.bias", "module.point_stn.bn5.running_mean", "module.point_stn.bn5.running_var", "module.point_stn.bn5.num_batches_tracked". 
    
    opened by Orig1n 4
  • didn’t get a  good reconstrcution result by directly using sdf.implicit_surface_to_mesh_directory

    didn’t get a good reconstrcution result by directly using sdf.implicit_surface_to_mesh_directory

    Hi, for testing ,I tried to reconstruct objs from abc_train datasets .I only used fuction sdf.implicit_surface_to_mesh_directory with argument query_dist_dir='abc_train\05_query_dist', query_pts_dir='abc_train\05_query_pts', query_grid_resolution=128 sigma=5 certainty_threshold=13. I opened gernerated ply&off file with meshlab , found all of them have many holes ,which quite different from GTmesh . Are there any problems when I run the code?

    opened by QtEngineer 4
  • AttributeError: Can't pickle local object 'points_to_surf_train.<locals>.seed_train_worker'

    AttributeError: Can't pickle local object 'points_to_surf_train..seed_train_worker'

    When i try to run it,error happens.

    pytorch 1.10.2 py3.8_cuda11.3_cudnn8_0 pytorch

    Traceback (most recent call last):
      File "D:/repo/points2surf/full_run.py", line 80, in <module>
        points_to_surf_train.points_to_surf_train(train_opt)
      File "D:\repo\points2surf\source\points_to_surf_train.py", line 428, in points_to_surf_train
        train_enum = enumerate(train_dataloader, 0)
      File "D:\Programs\anaconda3\envs\p2s\lib\site-packages\torch\utils\data\dataloader.py", line 354, in __iter__
        self._iterator = self._get_iterator()
      File "D:\Programs\anaconda3\envs\p2s\lib\site-packages\torch\utils\data\dataloader.py", line 305, in _get_iterator
        return _MultiProcessingDataLoaderIter(self)
      File "D:\Programs\anaconda3\envs\p2s\lib\site-packages\torch\utils\data\dataloader.py", line 918, in __init__
        w.start()
      File "D:\Programs\anaconda3\envs\p2s\lib\multiprocessing\process.py", line 121, in start
        self._popen = self._Popen(self)
      File "D:\Programs\anaconda3\envs\p2s\lib\multiprocessing\context.py", line 224, in _Popen
        return _default_context.get_context().Process._Popen(process_obj)
      File "D:\Programs\anaconda3\envs\p2s\lib\multiprocessing\context.py", line 327, in _Popen
        return Popen(process_obj)
      File "D:\Programs\anaconda3\envs\p2s\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
        reduction.dump(process_obj, to_child)
      File "D:\Programs\anaconda3\envs\p2s\lib\multiprocessing\reduction.py", line 60, in dump
        ForkingPickler(file, protocol).dump(obj)
    AttributeError: Can't pickle local object 'points_to_surf_train.<locals>.seed_train_worker'
    
    opened by TalonX1 4
  • query points on point clouds

    query points on point clouds

    Dear Philip,

    Thanks for providing the code for this super interesting paper. I have read all of the paper and still, one question has remained for me: When using pre-trained models for just inference (mesh reconstruction) out of point clouds, how the query points are defined from the point clouds?

    In the paper, it is mentioned that query points are defined by randomly sampling 1000 points on the surface and offset them in the normal direction. However, in the case of using just point clouds for the reconstruction once the model is trained, there would be no surface to sample query points from them, I wonder how these are defined in this case.

    Thank you in advance.

    opened by schervnr 4
  • Dataset variant naming

    Dataset variant naming

    Hi, thanks for releasing the code and the dataset!

    In the paper you mentioned you created a dataset with medium noise (with the suffix ‘med’ to indicate this variant). But the downloaded datasets have no such variant. I wonder if it is no suffix for ABC, and ‘original’ for Famous and Thingi10k?

    opened by trisct 4
  • Sampling with Blensor

    Sampling with Blensor

    Hi @ErlerPhilipp,

    In the paper you stated

    As a pre-processing step, we center all meshes at the origin and scale them uniformly to fit within the unit cube, ..., For each scan, we place the scanner at a random location on a sphere centered at the origin, ..., The scanner is oriented to point at a location with small random offset from the origin, ..., and rotated randomly around the view direction.

    I wonder how this corresponds to the code https://github.com/ErlerPhilipp/points2surf/blob/c8e6d47062fc068802e179a37427981c8e10b128/blensor_script_template.py#L30 https://github.com/ErlerPhilipp/points2surf/blob/c8e6d47062fc068802e179a37427981c8e10b128/blensor_script_template.py#L100-L102 which to me seems the scanner is at the center while the mesh is moving and rotating around.

    Any hint? Thanks in advance!

    opened by chenzhaiyu 4
  • Question about chamfer distance formulation

    Question about chamfer distance formulation

    Hi,

    I have noticed your CD formulation in the main paper has the mean operator, but in the implementation without that. The formulation of implementation seems like # http://graphics.stanford.edu/courses/cs468-17-spring/LectureSlides/L14%20-%203d%20deep%20learning%20on%20point%20cloud%20representation%20(analysis).pdf that directly sum distance.

    https://github.com/ErlerPhilipp/points2surf/blob/2af6e0facf58422ed12e0c676c70199cd0dfbb43/source/base/evaluation.py#L222-L256

    Am I right?

    Best

    opened by bearprin 3
  • Cannot get correct surface representation by using Marchin_Cube

    Cannot get correct surface representation by using Marchin_Cube

    Hi, I tried to save query_pts and query_dist of my own network after training,and then used fuction sdf.implicit_surface_to_mesh_directory from point2surf to reconstruct shapes but found that the generated mesh has a lot of vertics and faces (like this pic) I checked query_dist file and found the dists are highly smaller than ABC_train datasets. The average query_dist of mine is 0.00165,while ABC_train dataset is -0.08. I don't know whether too small query_dist will cause reconstructing failed. How can I fix it? 20220518013127

    opened by QtEngineer 2
  • Error while running the max model evalution

    Error while running the max model evalution

    running this command bash experiments/eval_p2s_max.sh i keep getting this errror torch._C._cuda_init() RuntimeError: CUDA driver initialization failed, you might not have a CUDA gpu.

    any help please

    opened by Komti13 2
  • How to get query points while reconstructing

    How to get query points while reconstructing

    Hi, I noticed the number of query point while constructing is highly more than 2000,about 50000.Does it equals to total amount of points from input npz file?

    opened by QtEngineer 2
  • How to get datasets with var,med and max noise?

    How to get datasets with var,med and max noise?

    Hi, I tried to download ABC and Famous datastes and got vesion of original,free,and extra noise . It seems theres only one noisy datasets. Now I want to get datasets(or test datasets) with different levels of noise.Could you please provided them to me?Thanks!Looking forward to your reply.

    opened by QtEngineer 3
  • Empty folder 04_pts_vis

    Empty folder 04_pts_vis

    Thanks for the great code!(Still learning how it works xD) I just want to test your model on my pointcloud(.npy file) so I ran

    python make_pc_dataset.py
    

    with including my npy file in 04_pts and adding the name on testset.txt. Then the folder "04_pts" was created but it was empty.

    Am I doing right? Thanks!

    opened by MinchoU 3
Owner
Philipp Erler
PhD student at TU Wien researching surface reconstruction with deep learning
Philipp Erler
Not All Points Are Equal: Learning Highly Efficient Point-based Detectors for 3D LiDAR Point Clouds (CVPR 2022, Oral)

Not All Points Are Equal: Learning Highly Efficient Point-based Detectors for 3D LiDAR Point Clouds (CVPR 2022, Oral) This is the official implementat

Yifan Zhang 259 Dec 25, 2022
Deep Learning for 3D Point Clouds: A Survey (IEEE TPAMI, 2020)

??Deep Learning for 3D Point Clouds (IEEE TPAMI, 2020)

Qingyong 1.4k Jan 8, 2023
Code for Iso-Points: Optimizing Neural Implicit Surfaces with Hybrid Representations

Implementation for Iso-Points (CVPR 2021) Official code for paper Iso-Points: Optimizing Neural Implicit Surfaces with Hybrid Representations paper |

Yifan Wang 66 Nov 8, 2022
[ICCV'21] UNISURF: Unifying Neural Implicit Surfaces and Radiance Fields for Multi-View Reconstruction

UNISURF: Unifying Neural Implicit Surfaces and Radiance Fields for Multi-View Reconstruction Project Page | Paper | Supplementary | Video This reposit

null 331 Dec 28, 2022
Volsdf - Volume Rendering of Neural Implicit Surfaces

Volume Rendering of Neural Implicit Surfaces Project Page | Paper | Data This re

Lior Yariv 221 Jan 7, 2023
Code for "PV-RAFT: Point-Voxel Correlation Fields for Scene Flow Estimation of Point Clouds", CVPR 2021

PV-RAFT This repository contains the PyTorch implementation for paper "PV-RAFT: Point-Voxel Correlation Fields for Scene Flow Estimation of Point Clou

Yi Wei 43 Dec 5, 2022
Self-Supervised Learning for Domain Adaptation on Point-Clouds

Self-Supervised Learning for Domain Adaptation on Point-Clouds Introduction Self-supervised learning (SSL) allows to learn useful representations from

Idan Achituve 66 Dec 20, 2022
Code for "CloudAAE: Learning 6D Object Pose Regression with On-line Data Synthesis on Point Clouds" @ICRA2021

CloudAAE This is an tensorflow implementation of "CloudAAE: Learning 6D Object Pose Regression with On-line Data Synthesis on Point Clouds" Files log:

Gee 35 Nov 14, 2022
This repo is a PyTorch implementation for Paper "Unsupervised Learning for Cuboid Shape Abstraction via Joint Segmentation from Point Clouds"

Unsupervised Learning for Cuboid Shape Abstraction via Joint Segmentation from Point Clouds This repository is a PyTorch implementation for paper: Uns

Kaizhi Yang 42 Dec 9, 2022
Code Release for ICCV 2021 (oral), "AdaFit: Rethinking Learning-based Normal Estimation on Point Clouds"

AdaFit: Rethinking Learning-based Normal Estimation on Point Clouds (ICCV 2021 oral) **Project Page | Arxiv ** Runsong Zhu¹, Yuan Liu², Zhen Dong¹, Te

null 40 Dec 30, 2022
Code for the paper "Spatio-temporal Self-Supervised Representation Learning for 3D Point Clouds" (ICCV 2021)

Spatio-temporal Self-Supervised Representation Learning for 3D Point Clouds This is the official code implementation for the paper "Spatio-temporal Se

Hesper 63 Jan 5, 2023
DGCNN - Dynamic Graph CNN for Learning on Point Clouds

DGCNN is the author's re-implementation of Dynamic Graph CNN, which achieves state-of-the-art performance on point-cloud-related high-level tasks including category classification, semantic segmentation and part segmentation.

Wang, Yue 1.3k Dec 26, 2022
Code for the paper SphereRPN: Learning Spheres for High-Quality Region Proposals on 3D Point Clouds Object Detection, ICIP 2021.

SphereRPN Code for the paper SphereRPN: Learning Spheres for High-Quality Region Proposals on 3D Point Clouds Object Detection, ICIP 2021. Authors: Th

Thang Vu 15 Dec 2, 2022
Public repository of the 3DV 2021 paper "Generative Zero-Shot Learning for Semantic Segmentation of 3D Point Clouds"

Generative Zero-Shot Learning for Semantic Segmentation of 3D Point Clouds Björn Michele1), Alexandre Boulch1), Gilles Puy1), Maxime Bucher1) and Rena

valeo.ai 15 Dec 22, 2022
Implementation of CVPR'2022:Surface Reconstruction from Point Clouds by Learning Predictive Context Priors

Surface Reconstruction from Point Clouds by Learning Predictive Context Priors (CVPR 2022) Personal Web Pages | Paper | Project Page This repository c

null 136 Dec 12, 2022
git《Learning Pairwise Inter-Plane Relations for Piecewise Planar Reconstruction》(ECCV 2020) GitHub:

Learning Pairwise Inter-Plane Relations for Piecewise Planar Reconstruction Code for the ECCV 2020 paper by Yiming Qian and Yasutaka Furukawa Getting

null 37 Dec 4, 2022
PyTorch implementation of ECCV 2020 paper "Foley Music: Learning to Generate Music from Videos "

Foley Music: Learning to Generate Music from Videos This repo holds the code for the framework presented on ECCV 2020. Foley Music: Learning to Genera

Chuang Gan 30 Nov 3, 2022
This project is the official implementation of our accepted ICLR 2021 paper BiPointNet: Binary Neural Network for Point Clouds.

BiPointNet: Binary Neural Network for Point Clouds Created by Haotong Qin, Zhongang Cai, Mingyuan Zhang, Yifu Ding, Haiyu Zhao, Shuai Yi, Xianglong Li

Haotong Qin 59 Dec 17, 2022
(CVPR 2021) PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds

PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds by Mutian Xu*, Runyu Ding*, Hengshuang Zhao, and Xiaojuan Qi. Int

CVMI Lab 228 Dec 25, 2022