This is the official repo for:
Jun Gao, Wenzheng Chen, Tommy Xiang, Clement Fuji Tsang, Alec Jacobson, Morgan McGuire, Sanja Fidler
NeurIPS 2020, Paper, Supplementary, Project Page,
- Python 3.8 is supported.
- Pytorch 1.9.0.
- This code is tested with CUDA 11.1.
- GCC >= 6.0
Install Pytorch
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
Install QuarTet following official Link.
git clone https://github.com/crawforddoran/quartet
apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev # Dependencies for QuarTet
cd quartet
make depend
make
Install Kaolin following official Link.
Install other required libraries by doing:
apt-get update
apt-get install tmux htop -y
pip install opencv-python tensorboardx meshzoo ipdb imageio
apt-get install ffmpeg libsm6 libxext6 -y
HOME_DIR="$PWD"
cd "$HOME_DIR/utils/lib/tet_adj_share"
bash do_all.sh
cd "$HOME_DIR/utils/lib/tet_face_adj"
bash do_all.sh
cd "$HOME_DIR/utils/lib/tet_point_adj"
bash do_all.sh
cd "$HOME_DIR/utils/lib/colaps_v"
bash do_all.sh
cd $HOME_DIR
We use ShapeNet Core dataset, please first download ShapeNet following Official Link
into the directory /data/shapenet_kaolin
, then inside the code, we will use kaolin to preprocess the dataset (see details at dataloader.py
)
We experimented training on different resolution by passing the config --res xxx
. To reproduce the results in paper, we recommond using res 70, training at higher resolution won't have too much improvement.
python train_multigpu.py --pow 4 --save_vis --batch_size 8 --print_every 300 --dataset_dir /data/shapenet_kaolin --save_vis_ever 10000 --no_use_pos_encoding --no_use_vert_feat --use_init_pos_mask --point_cloud --lambda_surf 5 --lambda_surf_chamfer 1 --lambda_amips 1 --res 70 --no_expand_boundary --use_two_encoder --no_use_vert_feat --no_use_pvcnn_pos_decoder --no_use_dvr_pos_decoder --use_gcn_pos_decoder --no_use_dvr_occ_decoder --add_input_noise --use_pvcnn_occ_decoder --use_all --experiment_id pc_pvcnn_gcn_70_surf_1_chamfer_1_all_scale_pvcnn --scale_pvcnn
This evaluation scripts provides the results on different metrics, including chamfer, chamfer L1, F-score, Hausdorff distance.
python eval.py ----experiment_path experiments/YOUR-EXP-NAME
Here we provide the optimization script on using our diff render for dmtet to optimize a tet mesh using volume rendering.
cd diff_render/diftet_6_subdiv/6_optim
pip install configargparse
python optim_with_mask_subdiv_from_gridmov.py --expname hotdog --datadir YOUR_NERF_DIR --savedir YOUR_SAVING_DIR --remote
If you use the code, please cite our paper:
@inproceedings{gao2020deftet,
title={Learning Deformable Tetrahedral Meshes for 3D Reconstruction},
author={Jun Gao and Wenzheng Chen and Tommy Xiang and Clement Fuji Tsang and Alec Jacobson and Morgan McGuire and Sanja Fidler},
booktitle={Advances In Neural Information Processing Systems},
year={2020}
}
We have some following works related to this one:
- Deep Marching Tetrahedra: a Hybrid Representation for High-Resolution 3D Shape Synthesis. NeurIPS 2021
- Extracting Triangular 3D Models, Materials, and Lighting From Images. (CVPR) 2022
The code for PVCNN module in this codebase is borrowed from PVCNN (MIT License)