AI prompts
base on [ICML2024] Official code for GaussianPro: 3D Gaussian Splatting with Progressive Propagation <div align="center">
<h1 align="center">GaussianPro: 3D Gaussian Splatting with Progressive Propagation</h1>
<h2 align="center">ICML 2024</h2>
### [Project Page](https://kcheng1021.github.io/gaussianpro.github.io/) | [Paper](https://arxiv.org/abs/2402.14650)
</div>
<div align="center">
<img width="800" alt="image" src="figs/comparison.gif">
</div>
## 📖 Abstract
The advent of 3D Gaussian Splatting (3DGS) has recently brought about a revolution in the field of neural rendering, facilitating high-quality renderings at real-time speed. However, 3DGS heavily depends on the initialized point cloud produced by Structure-from-Motion (SfM) techniques.
When tackling with large-scale scenes that unavoidably contain texture-less surfaces, the SfM techniques always fail to produce enough points in these surfaces and cannot provide good initialization for 3DGS. As a result, 3DGS suffers from difficult optimization and low-quality renderings.
In this paper, inspired by classical multi-view stereo (MVS) techniques, we propose **GaussianPro**, a novel method that applies a progressive propagation strategy to guide the densification of the 3D Gaussians.
Compared to the simple split and clone strategies used in 3DGS, our method leverages the priors of the existing reconstructed geometries of the scene and patch matching techniques to produce new Gaussians with accurate positions and orientations.
Experiments on both large-scale and small-scale scenes validate the effectiveness of our method, where our method significantly surpasses 3DGS on the Waymo dataset, exhibiting an improvement of 1.15dB in terms of PSNR.
## 🗓️ News
[2024.10.10] Many thanks to [Caio Viturino](https://github.com/caioviturinofs), the project provides the docker environment!
[2024.9.28] Many thanks to [Chongjie Ye](https://github.com/hugoycj), the project avoid the dependency on Opencv C++ libraray, making it more convenient to install!
Some amazing enhancements will also come out this year.
## 🗓️ TODO
- [✔] Code pre-release -- Beta version.
- [✔] Demo Scenes.
- [✔] <strong>Pybinding & CUDA acceleration</strong>.
- [ ] Support for unordered set of images.
<strong>Some amazing enhancements are under development. We are warmly welcome anyone to collaborate in improving this repository. Please send me an email if you are interested!</strong>
## 🚀 Pipeline
<div align="center">
<img width="800" alt="image" src="figs/pipeline.png">
</div>
## 🚀 Setup
#### Tested Environment
Ubuntu 20.04.1 LTS, GeForce 3090, CUDA 11.3 (tested) / 11.7 (tested), C++17
#### Clone the repo.
```
git clone https://github.com/kcheng1021/GaussianPro.git --recursive
```
#### Environment setup
```
conda env create --file environment.yml
# install the propagation package
# The gpu compute architecture is specified as sm_86 in setup.py. Please replace it with a version that is suitable for your GPU.
# Replace the opencv and CUDA include/lib path with your own (Ignore in the latest version)
# the C++ opencv is better installed in conda environment by conda install -c conda-forge opencv (Ignore in the latest version)
pip install ./submodules/Propagation
```
#### Docker install (Alternative)
To build the GaussianPro using docker, execute the following commands:
```bash
sh docker/build_gaussian_pro_docker.sh
```
To execute the container, run:
```bash
# Please remember to substitute the dataset path to your desired path
sh docker/run_gaussian_pro_docker.sh
```
#### Download the demo Waymo scene: Segment-102751
```
wget https://drive.google.com/file/d/1DXQRBcUIrnIC33WNq8pVLKZ_W1VwON3k/view?usp=sharing
```
#### Besides the public datasets, we also test GaussianPro from random selected Youtube videos and find consistent improvement. The processed data is provided below.
```
#youtube01: Park.
wget https://drive.google.com/file/d/1iHYTnI76Zx9VTKbMu1zUE7gVKP4UpBan/view?usp=sharing
#youtube02: Church
wget https://drive.google.com/file/d/1i2ReAJYkeLHBBbs_8Zn560Tke2F8yR1X/view?usp=sharing
#youtube03: The forbidden city.
wget https://drive.google.com/file/d/1PZ_917Oq0Y45_5dJ504RxRmpUnewYmyn/view?usp=sharing
#youtube04: Eiffel tower.
wget https://drive.google.com/file/d/1JoYyfAu3RNnj12C2gPvfljHLUKlUsSr1/view?usp=sharing
```
![image](https://github.com/kcheng1021/GaussianPro/blob/main/figs/output.gif)
![image](https://github.com/kcheng1021/GaussianPro/blob/main/figs/output2.gif)
#### Run the codes
```
# Run the 3DGS, we modify the defaulting parameters in 3DGS to better learn large scenes. The description of parameters in GaussianPro will come out later.
# To run the Waymo scenes (3DGS and GaussianPro)
bash scripts/waymo.sh
# Run the Youtube scenes above
bash scripts/demo.sh
```
To ensure the reproducibility, we present a reference of the results in the provided demo scenes based on the current code.
| | Waymo-1002751 | Youtube-01 | Youtube-02 | Youtube-03 | Youtube-04 |
| :--- | :---: | :---: | :---: | :---: | :---: |
| 3DGS | 35.22,0.950,0.234 | 34.40,0.964,0.092 | 34.67,0.954,0.072 | 37.81,0.971,0.081 | 33.05,0.950,0.079 |
| GaussianPro | **35.97,0.959,0.207** | **35.29,0.969,0.076** | **35.08,0.959,0.064** | **38.27,0.974,0.072** | **33.66,0.956,0.072** |
### Try your scenes
**If you want to try your scenes, make sure your images are sorted in the time order, i.e. video data. The current version does not support unordered image sets, but it
will be updated in the next version. Then you can try the commands in demo.sh to run your own scenes.**
**Please ensure that your neighboring images have sufficient overlap.**
## 🎫 License
For non-commercial use, this code is released under the [LICENSE](LICENSE).
For commercial use, please contact Xuejin Chen.
## 🎫 Acknowledgment
This project largely references [3D Gaussian Splatting](https://github.com/graphdeco-inria/gaussian-splatting) and [ACMH/ACMM](https://github.com/GhiXu/ACMH). Thanks for their amazing works!
## 🖊️ Citation
If you find this project useful in your research, please consider cite:
```BibTeX
@article{cheng2024gaussianpro,
title={GaussianPro: 3D Gaussian Splatting with Progressive Propagation},
author={Cheng, Kai and Long, Xiaoxiao and Yang, Kaizhi and Yao, Yao and Yin, Wei and Ma, Yuexin and Wang, Wenping and Chen, Xuejin},
journal={arXiv preprint arXiv:2402.14650},
year={2024}
}
```
", Assign "at most 3 tags" to the expected json: {"id":"8263","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"