GithubHelp home page GithubHelp logo

isabella98liu / dg-mesh Goto Github PK

View Code? Open in Web Editor NEW
276.0 28.0 6.0 311.54 MB

Dynamic Gaussian Mesh: Consistent Mesh Reconstruction from Monocular Videos

Home Page: https://www.liuisabella.com/DG-Mesh/

License: MIT License

Python 78.81% Makefile 0.72% C++ 4.56% Cuda 15.54% CMake 0.20% C 0.17%
3d-vision 4d-gaussian-splatting 4d-reconstruction dynamic-reconstruction gaussian-splatting

dg-mesh's Introduction

Dynamic Gaussians Mesh

DG-Mesh Teaser

We propose DG-Mesh, a framework that reconstructs high-fidelity time-consistent mesh from monocular videos. Given monocular inputs of dynamic scenes and the camera parameters, our method reconstructs the high-quality surface and its appearance, as well as the mesh vertice motion across time frames. Our method can reconstruct mesh with flexible topology change. We can reconstruct satisfying surfaces even in challenging thin structures like bird wings.

TODOs

  • Installation instructions
  • Training/inference code
  • Mesh evaluation code
  • DG-Mesh dataset
  • Mesh correspondence visualization

Installation

conda create -n dg-mesh python=3.9
conda activate dg-mesh
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

# Install nvdiffrast
pip install git+https://github.com/NVlabs/tiny-cuda-nn#subdirectory=bindings/torch
pip install git+https://github.com/NVlabs/nvdiffrast/

# Install pytorch3d
export FORCE_CUDA=1
conda install -c fvcore -c iopath -c conda-forge fvcore iopath -y
pip install "git+https://github.com/facebookresearch/pytorch3d.git"

# Clone this repository
git clone https://github.com/Isabella98Liu/DG-Mesh.git
cd DG-Mesh

# Install submodules
pip install dgmesh/submodules/diff-gaussian-rasterization
pip install dgmesh/submodules/simple-knn

# Install other dependencies
pip install -r requirements.txt

Training on the D-NeRF Dataset

We provide the config files to train our model on the D-NeRF dataset. Download the datasets and change the source_path in the corresponding config files:

python dgmesh/train.py --config dgmesh/configs/d-nerf/jumpingjacks.yaml

We also provide rendering script to visualize the mesh and its rendering results, as well as the Gaussian points from the trained model. Set the --start_checkpoint to the path of your trained model. For example:

python dgmesh/render_trajectory.py --config dgmesh/configs/d-nerf/jumpingjacks.yaml --start_checkpoint outputs/d-nerf/jumpingjacks/jumpingjacks-2024-07-01_06-03-50

Results on the D-NeRF dataset Results on the D-NeRF dataset

Example of mesh rendering results and Gaussians points on D-NeRF dataset.

Training on the DG-Mesh Dataset

To evaluate the reconstructed mesh quantitatively, we provide a synthetic dataset containing six dynamic scenes. Each scene includes 200 frames of a moving object with the ground truth camera parameters and images, as well as the ground truth mesh under each time frame. You can download the DG-Mesh dataset following the link provided. The data format follows the D-NeRF dataset.

To train the model, revise the source_path in the corresponding config files and run the following command:

python dgmesh/train.py --config dgmesh/configs/dg-mesh/beagle.yaml

Bird example on the DG-Mesh dataset Bird example on the DG-Mesh dataset

Example of mesh rendering results and Gaussians points on DG-Mesh dataset.

Training on the Nerfies Dataset

We provide part of the processed Nerfies data, which additionally contains the object foreground masks; you can download them here in the release page. To train the model on the Nerfies dataset, run the following command:

python dgmesh/train.py --config dgmesh/configs/nerfies/toby-sit.yaml

To render the mesh under the testing camera views, run the following scripts:

python dgmesh/render_test.py --config /mnt/samsung990/ECCV2024/Release/DG-Mesh/dgmesh/configs/nerfies/toby-sit.yaml --start_checkpoint outputs/nerfies/toby-sit/toby-sit-2024-07-04_22-56-29 

Results on the Nerfies dataset Results on the Nerfies dataset

Training on the NeuralActor Dataset

The NeuralActor dataset is a multi-view dynamic dataset that contains multi-view videos of moving humans. We process part of the dataset (will release the processed data if approved). To run the model on the NeuralActor dataset:

python dgmesh/train.py --config dgmesh/configs/neural-actor/D2_vlad.yaml

