All Projects → dsvilarkovic → dynamic_plane_convolutional_onet

dsvilarkovic / dynamic_plane_convolutional_onet

Licence: MIT license
[WACV 2021] Dynamic Plane Convolutional Occupancy Networks

Programming Languages

C++
36643 projects - #6 most used programming language
python
139335 projects - #7 most used programming language
c
50402 projects - #5 most used programming language
Mako
254 projects

Projects that are alternatives of or similar to dynamic plane convolutional onet

adareg-monodispnet
Repository for Bilateral Cyclic Constraint and Adaptive Regularization for Unsupervised Monocular Depth Prediction (CVPR2019)
Stars: ✭ 22 (-12%)
Mutual labels:  3d-reconstruction, 3d-vision
object nerf
Code for "Learning Object-Compositional Neural Radiance Field for Editable Scene Rendering", ICCV 2021
Stars: ✭ 135 (+440%)
Mutual labels:  3d-reconstruction, 3d-vision
learning-topology-synthetic-data
Tensorflow implementation of Learning Topology from Synthetic Data for Unsupervised Depth Completion (RAL 2021 & ICRA 2021)
Stars: ✭ 22 (-12%)
Mutual labels:  3d-reconstruction, 3d-vision
NeuralRecon
Code for "NeuralRecon: Real-Time Coherent 3D Reconstruction from Monocular Video", CVPR 2021 oral
Stars: ✭ 812 (+3148%)
Mutual labels:  3d-reconstruction, 3d-vision
StrayVisualizer
Visualize Data From Stray Scanner https://keke.dev/blog/2021/03/10/Stray-Scanner.html
Stars: ✭ 30 (+20%)
Mutual labels:  3d-reconstruction, pointclouds
Point2Mesh
Meshing Point Clouds with Predicted Intrinsic-Extrinsic Ratio Guidance (ECCV2020)
Stars: ✭ 61 (+144%)
Mutual labels:  3d-reconstruction, pointclouds
void-dataset
Visual Odometry with Inertial and Depth (VOID) dataset
Stars: ✭ 74 (+196%)
Mutual labels:  3d-reconstruction, 3d-vision
PaiConvMesh
Official repository for the paper "Learning Local Neighboring Structure for Robust 3D Shape Representation"
Stars: ✭ 19 (-24%)
Mutual labels:  3d-reconstruction, 3d-vision
semantic-tsdf
Semantic-TSDF for Self-driving Static Scene Reconstruction
Stars: ✭ 14 (-44%)
Mutual labels:  3d-reconstruction
vision-based estimations
Vision-based Robot 3D Pose and Velocities Estimations
Stars: ✭ 32 (+28%)
Mutual labels:  3d-vision
cv-arxiv-daily
🎓Automatically Update CV Papers Daily using Github Actions (Update Every 12th hours)
Stars: ✭ 216 (+764%)
Mutual labels:  3d-reconstruction
New-View-Synthesis
Collecting papers about new view synthesis
Stars: ✭ 437 (+1648%)
Mutual labels:  3d-reconstruction
StructuredLight
Creating a 3D reconstruction of an object using multiple images
Stars: ✭ 42 (+68%)
Mutual labels:  3d-reconstruction
RefRESH
Create RefRESH data: dataset tools for Learning Rigidity in Dynamic Scenes with a Moving Camera for 3D Motion Field Estimation (ECCV 2018)
Stars: ✭ 51 (+104%)
Mutual labels:  3d-vision
RfDNet
Implementation of CVPR'21: RfD-Net: Point Scene Understanding by Semantic Instance Reconstruction
Stars: ✭ 150 (+500%)
Mutual labels:  3d-reconstruction
adaptive-surface-reconstruction
Adaptive Surface Reconstruction for 3D Data Processing
Stars: ✭ 39 (+56%)
Mutual labels:  3d-reconstruction
Dicom-Viewer
An application displaying 2D/3D Dicom
Stars: ✭ 37 (+48%)
Mutual labels:  3d-reconstruction
LPDC-Net
CVPR2021 paper "Learning Parallel Dense Correspondence from Spatio-Temporal Descriptorsfor Efficient and Robust 4D Reconstruction"
Stars: ✭ 27 (+8%)
Mutual labels:  3d-reconstruction
Normal-Assisted-Stereo
[CVPR 2020] Normal Assisted Stereo Depth Estimation
Stars: ✭ 95 (+280%)
Mutual labels:  3d-vision
3d-recon
Implementation for paper "Learning Single-View 3D Reconstruction with Limited Pose Supervision".
Stars: ✭ 59 (+136%)
Mutual labels:  3d-reconstruction

Dynamic Plane Convolutional Occupancy Networks

Paper | Supplementary | Video

teaser

This repository contains the implementation of the paper:

Dynamic Plane Convolutional Occupancy Networks
Stefan Lionar*, Daniil Emtsev*, Dusan Svilarkovic*, and Songyou Peng
WACV 2021

If you find our code or paper useful, please consider citing us:

