-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9ddad95
commit 1d489bc
Showing
96 changed files
with
14,890 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
*.pyc | ||
.vscode | ||
output | ||
build | ||
diff_rasterization/diff_rast.egg-info | ||
diff_rasterization/dist | ||
tensorboard_3d | ||
screenshots | ||
.idea | ||
data/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
[submodule "submodules/simple-knn"] | ||
path = submodules/simple-knn | ||
url = https://gitlab.inria.fr/bkerbl/simple-knn.git | ||
[submodule "submodules/depth-diff-gaussian-rasterization"] | ||
path = submodules/depth-diff-gaussian-rasterization | ||
url = https://github.com/ingra14m/depth-diff-gaussian-rasterization |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2023 Ziyi Yang | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,200 @@ | ||
# Deformable 3D Gaussians for High-Fidelity Monocular Dynamic Scene Reconstruction | ||
|
||
## [Project page](https://ingra14m.github.io/Deformable-Gaussians/) | [Paper](https://arxiv.org/abs/2309.13101) | ||
|
||
 | ||
|
||
This repository contains the official implementation associated with the paper "Deformable 3D Gaussians for High-Fidelity Monocular Dynamic Scene Reconstruction". | ||
|
||
|
||
|
||
## News | ||
|
||
- **[2/27/2024]** Deformable-GS is accepted by CVPR 2024. Our another work, [SC-GS](https://yihua7.github.io/SC-GS-web/) (with higher quality, less points and faster FPS than vanilla 3D-GS), is also accepted. See you in Seattle. | ||
- **[11/16/2023]** Full code and real-time viewer released. | ||
- **[11/4/2023]** update the computation of LPIPS in metrics.py. Previously, the `lpipsPyTorch` was unable to execute on CUDA, prompting us to switch to the `lpips` library (~20x faster). | ||
- **[10/25/2023]** update **real-time viewer** on project page. Many, many thanks to @[yihua7](https://github.com/yihua7) for implementing the real-time viewer adapted for Deformable-GS. Also, thanks to @[ashawkey](https://github.com/ashawkey) for releasing the original GUI. | ||
|
||
|
||
|
||
## Dataset | ||
|
||
In our paper, we use: | ||
|
||
- synthetic dataset from [D-NeRF](https://www.albertpumarola.com/research/D-NeRF/index.html). | ||
- real-world dataset from [NeRF-DS](https://jokeryan.github.io/projects/nerf-ds/) and [Hyper-NeRF](https://hypernerf.github.io/). | ||
- The dataset in the supplementary materials comes from [DeVRF](https://jia-wei-liu.github.io/DeVRF/). | ||
|
||
We organize the datasets as follows: | ||
|
||
```shell | ||
├── data | ||
│ | D-NeRF | ||
│ ├── hook | ||
│ ├── standup | ||
│ ├── ... | ||
│ | NeRF-DS | ||
│ ├── as | ||
│ ├── basin | ||
│ ├── ... | ||
│ | HyperNeRF | ||
│ ├── interp | ||
│ ├── misc | ||
│ ├── vrig | ||
``` | ||
|
||
> I have identified an **inconsistency in the D-NeRF's Lego dataset**. Specifically, the scenes corresponding to the training set differ from those in the test set. This discrepancy can be verified by observing the angle of the flipped Lego shovel. To meaningfully evaluate the performance of our method on this dataset, I recommend using the **validation set of the Lego dataset** as the test set. See more in [D-NeRF dataset used in Deformable-GS](https://github.com/ingra14m/Deformable-3D-Gaussians/releases/tag/v0.1-pre-released) | ||
|
||
|
||
## Pipeline | ||
|
||
 | ||
|
||
|
||
|
||
## Run | ||
|
||
### Environment | ||
|
||
```shell | ||
git clone https://github.com/ingra14m/Deformable-3D-Gaussians --recursive | ||
cd Deformable-3D-Gaussians | ||
|
||
conda create -n deformable_gaussian_env python=3.7 | ||
conda activate deformable_gaussian_env | ||
|
||
# install pytorch | ||
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116 | ||
|
||
# install dependencies | ||
pip install -r requirements.txt | ||
``` | ||
|
||
|
||
|
||
### Train | ||
|
||
**D-NeRF:** | ||
|
||
```shell | ||
python train.py -s path/to/your/d-nerf/dataset -m output/exp-name --eval --is_blender | ||
``` | ||
|
||
**NeRF-DS/HyperNeRF:** | ||
|
||
```shell | ||
python train.py -s path/to/your/real-world/dataset -m output/exp-name --eval | ||
``` | ||
|
||
**6DoF Transformation:** | ||
|
||
We have also implemented the 6DoF transformation of 3D-GS, which may lead to an improvement in metrics but will reduce the speed of training and inference. | ||
|
||
```shell | ||
# D-NeRF | ||
python train.py -s path/to/your/d-nerf/dataset -m output/exp-name --eval --is_blender --is_6dof | ||
|
||
# NeRF-DS & HyperNeRF | ||
python train.py -s path/to/your/real-world/dataset -m output/exp-name --eval --is_6dof | ||
``` | ||
|
||
You can also **train with the GUI:** | ||
|
||
```shell | ||
python train_gui.py -s path/to/your/dataset -m output/exp-name --eval --is_blender | ||
``` | ||
|
||
- click `start` to start training, and click `stop` to stop training. | ||
- The GUI viewer is still under development, many buttons do not have corresponding functions currently. We plan to : | ||
- [ ] reload checkpoints from the pre-trained model. | ||
- [ ] Complete the functions of the other vacant buttons in the GUI. | ||
|
||
|
||
|
||
### Render & Evaluation | ||
|
||
```shell | ||
python render.py -m output/exp-name --mode render | ||
python metrics.py -m output/exp-name | ||
``` | ||
|
||
We provide several modes for rendering: | ||
|
||
- `render`: render all the test images | ||
- `time`: time interpolation tasks for D-NeRF dataset | ||
- `all`: time and view synthesis tasks for D-NeRF dataset | ||
- `view`: view synthesis tasks for real-world dataset | ||
- `original`: time and view synthesis tasks for real-world dataset | ||
|
||
|
||
|
||
## Results | ||
|
||
### D-NeRF Dataset | ||
|
||
**Quantitative Results** | ||
|
||
<img src="assets/results/D-NeRF/Quantitative.jpg" alt="Image1" style="zoom:50%;" /> | ||
|
||
**Qualitative Results** | ||
|
||
<img src="assets/results/D-NeRF/bouncing.gif" alt="Image1" style="zoom:25%;" /> <img src="assets/results/D-NeRF/hell.gif" alt="Image1" style="zoom:25%;" /> <img src="assets/results/D-NeRF/hook.gif" alt="Image3" style="zoom:25%;" /> <img src="assets/results/D-NeRF/jump.gif" alt="Image4" style="zoom:25%;" /> | ||
|
||
<img src="assets/results/D-NeRF/lego.gif" alt="Image5" style="zoom:25%;" /> <img src="assets/results/D-NeRF/mutant.gif" alt="Image6" style="zoom:25%;" /> <img src="assets/results/D-NeRF/stand.gif" alt="Image7" style="zoom:25%;" /> <img src="assets/results/D-NeRF/trex.gif" alt="Image8" style="zoom:25%;" /> | ||
|
||
|
||
|
||
### NeRF-DS Dataset | ||
|
||
<img src="assets/results/NeRF-DS/Quantitative.jpg" alt="Image1" style="zoom:50%;" /> | ||
|
||
See more visualization on our [project page](https://ingra14m.github.io/Deformable-Gaussians/). | ||
|
||
|
||
|
||
### HyperNeRF Dataset | ||
|
||
Since the **camera pose** in HyperNeRF is less precise compared to NeRF-DS, we use HyperNeRF as a reference for partial visualization and the display of Failure Cases, but do not include it in the calculation of quantitative metrics. The results of the HyperNeRF dataset can be viewed on the [project page](https://ingra14m.github.io/Deformable-Gaussians/). | ||
|
||
|
||
|
||
### Real-Time Viewer | ||
|
||
https://github.com/ingra14m/Deformable-3D-Gaussians/assets/63096187/ec26d0b9-c126-4e23-b773-dcedcf386f36 | ||
|
||
|
||
|
||
## Acknowledgments | ||
|
||
We sincerely thank the authors of [3D-GS](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/), [D-NeRF](https://www.albertpumarola.com/research/D-NeRF/index.html), [HyperNeRF](https://hypernerf.github.io/), [NeRF-DS](https://jokeryan.github.io/projects/nerf-ds/), and [DeVRF](https://jia-wei-liu.github.io/DeVRF/), whose codes and datasets were used in our work. We thank [Zihao Wang](https://github.com/Alen-Wong) for the debugging in the early stage, preventing this work from sinking. We also thank the reviewers and AC for not being influenced by PR, and fairly evaluating our work. This work was mainly supported by ByteDance MMLab. | ||
|
||
|
||
|
||
|
||
## BibTex | ||
|
||
``` | ||
@article{yang2023deformable3dgs, | ||
title={Deformable 3D Gaussians for High-Fidelity Monocular Dynamic Scene Reconstruction}, | ||
author={Yang, Ziyi and Gao, Xinyu and Zhou, Wen and Jiao, Shaohui and Zhang, Yuqing and Jin, Xiaogang}, | ||
journal={arXiv preprint arXiv:2309.13101}, | ||
year={2023} | ||
} | ||
``` | ||
|
||
And thanks to the authors of [3D Gaussians](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/) for their excellent code, please consider also cite this repository: | ||
|
||
``` | ||
@Article{kerbl3Dgaussians, | ||
author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\"u}hler, Thomas and Drettakis, George}, | ||
title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering}, | ||
journal = {ACM Transactions on Graphics}, | ||
number = {4}, | ||
volume = {42}, | ||
month = {July}, | ||
year = {2023}, | ||
url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/} | ||
} | ||
``` | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# | ||
# Copyright (C) 2023, Inria | ||
# GRAPHDECO research group, https://team.inria.fr/graphdeco | ||
# All rights reserved. | ||
# | ||
# This software is free for non-commercial, research and evaluation use | ||
# under the terms of the LICENSE.md file. | ||
# | ||
# For inquiries contact [email protected] | ||
# | ||
|
||
from argparse import ArgumentParser, Namespace | ||
import sys | ||
import os | ||
|
||
|
||
class GroupParams: | ||
pass | ||
|
||
|
||
class ParamGroup: | ||
def __init__(self, parser: ArgumentParser, name: str, fill_none=False): | ||
group = parser.add_argument_group(name) | ||
for key, value in vars(self).items(): | ||
shorthand = False | ||
if key.startswith("_"): | ||
shorthand = True | ||
key = key[1:] | ||
t = type(value) | ||
value = value if not fill_none else None | ||
if shorthand: | ||
if t == bool: | ||
group.add_argument("--" + key, ("-" + key[0:1]), default=value, action="store_true") | ||
else: | ||
group.add_argument("--" + key, ("-" + key[0:1]), default=value, type=t) | ||
else: | ||
if t == bool: | ||
group.add_argument("--" + key, default=value, action="store_true") | ||
else: | ||
group.add_argument("--" + key, default=value, type=t) | ||
|
||
def extract(self, args): | ||
group = GroupParams() | ||
for arg in vars(args).items(): | ||
if arg[0] in vars(self) or ("_" + arg[0]) in vars(self): | ||
setattr(group, arg[0], arg[1]) | ||
return group | ||
|
||
|
||
class ModelParams(ParamGroup): | ||
def __init__(self, parser, sentinel=False): | ||
self.sh_degree = 3 | ||
self._source_path = "" | ||
self._model_path = "" | ||
self._images = "images" | ||
self._resolution = -1 | ||
self._white_background = False | ||
self.data_device = "cuda" | ||
self.eval = False | ||
self.load2gpu_on_the_fly = False | ||
self.is_blender = False | ||
self.is_6dof = False | ||
super().__init__(parser, "Loading Parameters", sentinel) | ||
|
||
def extract(self, args): | ||
g = super().extract(args) | ||
g.source_path = os.path.abspath(g.source_path) | ||
return g | ||
|
||
|
||
class PipelineParams(ParamGroup): | ||
def __init__(self, parser): | ||
self.convert_SHs_python = False | ||
self.compute_cov3D_python = False | ||
self.debug = False | ||
super().__init__(parser, "Pipeline Parameters") | ||
|
||
|
||
class OptimizationParams(ParamGroup): | ||
def __init__(self, parser): | ||
self.iterations = 40_000 | ||
self.warm_up = 3_000 | ||
self.warm_up2 = 11_000 | ||
self.position_lr_init = 0.00016 | ||
self.position_lr_final = 0.0000016 | ||
self.position_lr_delay_mult = 0.01 | ||
self.position_lr_max_steps = 30_000 | ||
self.deform_lr_max_steps = 40_000 | ||
self.specdecoder_lr = 0.001 | ||
self.feature_lr = 0.0025 | ||
self.diffuse_lr = 0.0025 | ||
self.opacity_lr = 0.05 | ||
self.scaling_lr = 0.001 | ||
self.rotation_lr = 0.001 | ||
self.percent_dense = 0.01 | ||
self.lambda_dssim = 0.2 | ||
self.densification_interval = 100 | ||
self.opacity_reset_interval = 3000 | ||
self.densify_from_iter = 500 | ||
self.densify_until_iter = 15_000 | ||
self.densify_grad_threshold = 0.0002 | ||
self.specular_lr = 0.0002 | ||
self.roughness_lr = 0.0002 | ||
super().__init__(parser, "Optimization Parameters") | ||
|
||
|
||
def get_combined_args(parser: ArgumentParser): | ||
cmdlne_string = sys.argv[1:] | ||
cfgfile_string = "Namespace()" | ||
args_cmdline = parser.parse_args(cmdlne_string) | ||
|
||
try: | ||
cfgfilepath = os.path.join(args_cmdline.model_path, "cfg_args") | ||
print("Looking for config file in", cfgfilepath) | ||
with open(cfgfilepath) as cfg_file: | ||
print("Config file found: {}".format(cfgfilepath)) | ||
cfgfile_string = cfg_file.read() | ||
except TypeError: | ||
print("Config file not found at") | ||
pass | ||
args_cfgfile = eval(cfgfile_string) | ||
|
||
merged_dict = vars(args_cfgfile).copy() | ||
for k, v in vars(args_cmdline).items(): | ||
if v != None: | ||
merged_dict[k] = v | ||
return Namespace(**merged_dict) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.