Results on the Nerfies dataset Results on the Nerfies dataset

Training on iPhone-Captured Videos

We capture several dynamic scenes using iPhone 14 Pro and Record3D, and process them using the pipeline in Reality Check. We use DEVA to obtain our foreground masks. You can download the data through the link in the release page. To train the model on our captured data, run:

python dgmesh/train.py --config /dgmesh/configs/iphone/tiger.yaml

Results on self-captured dataset

Mesh Evaluation

We provide the mesh evaluation script on the DG-Mesh dataset; please organize the mesh GT data and your mesh results like below:

mesh_eval_folder/
├── gt/
│   ├── objname0.obj
│   ├── objname1.obj
│   └── ...
├── DG-Mesh/
│   └── dynamic_mesh/
│       ├── frame_0.ply
│       ├── frame_1.ply
│       └── ...
└── transforms_train.json

You may need to install StructuralLoss to calculate the EMD; please follow the instruction below:

cd dgmesh/metrics/pytorch_structural_losses/
make clean
make

To run the evaluation:

python mesh_evaluation.py --path mesh_eval_folder --eval_type dgmesh

Citation

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

@misc{liu2024dynamic,
 title={Dynamic Gaussians Mesh: Consistent Mesh Reconstruction from Monocular Videos}, 
 author={Isabella Liu and Hao Su and Xiaolong Wang},
 year={2024},
 eprint={2404.12379},
 archivePrefix={arXiv},
 primaryClass={cs.CV}
}

And thanks to the authors of Deformable 3DGS and 3DGS for their excellent code!

dg-mesh's People

Contributors

isabella98liu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dg-mesh's Issues

Segmentation Fault during launch Training on Nerfies

Hi, tried to reproduce training process but got segmentation fault, logs are below:

