Coder Social home page Coder Social logo

agitoz / deep-geometric-prior Goto Github PK

View Code? Open in Web Editor NEW

This project forked from fwilliams/deep-geometric-prior

0.0 2.0 0.0 443 KB

The reference implementaiton for the paper "Deep Geometric Prior for Surface Reconstruction with aim to make it work on a single gpu"

Python 100.00%

deep-geometric-prior's Introduction

Deep Geometric Prior for Surface Reconstruction

The reference implementaiton for the CVPR 2019 paper Deep Geometric Prior for Surface Reconstruction.

Code Overview

There are several programs in this repository explained in detail below. The documentation for each program can be seen by running it with the -h flag. The code is also extensively commented and should be easy to follow. Please create GitHub issues or reach out to me by email if you run into any problems.

  • reconstruct_surface.py:

    Compute a set of patches which represent a surface.

    This program produces a file (defaulting to out.pt) as output which can be used to upsample a point cloud with export_point_cloud.py. You can optionally plot the reconstruction with plot_reconstruction.py.

  • reconstruct_single_patch.py

    Compute a single surface patch fitted to a point cloud.

    As with reconstruct_surface.py, this program produces a file (defaulting to out.pt) as output which can be used to upsample a point cloud with export_point_cloud.py. You can optionally plot the reconstruction with plot_reconstruction.py.

  • export_point_cloud.py

    Exports a dense point cloud from a reconstruction file produced by reconstruct_surface.py or reconstruct_single_patch,py. This can be fed into a standard algorithm such as Screened Poisson Surface Reconstruction to extract a triangle mesh.

Setting up and Running the Code

With conda (Recommended)

All dependencies can be automatically installed with conda using the provided environment.yml Simply run the following from the root of the repository:

conda env create -f environment.yml

This will create a conda environment named deep-surface-prior with all the correct dependencies installed. You can activate the environment by running:

conda activate deep-geometric-prior

Installing Dependencies Manually (Not Recommended)

If you are not using Conda, you can manually install the following dependencies:

  • Python 3.6 (or later)
  • PyTorch 1.0 (or later)
  • NumPy 1.15 (or later)
  • SciPy 1.1.0 (or later)
  • FML 0.1 (or later)
  • Point Cloud Utils 0.12.0 (or later)
  • Mayavi 4.6.2 (or later)

The scans, ground truth data and reconstructions from the paper are available for download here.

The linked zip archive contains 3 directories:

  • scans contains a simulated scan of the models. The scans are generated with the surface reconstruction benchmark.
  • ground_truth contains a dense point cloud for each model sampled from the ground truth surface.
  • our_reconstructions contains a reconstructed point cloud for each model generated with our method.

Running the Deep Geometric Prior on the Surface Reconstruction Benchmark

  • Make sure to install the project dependencies with conda or manually as described above.
  • Download the Surface Reconstruction Benchmark Data (See above section for details).
  • Extract the zip file which should produce a directory named deep_geometric_prior_data.
  • Since Deep Geometric Prior fits many neural networks over a model, it requires a lot of memory (see paper for details), thus it is best to use multiple GPUs when reconstructing a model. Suppose four GPUs are available named cuda:0, cuda:1, cuda:2, and cuda:3, then the following five commands will reconstruct the five benchmark models using those GPUs. You can change the list of devices for different configurations:
python reconstruct_surface.py deep_geometric_prior_data/scans/gargoyle.ply 0.01 1.0 20 -d cuda:0 cuda:1 cuda:2 cuda:3 -nl 25 -ng 25 -o gargoyle

python reconstruct_surface.py deep_geometric_prior_data/scans/dc.ply 0.01 1.0 20 -d cuda:0 cuda:1 cuda:2 cuda:3 -nl 25 -ng 25 -o dc

python reconstruct_surface.py deep_geometric_prior_data/scans/lord_quas.ply 0.01 1.0 10 -d cuda:0 cuda:1 cuda:2 cuda:3 -nl 25 -ng 25 -o lord_quas

python reconstruct_surface.py deep_geometric_prior_data/scans/anchor.ply 0.01 1.0 10 -d cuda:0 cuda:1 cuda:2 cuda:3 -nl 25 -ng 25 -o anchor

python reconstruct_surface.py deep_geometric_prior_data/scans/daratech.ply 0.01 1.0 10 -d cuda:0 cuda:1 cuda:2 cuda:3 -nl 25 -ng 25 -o daratech   

NOTE: You may need to change the paths deep_geometric_prior_data/scans/*.ply to point to where you extracted the zip file, and you may need to change the device arguments -d cuda:0 ... to adapt to your system. To avoid CUDA out of memory error use the reconstruction in batches --batch-size.

Each of the above commands produces a ply file and pt file (e.g. anchor.ply, anchor.pt). The PLY file contains a dense upsampled point cloud and the PT file contains metadata about the reconstruction. You can use the PT file to perform further operations using example export_point_cloud.py.

deep-geometric-prior's People

Contributors

agitoz avatar fwilliams avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.