Skip to content

Commit

Permalink
1 - add configs to reproduce MipNerf360 results
Browse files Browse the repository at this point in the history
2 - add instructions to build the code on ubuntu
3- add video and names
  • Loading branch information
Shakiba Kheradmand committed Jun 27, 2024
1 parent d518a8d commit 7a4611d
Show file tree
Hide file tree
Showing 11 changed files with 125 additions and 14 deletions.
81 changes: 76 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,41 @@
# 3D Gaussian Splatting as Markov Chain Monte Carlo

[![button](https://img.shields.io/badge/Project%20Website-orange?style=for-the-badge)](https://ubc-vision.github.io/3dgs-mcmc/)
[![button](https://img.shields.io/badge/Paper-blue?style=for-the-badge)](https://arxiv.org/abs/2404.09591)

<span class="author-block">
<a href="https://shakibakh.github.io/">Shakiba Kheradmand</a>,
</span>
<span class="author-block">
<a href="http://drebain.com/"> Daniel Rebain</a>,
</span>
<span class="author-block">
<a href="https://hippogriff.github.io/"> Gopal Sharma</a>,
</span>
<span class="author-block">
<a href="https://wsunid.github.io/"> Weiwei Sun</a>,
</span>
<span class="author-block">
<a href="https://scholar.google.com/citations?user=1iJfq7YAAAAJ&hl=en"> Yang-Che Tseng</a>,
</span>
<span class="author-block">
<a href="http://www.hossamisack.com/">Hossam Isack</a>,
</span>
<span class="author-block">
<a href="https://abhishekkar.info/">Abhishek Kar</a>,
</span>
<span class="author-block">
<a href="https://taiya.github.io/">Andrea Tagliasacchi</a>,
</span>
<span class="author-block">
<a href="https://www.cs.ubc.ca/~kmyi/">Kwang Moo Yi</a>
</span>

<hr>

<video controls>
<source src="docs/resources/training_rand_compare/bicycle_both-rand.mp4" type="video/mp4">
</video>

<section class="section" id="BibTeX">
<div class="container is-max-desktop content">
Expand All @@ -15,12 +51,42 @@



## How to install
## How to Install

Please refer to [Original 3DGS code base](https://github.com/graphdeco-inria/gaussian-splatting) for installation instructions. Make sure to reinstall diff-gaussian-rasterization with the following command on an available 3DGS environment as this library has been modified:
```
pip install submodules/diff-gaussian-rasterization
```
This project is built on top of the [Original 3DGS code base](https://github.com/graphdeco-inria/gaussian-splatting) and has been tested only on Ubuntu 20.04. If you encounter any issues, please refer to the [Original 3DGS code base](https://github.com/graphdeco-inria/gaussian-splatting) for installation instructions.

### Installation Steps

1. **Clone the Repository:**
```sh
git clone --recursive git@github.com:ubc-vision/3dgs-mcmc.git
cd 3dgs-mcmc
```
2. **Set Up the Conda Environment:**
```sh
conda create -y -n 3dgs-mcmc-env python=3.8
conda activate 3dgs-mcmc-env
```
3. **Install Dependencies:**
```sh
pip install plyfile tqdm torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
conda install cudatoolkit-dev=11.7 -c conda-forge
```
4. **Install Submodules:**
```sh
CUDA_HOME=PATH/TO/CONDA/envs/3dgs-mcmc-env/pkgs/cuda-toolkit/ pip install submodules/diff-gaussian-rasterization submodules/simple-knn/
```
### Common Issues:
1. **Access Error During Cloning:**
If you encounter an access error when cloning the repository, ensure you have your SSH key set up correctly. Alternatively, you can clone using HTTPS.
2. **Running diff-gaussian-rasterization Fails:**
You may need to change the compiler options in the setup.py file to run both the original and this code. Update the setup.py with the following extra_compile_args:
```sh
extra_compile_args={"nvcc": ["-Xcompiler", "-fno-gnu-unique", "-I" + os.path.join(os.path.dirname(os.path.abspath(__file__)), "third_party/glm/")]}
```
Afterwards, you need to reinstall diff-gaussian-rasterization. This is mentioned in [3DGS-issue-#41](https://github.com/graphdeco-inria/gaussian-splatting/issues/41).

By following these steps, you should be able to install the project and reproduce the results. If you encounter any issues, refer to the original 3DGS code base for further guidance.

## How to run
Running code is similar to the [Original 3DGS code base](https://github.com/graphdeco-inria/gaussian-splatting) with the following differences:
Expand All @@ -30,6 +96,11 @@ Running code is similar to the [Original 3DGS code base](https://github.com/grap
- You need to specify the noise learning rate. This is performed using --noise_lr argument. For all the experiments in the paper, we use 5e5.
- You need to specify the initialization type. This is performed using --init_type argument. Options are random (to initialize randomly) or sfm (to initialize using a pointcloud).

## How to Reproduce the Results in the Paper
```sh
python train.py --source_path PATH/TO/Shape --config configs/shape.json --eval
```




2 changes: 1 addition & 1 deletion arguments/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def __init__(self, parser, sentinel=False):
self._resolution = -1
self._white_background = False
self.data_device = "cuda"
self.eval = True
self.eval = False
self.cap_max = -1
self.init_type = "random"
super().__init__(parser, "Loading Parameters", sentinel)
Expand Down
4 changes: 4 additions & 0 deletions configs/bicycle.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"resolution": 4,
"cap_max": 5900000
}
4 changes: 4 additions & 0 deletions configs/bonsai.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"resolution": 2,
"cap_max": 1300000
}
4 changes: 4 additions & 0 deletions configs/counter.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"resolution": 2,
"cap_max": 1200000
}
4 changes: 4 additions & 0 deletions configs/garden.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"resolution": 4,
"cap_max": 5200000
}
4 changes: 4 additions & 0 deletions configs/kitchen.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"resolution": 2,
"cap_max": 1800000
}
4 changes: 4 additions & 0 deletions configs/room.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"resolution": 2,
"cap_max": 1500000
}
4 changes: 4 additions & 0 deletions configs/stump.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"resolution": 4,
"cap_max": 4750000
}
11 changes: 5 additions & 6 deletions environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@ channels:
- conda-forge
- defaults
dependencies:
- cudatoolkit=11.6
- cudatoolkit=11.7
- plyfile
- python=3.7.13
- pip=22.3.1
- pytorch=1.12.1
- torchaudio=0.12.1
- torchvision=0.13.1
- python=3.8
- pytorch=1.13.1
- torchaudio=0.13.1
- torchvision=0.14.1
- tqdm
- pip:
- submodules/diff-gaussian-rasterization
Expand Down
17 changes: 15 additions & 2 deletions train.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#

import os
import json
import torch
from random import randint
from utils.loss_utils import l1_loss, ssim
Expand Down Expand Up @@ -203,14 +204,18 @@ def training_report(tb_writer, iteration, Ll1, loss, l1_loss, elapsed, testing_i
tb_writer.add_scalar('total_points', scene.gaussians.get_xyz.shape[0], iteration)
torch.cuda.empty_cache()

def load_config(config_file):
with open(config_file, 'r') as file:
config = json.load(file)
return config

if __name__ == "__main__":
# Set up command line argument parser
parser = ArgumentParser(description="Training script parameters")
lp = ModelParams(parser)
op = OptimizationParams(parser)
pp = PipelineParams(parser)
parser.add_argument('--ip', type=str, default="127.0.0.1")
parser.add_argument('--port', type=int, default=6009)
parser.add_argument('--config', type=str, default=None)
parser.add_argument('--debug_from', type=int, default=-1)
parser.add_argument('--detect_anomaly', action='store_true', default=False)
parser.add_argument("--test_iterations", nargs="+", type=int, default=[7_000, 30_000])
Expand All @@ -219,6 +224,14 @@ def training_report(tb_writer, iteration, Ll1, loss, l1_loss, elapsed, testing_i
parser.add_argument("--checkpoint_iterations", nargs="+", type=int, default=[])
parser.add_argument("--start_checkpoint", type=str, default = None)
args = parser.parse_args(sys.argv[1:])

if args.config is not None:
# Load the configuration file
config = load_config(args.config)
# Set the configuration parameters on args, if they are not already set by command line arguments
for key, value in config.items():
setattr(args, key, value)

args.save_iterations.append(args.iterations)

print("Optimizing " + args.model_path)
Expand Down

0 comments on commit 7a4611d

Please sign in to comment.