python dgmesh/train.py --config dgmesh/configs/nerfies/tail.yaml
Configuration loaded from dgmesh/configs/nerfies/tail.yaml
Optimizing dgmesh/outputs/nerfies/tail
Output folder: dgmesh/outputs/nerfies/tail/tail-2024-07-17_09-24-58
/opt/conda/envs/dg-mesh/lib/python3.9/site-packages/torch/functional.py:512: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /opt/conda/conda-bld/pytorch_1716905969824/work/aten/src/ATen/native/TensorShape.cpp:3587.)
return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
/opt/conda/envs/dg-mesh/lib/python3.9/site-packages/torch/utils/cpp_extension.py:1967: UserWarning: TORCH_CUDA_ARCH_LIST is not set, all archs for visible cards are included for compilation.
If this is not desired, please set os.environ['TORCH_CUDA_ARCH_LIST'].
warnings.warn(
[17/07 09:24:59]
/home/ubuntu/DG-Mesh/dgmesh/data/nerfies/tail [17/07 09:24:59]
/home/ubuntu/DG-Mesh/dgmesh/data/nerfies/tail/dataset.json [17/07 09:24:59]
[17/07 09:24:59]
Assuming Nerfies data set! [17/07 09:24:59]
Reading Nerfies Info [17/07 09:24:59]
[17/07 09:25:16]
Loading Training Cameras [17/07 09:25:16]
Loading Test Cameras [17/07 09:25:18]
Number of points at initialisation : 29192 [17/07 09:25:19]
Training progress: 0%| | 0/25001 [00:00<?, ?it/s]
Segmentation fault (core dumped)

Maybe you already know how to avoid or fix this?

Question about the quantitative experiment

Very nice work! I got beagle's dynamic mesh with open-source code and then used mesh_evaluation.py to calculate beagle's CD value to be 0.000626 but in table 1 the value is 0.639. Is it a result of inconsistent units of measure?

iphone captured dataset

Hi, could you please give me hints/steps on how to generate the iPhone captured data?

Thanks!

Question on how trainable color can be defined per vertex, while there are varying number of vertices for every iteration during mesh optimization.

Hi, Thanks for the great work!

I was reading your work, and wondered how nvdiffrast can be actually implemented to render an image from a mesh that is being trained.

From my understanding, mesh from DPSR + Diff.MC during optimization can have varying number of vertices for every iteration.

In this case, how can a trainable color be defined for each vertex for every iteration?

Thank you in advance.

dg-mesh dataset

A nice work!!!
I ran “horse” from your open-source dataset with 4dgs code but found that the rendered mesh is incomplete, as shown in the picture. May I ask if you have done any special processing when dealing with the object of horse, very much looking forward to your reply.
image

Question about grid resolution of DPSR?

Hi, I'm very interested in your work. I found that DPSR uses a regular grid for obtaining SDF. It seems a high grid resolution leads to better mesh details. I wonder about the resolution parameter of work. Thank you!

Can not insta DISO library

Hi,

I am trying out the code and I found that I can not install diso in my machine. Any suggestion on how to fix this ?

⚡ ~ pip install ninja diso       
Collecting ninja
  Using cached ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl.metadata (5.3 kB)
Collecting diso
  Using cached diso-0.1.4.tar.gz (24 kB)
  Preparing metadata (setup.py) ... done
Collecting trimesh (from diso)
  Using cached trimesh-4.4.3-py3-none-any.whl.metadata (18 kB)
Requirement already satisfied: numpy>=1.20 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from trimesh->diso) (1.26.4)
Using cached ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl (307 kB)
Using cached trimesh-4.4.3-py3-none-any.whl (695 kB)
Building wheels for collected packages: diso
  Building wheel for diso (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [91 lines of output]
      sources: ['src/pybind.cpp', 'src/cumc.cu', 'src/cudualmc.cu']
      running bdist_wheel
      /home/zeus/miniconda3/envs/cloudspace/lib/python3.10/site-packages/torch/utils/cpp_extension.py:500: UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja.. Falling back to using the slow distutils backend.
        warnings.warn(msg.format('we could not find ninja.'))
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-cpython-310
      creating build/lib.linux-x86_64-cpython-310/diso
      copying diso/__init__.py -> build/lib.linux-x86_64-cpython-310/diso
      running build_ext
      /home/zeus/miniconda3/envs/cloudspace/lib/python3.10/site-packages/torch/utils/cpp_extension.py:425: UserWarning: There are no g++ version bounds defined for CUDA version 12.1
        warnings.warn(f'There are no {compiler_name} version bounds defined for CUDA version {cuda_str_version}')
      building 'diso._C' extension
      creating build/temp.linux-x86_64-cpython-310
      creating build/temp.linux-x86_64-cpython-310/src
      /usr/local/cuda/bin/nvcc -DWITH_CUDA -Isrc -I/home/zeus/miniconda3/envs/cloudspace/lib/python3.10/site-packages/torch/include -I/home/zeus/miniconda3/envs/cloudspace/lib/python3.10/site-packages/torch/include/torch/csrc/api/include -I/home/zeus/miniconda3/envs/cloudspace/lib/python3.10/site-packages/torch/include/TH -I/home/zeus/miniconda3/envs/cloudspace/lib/python3.10/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/zeus/miniconda3/envs/cloudspace/include/python3.10 -c src/cudualmc.cu -o build/temp.linux-x86_64-cpython-310/src/cudualmc.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options '-fPIC' -O3 -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE=\"_gcc\" -DPYBIND11_STDLIB=\"_libstdcpp\" -DPYBIND11_BUILD_ABI=\"_cxxabi1011\" -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_50,code=sm_50 -gencode=arch=compute_60,code=sm_60 -gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_75,code=sm_75 -gencode=arch=compute_80,code=sm_80 -gencode=arch=compute_86,code=sm_86 -gencode=arch=compute_90,code=sm_90 -std=c++17
      src/cudualmc.cu(738): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
              atomicAdd(&adj_deform[v0].x, adj_p0.x);
              ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      src/cudualmc.cu(739): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
              atomicAdd(&adj_deform[v0].y, adj_p0.y);
              ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      src/cudualmc.cu(740): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
              atomicAdd(&adj_deform[v0].z, adj_p0.z);
              ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      src/cudualmc.cu(741): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
              atomicAdd(&adj_deform[v1].x, adj_p1.x);
              ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      src/cudualmc.cu(742): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
              atomicAdd(&adj_deform[v1].y, adj_p1.y);
              ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      src/cudualmc.cu(743): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
              atomicAdd(&adj_deform[v1].z, adj_p1.z);
              ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      src/cudualmc.cu(749): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
            atomicAdd(&adj_data[v0], adj_d0);
            ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      src/cudualmc.cu(750): error: no instance of overloaded function "atomicAdd" matches the argument list
                  argument types are: (double *, double)
            atomicAdd(&adj_data[v1], adj_d1);
            ^
                detected during:
                  instantiation of "void cudualmc::adjComputeMcVert(cudualmc::CUDualMC<Scalar, IndexType> &, const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, int, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, cudualmc::Vertex<Scalar>) [with Scalar=double, IndexType=int]" at line 1002
                  instantiation of "void cudualmc::adj_create_dmc_verts_kernel(cudualmc::CUDualMC<Scalar, IndexType>, const Scalar *, const cudualmc::Vertex<Scalar> *, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *) [with Scalar=double, IndexType=int]" at line 1137
                  instantiation of "void cudualmc::CUDualMC<Scalar, IndexType>::backward(const Scalar *, const cudualmc::Vertex<Scalar> *, IndexType, IndexType, IndexType, Scalar, Scalar *, cudualmc::Vertex<Scalar> *, const cudualmc::Vertex<Scalar> *, int) [with Scalar=double, IndexType=int]" at line 1144
      
      8 errors detected in the compilation of "src/cudualmc.cu".
      error: command '/usr/local/cuda/bin/nvcc' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for diso
  Running setup.py clean for diso
Failed to build diso
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (diso)

This is my current evironment:

⚡ ~ python
Python 3.10.10 (main, Mar 21 2023, 18:45:11) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'2.2.1+cu121'
>>> exit()
⚡ ~ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

Question about table.1 in the paper

I am intrigued by the research presented in your paper. While going through the document, I observed that PSNR corresponding to mesh is provided in Table.1, but there seems to be a missing entry for Gaussian. From my understanding, mesh and Gaussian have a one-to-one correspondence and can be independently rendered to generate images. I was wondering if the authors could kindly explain why Gaussian's PSNR data is not included in the table. This information would be valuable for evaluating the method's performance and making comparisons. Any clarification on this matter would be greatly appreciated.

Rendering images using mesh

Thanks for your interesting work and open-source code. I noticed that the extracted mesh has no color. When rendering the image, I need to query the MLP to get the color of the mesh. I have two questions. 1. Do I need to query the color through MLP every time I want to use this mesh? 2. The paper compares the rendered images of meshes extracted by other methods. Those methods do not use MLP to model the color of the mesh. Is it fair to compare the images rendered from their meshes?

dataset

Hi, thanks for your great work!

I noticed that the meshes of your DG-Mesh Dataset miss texture files.

Regarding the NeuralActor dataset, you mentioned "will release the processed data if approved". I am wondering what is the status of getting approved.

rendering torus2sphere

Hello, when I rendered the torus2sphere GT mesh, the rendering result was as shown in the figure below. It seems that the complete surface is not rendered. Is there something wrong with my rendering settings? (I used the mesh_shape_renderer function from the code with almost no additional changes.) Looking forward to your reply!

m00004

Any schedule to release the code?

Hey Isabella,

Thanks for sharing the great work! Do you have any schedules to release the code? It would be great if you set an approximate time so we can stay tuned and follow up in time!

Thanks a lot !

Question about mesh consistency

Hi, thanks for your excellent work.

I found that the d-nerf dataset's mesh face number is different across time frames.
Does this not correspond to the alignment in the paper? I found that the code in the alignment part is to input one batch Gaussian at a time, and one face can correspond to multiple Gaussian. Is this because of this?

Looking forward to your reply.

[BUG] parameter position is wrong in mesh_render function

I encounter a AttributeError while running the code, the code in train.py is :

mask, mesh_image, verts, faces, _ = mesh_renderer(
                gaussians,
                d_xyz,
                d_normal,
                fid,
                glctx,
                deform_back,
                appearance,
                freeze_pos,
                dataset.white_background,
                viewpoint_cam,
            )

SO the mesh_render function should be like this?

def mesh_renderer(
    gaussians: gaussian_model,
    d_xyz: torch.Tensor,
    d_normal: torch.Tensor,
    fid: torch.Tensor,
    glctx: dr.RasterizeGLContext,
    deform_back: deform_back,
    appearance: appearance_net,
    freeze_pos: bool = False,
    whitebackground: bool = False,
    viewpoint_cam: Camera = None,
):

instead of the original :

def mesh_renderer(
    glctx: dr.RasterizeGLContext,
    gaussians: gaussian_model,
    d_xyz: torch.Tensor,
    d_normal: torch.Tensor,
    fid: torch.Tensor,
    deform_back: deform_back,
    appearance: appearance_net,
    freeze_pos: bool = False,
    whitebackground: bool = False,
    viewpoint_cam: Camera = None,
):

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.