Skip to content

Commit eab0dbd

Browse files
committed
announcement of V2
1 parent fa111ff commit eab0dbd

4 files changed

Lines changed: 189 additions & 131 deletions

File tree

README.md

Lines changed: 25 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,29 @@
11
<br>
22
<p align="center">
3-
<h1 align="center"><strong>[ECCV2024] CityGaussian: Real-time High-quality Large-Scale Scene Rendering with Gaussians</strong></h1>
3+
<h1 align="center"><strong>CityGaussian Series for High-quality Large-Scale Scene Reconstruction with Gaussians</strong></h1>
44
<p align="center">
5-
Yang Liu&emsp;
6-
He Guan&emsp;
7-
Chuanchen Luo&emsp;
8-
Lue Fan&emsp;
9-
Naiyan Wang&emsp;
10-
Junran Peng&emsp;
11-
Zhaoxiang Zhang&emsp;
12-
<br>
135
<em>Institute of Automation, Chinese Academy of Sciences; University of Chinese Academy of Sciences</em>
14-
<br>
156
</p>
167
</p>
178

189
<div id="top" align="center">
1910

20-
[![](https://img.shields.io/badge/Paper-%F0%9F%93%96-blue)](https://arxiv.org/pdf/2404.01133)
21-
[![](https://img.shields.io/badge/Project-%F0%9F%9A%80-blue)](https://dekuliutesla.github.io/citygs/)
11+
[![](https://img.shields.io/badge/%F0%9F%9A%80%20Project-V1-green)](https://dekuliutesla.github.io/citygs/)
12+
[![](https://img.shields.io/badge/%F0%9F%9A%80%20Project-V2-blue)](https://dekuliutesla.github.io/CityGaussianV2/)
13+
[![HuggingFace](https://img.shields.io/badge/%F0%9F%A4%97-Hugging%20Face-orange)](https://huggingface.co/TeslaYang123/CityGaussian)
2214
![GitHub Repo stars](https://img.shields.io/github/stars/DekuLiuTesla/CityGaussian)
2315

2416
</div>
2517

26-
The advancement of real-time 3D scene reconstruction and novel view synthesis has been significantly propelled by 3D Gaussian Splatting (3DGS). However, effectively training large-scale 3DGS and rendering it in real-time across various scales remains challenging. This paper introduces CityGaussian (CityGS), which employs a novel divide-and-conquer training approach and Level-of-Detail (LoD) strategy for efficient large-scale 3DGS training and rendering. Specifically, the global scene prior and adaptive training data selection enables efficient training and seamless fusion. Based on fused Gaussian primitives, we generate different detail levels through compression, and realize fast rendering across various scales through the proposed block-wise detail levels selection and aggregation strategy. Extensive experimental results on large-scale scenes demonstrate that our approach attains state-of-the-art rendering quality, enabling consistent real-time rendering of large-scale scenes across vastly different scales. **Welcome to visit our [Project Page](https://dekuliutesla.github.io/citygs/)**.
18+
This repo contains official implementations of our series of work in large-scale scene reconstruction with Gaussian Splatting, Star ⭐ us if you like it!
19+
- [CityGaussianV2: Efficient and Geometrically Accurate Reconstruction for Large-Scale Scenes](https://dekuliutesla.github.io/CityGaussianV2/)
20+
- [CityGaussian: Real-time High-quality Large-Scale Scene Rendering with Gaussians](https://arxiv.org/pdf/2404.01133) (ECCV 2024)
2721

28-
<!-- ![Teaser](assets/teaser.jpg) -->
29-
30-
<div style="text-align: center;">
31-
<img src="assets/Teaser.png" alt="Dialogue_Teaser" width=100% >
32-
</div>
22+
The links above points to the papers. Users could follow the [instruction](doc/citygaussianv1_readme.md) to download COLMAP results, checkpoints, and try the V1 of our CityGaussian. The code of V2 is also coming soon.
3323

3424
## 📰 News
25+
**[2024.11.04]** Announcement of our [CityGaussianV2](https://dekuliutesla.github.io/CityGaussianV2/)!
26+
3527
**[2024.10.12]** Checkpoints on main datasets have been released!
3628

3729
**[2024.10.11]** Updates FAQ! If you are stucked, please first check whether it can solves the problem.
@@ -42,115 +34,13 @@ The advancement of real-time 3D scene reconstruction and novel view synthesis ha
4234

4335
**[2024.07.18]** Camera Ready version now can be accessed through arXiv. More insights are included.
4436

45-
## 🥏 Model of CityGaussian
46-
47-
This repository contains the official implementation of the paper ["CityGaussian: Real-time High-quality Large-Scale Scene Rendering with Gaussians"](https://arxiv.org/pdf/2404.01133). Star ⭐ us if you like it!
48-
### Training Pipeline
49-
<p align="center">
50-
<img src="assets/Train.png" align="center" width="100%">
51-
</p>
52-
53-
### Rendering Pipeline
54-
<p align="center">
55-
<img src="assets/Render.png" align="center" width="100%">
56-
</p>
57-
58-
## 🔧 Usage
59-
60-
Note that the configs for five large-scale scenes: MatrixCity, Rubble, Building, Residence and Sci-Art has been prepared in `config` folder. Data of these datasets can be prepared according to [Data Preparation](doc/data_preparation.md). For COLMAP, we recommend to directly use our generated results:
61-
62-
- **Google Drive**: https://drive.google.com/file/d/1Uz1pSTIpkagTml2jzkkzJ_rglS_z34p7/view?usp=sharing
63-
- **Hugging Face**: https://huggingface.co/datasets/dylanebert/CityGaussian
64-
- **Baidu Netdisk**: https://pan.baidu.com/s/1zX34zftxj07dCM1x5bzmbA?pwd=1t6r
65-
66-
### Checkpoints
67-
Please download from:
68-
- **Hugging Face**: https://huggingface.co/TeslaYang123/CityGaussian
69-
- **Baidu Netdisk**: https://pan.baidu.com/s/1a9C8xgAQmQy86FvO9XXBFQ?pwd=cxlr
70-
71-
### Installation
72-
#### a. Clone the repository
73-
```bash
74-
# clone repository
75-
git clone --recursive https://github.com/DekuLiuTesla/CityGaussian.git
76-
cd CityGaussian
77-
mkdir data # store your dataset here
78-
mkdir output # store your output here
79-
```
80-
81-
#### b. Create virtual environment
82-
```bash
83-
# create virtual environment
84-
conda create -yn citygs python=3.9 pip
85-
conda activate citygs
86-
```
87-
88-
#### c. Install PyTorch
89-
* Tested on `PyTorch==2.0.1`
90-
* You must install the one match to the version of your nvcc (nvcc --version)
91-
* For CUDA 11.8
9237

93-
```bash
94-
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
95-
```
96-
97-
#### d. Install requirements
98-
```bash
99-
pip install -r requirements.txt
100-
```
101-
102-
#### e. Install tailored LightGaussian for LoD
103-
```bash
104-
cd LargeLightGaussian
105-
pip install submodules/compress-diff-gaussian-rasterization
106-
ln -s /path/to/data /path/to/LargeLightGaussian/data
107-
ln -s /path/to/output /path/to/LargeLightGaussian/output
108-
cd ..
109-
```
110-
### Prepare Config Files
111-
If you use your own dataset, please follow instruction in [Custom Dataset Instructions](doc/custom_dataset.md) to prepare. We also prepared templates in `./config` and `LargeLightGaussian/scripts`.
112-
113-
### Training and Vanilla Rendering
114-
To train a scene, config the hyperparameters of pretraining and finetuning stage with your yaml file, then replace the `COARSE_CONFIG` and `CONFIG` in `run_citygs.sh`. The `max_block_id`, `out_name`, and `TEST_PATH` in `run_citygs.sh` should be set according to your dataset as well. Then you can train your scene by simply using:
115-
```bash
116-
bash scripts/run_citygs.sh
117-
```
118-
This script will also render and evaluate the result without LoD.
119-
120-
### Rendering with LoD
121-
First, the LoD generation is realized by the following command:
122-
```bash
123-
cd LargeLightGaussian
124-
bash scripts/run_prune_finetune_$your_scene.sh
125-
bash scripts/run_distill_finetune_$your_scene.sh
126-
bash scripts/run_vectree_quantize_$your_scene.sh
127-
cd ..
128-
```
129-
After that, configure the LoD setting in another yaml file. Then replace `CONFIG`, `TEST_PATH`, and `out_name` with yours in `run_citygs_lod.sh`. Then you can render the scene with LoD by using:
130-
```bash
131-
bash scripts/run_citygs_lod.sh
132-
```
133-
Note that the LoD selection is now based on Nyquist sampling rate instead of manually defined distance threshold. This modification enables better generalization and anti-aliasing performance.
134-
135-
### Viewer
136-
We borrowed Web viewer from [Gaussian Lightning](https://github.com/yzslab/gaussian-splatting-lightning). Take the scene Rubble as an example. To render the scene with no LoD, you can use the following command:
137-
```bash
138-
python viewer.py output/rubble_c9_r4
139-
```
140-
To render the scene with LoD, you can use the following command:
141-
```bash
142-
# copy cameras.json first for direction initialization
143-
cp output/rubble_c9_r4/cameras.json output/rubble_c9_r4_lod/
144-
python viewer.py config/rubble_c9_r4_lod.yaml
145-
```
14638

14739
## 📝 TODO List
14840

149-
- \[x\] First Release.
150-
- \[x\] Release CityGaussian code.
41+
- \[\] Release the V2 of CityGaussian.
42+
- \[x\] Release code and checkpoints of CityGaussian.
15143
- \[x\] Release ColMap results of main datasets.
152-
- \[x\] Release detailed instruction for custom dataset usage.
153-
- \[x\] Release checkpoints on main datasets.
15444

15545

15646

@@ -162,11 +52,23 @@ This work is under the <a rel="license" href="http://creativecommons.org/license
16252

16353
## 🤗 Citation
16454
If you find this repository useful, please use the following BibTeX entry for citation.
55+
```latex
56+
@misc{liu2024citygaussianv2efficientgeometricallyaccurate,
57+
title={CityGaussianV2: Efficient and Geometrically Accurate Reconstruction for Large-Scale Scenes},
58+
author={Yang Liu and Chuanchen Luo and Zhongkai Mao and Junran Peng and Zhaoxiang Zhang},
59+
year={2024},
60+
eprint={2411.00771},
61+
archivePrefix={arXiv},
62+
primaryClass={cs.CV},
63+
url={https://arxiv.org/abs/2411.00771},
64+
}
65+
```
66+
16567
```latex
16668
@article{liu2024citygaussian,
16769
title={Citygaussian: Real-time high-quality large-scale scene rendering with gaussians},
16870
author={Liu, Yang and Guan, He and Luo, Chuanchen and Fan, Lue and Wang, Naiyan and Peng, Junran and Zhang, Zhaoxiang},
169-
journal={arXiv preprint arXiv:2404.01133},
71+
booktitle={ECCV},
17072
year={2024}
17173
}
17274
```
@@ -175,11 +77,3 @@ If you find this repository useful, please use the following BibTeX entry for ci
17577

17678
This repo benefits from [3DGS](https://github.com/graphdeco-inria/gaussian-splatting), [LightGaussian](https://github.com/VITA-Group/LightGaussian), [Gaussian Lightning](https://github.com/yzslab/gaussian-splatting-lightning). Thanks for their great work!
17779

178-
## ❓ FAQ
179-
- _No available GPU or only single GPU can be used for parallel training._ This may due to lack of enough memory on the GPU. `get_available_gpu()` function in the script will only return GPU id with occupied memory less than 500M. You can rise the `mem_threshold` to 5000(M) for a looser start condition. Another way is to simply kill unnecessary progress.
180-
181-
- _Out of memory occurs in training._ For block_all of MatrixCity aerial view, we noticed that it may cost memory more than 24G when fine-tuning specific blocks. To finish training with limited VRAM, downsampling images or adjusting max_cache_num (we used a rather large 1024) in train_large.py can be a useful practice. This problem will be resolved in our coming V2 version.
182-
183-
- _Generation of COLMAP results._ We use the ground-truth poses offered by datasets and separately match the train and test sets. And this will be faster and more robust than match from scratch. But indeed it still costs a lot of time.
184-
185-
- _Most blocks are not trained._ The main reason here is the data assigned to most blocks are too few (<50), and to prevent overfitting these blocks won't get trained. This can be attributed to unreasonable aabb setting, please try to adjust it and see if things work.

assets/Densification.png

15.5 KB
Loading

assets/Pipeline.png

15.3 KB
Loading

doc/citygaussianv1_readme.md

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
<br>
2+
<p align="center">
3+
<h1 align="center"><strong>[ECCV2024] CityGaussian: Real-time High-quality Large-Scale Scene Rendering with Gaussians</strong></h1>
4+
<p align="center">
5+
Yang Liu&emsp;
6+
He Guan&emsp;
7+
Chuanchen Luo&emsp;
8+
Lue Fan&emsp;
9+
Naiyan Wang&emsp;
10+
Junran Peng&emsp;
11+
Zhaoxiang Zhang&emsp;
12+
<br>
13+
<em>Institute of Automation, Chinese Academy of Sciences; University of Chinese Academy of Sciences</em>
14+
<br>
15+
</p>
16+
</p>
17+
18+
<div id="top" align="center">
19+
20+
[![](https://img.shields.io/badge/Paper-%F0%9F%93%96-blue)](https://arxiv.org/pdf/2404.01133)
21+
[![](https://img.shields.io/badge/Project-%F0%9F%9A%80-blue)](https://dekuliutesla.github.io/citygs/)
22+
23+
</div>
24+
25+
The advancement of real-time 3D scene reconstruction and novel view synthesis has been significantly propelled by 3D Gaussian Splatting (3DGS). However, effectively training large-scale 3DGS and rendering it in real-time across various scales remains challenging. This paper introduces CityGaussian (CityGS), which employs a novel divide-and-conquer training approach and Level-of-Detail (LoD) strategy for efficient large-scale 3DGS training and rendering. Specifically, the global scene prior and adaptive training data selection enables efficient training and seamless fusion. Based on fused Gaussian primitives, we generate different detail levels through compression, and realize fast rendering across various scales through the proposed block-wise detail levels selection and aggregation strategy. Extensive experimental results on large-scale scenes demonstrate that our approach attains state-of-the-art rendering quality, enabling consistent real-time rendering of large-scale scenes across vastly different scales. **Welcome to visit our [Project Page](https://dekuliutesla.github.io/citygs/)**.
26+
27+
<!-- ![Teaser](assets/teaser.jpg) -->
28+
29+
<div style="text-align: center;">
30+
<img src="../assets/Teaser.png" alt="Dialogue_Teaser" width=100% >
31+
</div>
32+
33+
34+
## 🥏 Model of CityGaussian
35+
36+
### Training Pipeline
37+
<p align="center">
38+
<img src="../assets/Train.png" align="center" width="100%">
39+
</p>
40+
41+
### Rendering Pipeline
42+
<p align="center">
43+
<img src="../assets/Render.png" align="center" width="100%">
44+
</p>
45+
46+
## 🔧 Usage
47+
48+
Note that the configs for five large-scale scenes: MatrixCity, Rubble, Building, Residence and Sci-Art has been prepared in `config` folder. Data of these datasets can be prepared according to [Data Preparation](doc/data_preparation.md). For COLMAP, we recommend to directly use our generated results:
49+
50+
- **Google Drive**: https://drive.google.com/file/d/1Uz1pSTIpkagTml2jzkkzJ_rglS_z34p7/view?usp=sharing
51+
- **Hugging Face**: https://huggingface.co/datasets/dylanebert/CityGaussian
52+
- **Baidu Netdisk**: https://pan.baidu.com/s/1zX34zftxj07dCM1x5bzmbA?pwd=1t6r
53+
54+
### Checkpoints
55+
Please download from:
56+
- **Hugging Face**: https://huggingface.co/TeslaYang123/CityGaussian
57+
- **Baidu Netdisk**: https://pan.baidu.com/s/1a9C8xgAQmQy86FvO9XXBFQ?pwd=cxlr
58+
59+
### Installation
60+
#### a. Clone the repository
61+
```bash
62+
# clone repository
63+
git clone --recursive https://github.com/DekuLiuTesla/CityGaussian.git
64+
cd CityGaussian
65+
mkdir data # store your dataset here
66+
mkdir output # store your output here
67+
```
68+
69+
#### b. Create virtual environment
70+
```bash
71+
# create virtual environment
72+
conda create -yn citygs python=3.9 pip
73+
conda activate citygs
74+
```
75+
76+
#### c. Install PyTorch
77+
* Tested on `PyTorch==2.0.1`
78+
* You must install the one match to the version of your nvcc (nvcc --version)
79+
* For CUDA 11.8
80+
81+
```bash
82+
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
83+
```
84+
85+
#### d. Install requirements
86+
```bash
87+
pip install -r requirements.txt
88+
```
89+
90+
#### e. Install tailored LightGaussian for LoD
91+
```bash
92+
cd LargeLightGaussian
93+
pip install submodules/compress-diff-gaussian-rasterization
94+
ln -s /path/to/data /path/to/LargeLightGaussian/data
95+
ln -s /path/to/output /path/to/LargeLightGaussian/output
96+
cd ..
97+
```
98+
### Prepare Config Files
99+
If you use your own dataset, please follow instruction in [Custom Dataset Instructions](doc/custom_dataset.md) to prepare. We also prepared templates in `./config` and `LargeLightGaussian/scripts`.
100+
101+
### Training and Vanilla Rendering
102+
To train a scene, config the hyperparameters of pretraining and finetuning stage with your yaml file, then replace the `COARSE_CONFIG` and `CONFIG` in `run_citygs.sh`. The `max_block_id`, `out_name`, and `TEST_PATH` in `run_citygs.sh` should be set according to your dataset as well. Then you can train your scene by simply using:
103+
```bash
104+
bash scripts/run_citygs.sh
105+
```
106+
This script will also render and evaluate the result without LoD.
107+
108+
### Rendering with LoD
109+
First, the LoD generation is realized by the following command:
110+
```bash
111+
cd LargeLightGaussian
112+
bash scripts/run_prune_finetune_$your_scene.sh
113+
bash scripts/run_distill_finetune_$your_scene.sh
114+
bash scripts/run_vectree_quantize_$your_scene.sh
115+
cd ..
116+
```
117+
After that, configure the LoD setting in another yaml file. Then replace `CONFIG`, `TEST_PATH`, and `out_name` with yours in `run_citygs_lod.sh`. Then you can render the scene with LoD by using:
118+
```bash
119+
bash scripts/run_citygs_lod.sh
120+
```
121+
Note that the LoD selection is now based on Nyquist sampling rate instead of manually defined distance threshold. This modification enables better generalization and anti-aliasing performance.
122+
123+
### Viewer
124+
We borrowed Web viewer from [Gaussian Lightning](https://github.com/yzslab/gaussian-splatting-lightning). Take the scene Rubble as an example. To render the scene with no LoD, you can use the following command:
125+
```bash
126+
python viewer.py output/rubble_c9_r4
127+
```
128+
To render the scene with LoD, you can use the following command:
129+
```bash
130+
# copy cameras.json first for direction initialization
131+
cp output/rubble_c9_r4/cameras.json output/rubble_c9_r4_lod/
132+
python viewer.py config/rubble_c9_r4_lod.yaml
133+
```
134+
135+
136+
## 📄 License
137+
138+
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" /></a>
139+
<br />
140+
This work is under the <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
141+
142+
## 🤗 Citation
143+
If you find this repository useful, please use the following BibTeX entry for citation.
144+
```latex
145+
@article{liu2024citygaussian,
146+
title={Citygaussian: Real-time high-quality large-scale scene rendering with gaussians},
147+
author={Liu, Yang and Guan, He and Luo, Chuanchen and Fan, Lue and Wang, Naiyan and Peng, Junran and Zhang, Zhaoxiang},
148+
journal={arXiv preprint arXiv:2404.01133},
149+
year={2024}
150+
}
151+
```
152+
153+
## 👏 Acknowledgements
154+
155+
This repo benefits from [3DGS](https://github.com/graphdeco-inria/gaussian-splatting), [LightGaussian](https://github.com/VITA-Group/LightGaussian), [Gaussian Lightning](https://github.com/yzslab/gaussian-splatting-lightning). Thanks for their great work!
156+
157+
## ❓ FAQ
158+
- _No available GPU or only single GPU can be used for parallel training._ This may due to lack of enough memory on the GPU. `get_available_gpu()` function in the script will only return GPU id with occupied memory less than 500M. You can rise the `mem_threshold` to 5000(M) for a looser start condition. Another way is to simply kill unnecessary progress.
159+
160+
- _Out of memory occurs in training._ For block_all of MatrixCity aerial view, we noticed that it may cost memory more than 24G when fine-tuning specific blocks. To finish training with limited VRAM, downsampling images or adjusting max_cache_num (we used a rather large 1024) in train_large.py can be a useful practice. This problem will be resolved in our coming V2 version.
161+
162+
- _Generation of COLMAP results._ We use the ground-truth poses offered by datasets and separately match the train and test sets. And this will be faster and more robust than match from scratch. But indeed it still costs a lot of time.
163+
164+
- _Most blocks are not trained._ The main reason here is the data assigned to most blocks are too few (<50), and to prevent overfitting these blocks won't get trained. This can be attributed to unreasonable aabb setting, please try to adjust it and see if things work.

0 commit comments

Comments
 (0)