@inproceedings{Lionar2021WACV,
 title = {Dynamic Plane Convolutional Occupancy Networks},
 author={Stefan Lionar and Daniil Emtsev and Dusan Svilarkovic and Songyou Peng},
 booktitle = {Winter Conference on Applications of Computer Vision (WACV)},
 year = {2021}}

Installation

First you have to make sure that you have all dependencies in place. The simplest way to do so, is to use anaconda.

You can create an anaconda environment called dyn_conv_onet using

conda env create -f environment.yaml
conda activate dyn_conv_onet

Note: if the pytorch_scatter is not working, you can install it following the official instruction.

pip install torch-scatter==latest+cu101 -f https://pytorch-geometric.com/whl/torch-1.4.0.html

Next, compile the extension modules. You can do this via

python setup.py build_ext --inplace

Dataset

To evaluate a pretrained model or train a new model from scratch, you have to obtain the respective dataset. In this paper, we consider the ShapeNet and synthetic room dataset:

ShapeNet

You can download the dataset (73.4 GB) by running the script from Occupancy Networks. After, you should have the dataset in data/ShapeNet folder. Or by calling the command

bash scripts/download_shape_net_data.sh

Synthetic room

You can download the synthetic room dataset by calling the command

bash scripts/download_room_data.sh

If you use this dataset, please cite Convolutional Occupancy Networks paper.

Usage

When you have installed all binary dependencies and obtained the preprocessed data, you are ready to run our pre-trained models and train new models from scratch.

Mesh Generation

To generate meshes using a trained model, use

python generate.py CONFIG.yaml

where you replace CONFIG.yaml with the correct config file. Our configurations can be found in configs folder.

Use a pre-trained model
The easiest way is to use a pre-trained model. You can do this by using one of the config files under the pointcloud folder and downloading pretrained models from this link.

For example, for 3D reconstruction from noisy point cloud with our 3-plane model on the synthetic room dataset, you can simply run:

python generate.py configs/pointcloud/shapenet/shapenet_dynamic_3plane.yaml

The script will run the generation of meshes from the pretrained model. You can find the outputs in the out/... folders

Evaluation

For evaluation of the models, we provide the script eval_meshes.py. You can run it using:

python eval_meshes.py CONFIG.yaml

The script takes the meshes generated in the previous step and evaluates them using a standardized protocol. The output will be written to .pkl/.csv files in the corresponding generation folder which can be processed using pandas.

Training

Finally, to train a new network from scratch, run:

python train.py CONFIG.yaml

For available training options, please take a look at configs/default.yaml and configs/pointcloud/shapenet_dynamic_3plane.yaml.

Configuration file setup for training

This part will explain how to modify configs/pointcloud/shapenet_dynamic_3plane.yaml to run according to your wishes.

Loss Similarity

To run with similarity loss you should put the training.similarity = True On the opposite, put it to False

Models

  • To use a Dynamic Plane model set dynamic_pointnet_local_pool: True in model.encoder and dynamic_simple_local:True in model.decoder

  • To use a Hybrid Dynamic Plane model set hybrid_pointnet_local_pool: True in model.encoder and hybrid_simple_local: True in model.decoder

  • To change number of planes predicted, put number of channels you need on argument model.encoder_kwargs.n_channels

  • To set up pretrained model to run, change training.out_dir to file path of the model (in train.py we use model.pt as the pretrained file name).

Positional Encoding

To enable the positional encoding put model.encoder_kwargs.pos_encoding=True and model.decoder_kwargs.pos_encoding=True.

Rotation augmentation

To train a new network with random rotations on input, run:

python train_rotate.py CONFIG.yaml

Using generate_rotation.py for rotated objects

Before calling generate_rotation.py, it is mandatory and convenient to make your own config file and run it when calling for both generate.py and eval_meshes.py. Example for your file should look like this:

inherit_from: configs/pointcloud/shapenet_dynamic_3plane.yaml
test:
  model_file: <.pt model file path>
model : 
  encoder_kwargs:
    hidden_dim: 32
    n_channels: 7
generation:
  generation_dir: generation_7plane_45_degrees
degrees: 45

Where you explicitly define model.encoder_kwargs.n_channels for number of planes, generation.generation_dir for specifying the name of the folder you want to save your reconstructions too (in this case, models will be saved in out/pointcloud/dpoc/generation_7plane_45_degrees), and degrees for rotation range you wish to include. Of course test.model_file path also needs to be changed in order if you want to generate with your own model.

Finally, call:

python generate_rotation.py configs/pointcloud/CONFIG_NAME.yaml --no-cuda

Using eval_meshes.py for rotation evaluating

For evaluating generated object, you have to option:

  • reconstructed rotated object vs rotated object
  • reconstructed rotated object vs non-rotated object

reconstructed rotated object vs rotated object [recommended]

In this case, call:

python eval_meshes.py configs/pointcloud/CONFIG_NAME.yaml --no-cuda --eval-rotations

reconstructed rotated object vs non-rotated object

In this case, call:

python eval_meshes.py configs/pointcloud/CONFIG_NAME.yaml --no-cuda

Acknowledgement

The code is inherited from the official repository of Convolutional Occupancy Networks.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].