Skip to content

facebookresearch/SteepGS

Steepest Descent Density Control for Compact 3D Gaussian Splatting

The official implementation of CVPR 2025 paper Steepest Descent Density Control for Compact 3D Gaussian Splatting

Peihao Wang*1, Yuehao Wang*1, Dilin Wang2, Sreyas Mohan2, Zhiwen Fan1, Lemeng Wu2, Ruisi Cai1, Yu-Ying Yeh2, Zhangyang Wang1, Qiang Liu1, Rakesh Ranjan2

1University of Texas at Austin, 2Meta Reality Labs

* denotes equal contribution.

Project Page | Paper | Code

This repository is built based on the official repository of 3DGS.

Image

We theoretically investigate density control in 3DGS. As training via gradient descent progresses, many Gaussian primitives are observed to become stationary while failing to reconstruct the regions they cover (e.g. the cyan-colored blobs in the top-left figure marked with 🧊). From an optimization-theoretic perspective (see figure on the right), we reveal that these primitives are trapped in saddle points, the regions in the loss landscape where gradients are insufficient to further reduce loss, leaving parameters sub-optimal locally. To address this, we introduce SteepGS, which efficiently identifies Gaussian points located in saddle area, splits them into two off-springs, and displaces new primitives along the steepest descent directions. This restores the effectiveness of successive gradient-based updates by escaping the saddle area (e.g. the orange-colored blobs in the top-left figure marked with 🔥 become optimizable after densification). As shown in the bottom-left visualization, SteepGS achieves a more compact parameterization while preserving the fidelity of fine geometric details.

Get Started

Cloning the Repository

The first step is to clone this repository by:

git clone https://github.com/facebookresearch/SteepGS

Unlike the original repository, the diff-gaussian-rasterization and simple-knn libraries are already in the repo.

submodules/diff-gaussian-rasterization
submodules/simple-knn

However, please remember to manually clone glm library via:

cd submodules/diff-gaussian-rasterization/third_party
git clone https://github.com/g-truc/glm.git
git checkout 5c46b9c

Installation

Running our code requires the following packages:

pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
conda install nvidia/label/cuda-11.8.0::cuda # optional, for nvcc toolkits

You also need to install two customized packages diff-gaussian-rasterization and simple-knn:

# remember to specify the cuda library path if some cuda header is missing
cd submodules/diff-gaussian-rasterization
pip install -e .

# remember to specify the cuda library path if some cuda header is missing
cd submodules/simple-knn
pip install -e .

Data Preparation

The data downloading and processing are the same with the original 3DGS. Please refer to here for more details. If you want to run SteepGS on your own dataset, please refer to here for the instructions.

Running

The simplest way to use and evaluate SteepGS is through the following commands:

python train.py -s <path to COLMAP or NeRF Synthetic dataset> -m <path to checkpoint> --no_gui --densitf_strategy steepest  --eval # Train with train/test split
python render.py -m <path to trained model> # Generate renderings
python metrics.py -m <path to trained model> # Compute error metrics on renderings

SteepGS inherits all training hyper-parameters from original 3DGS, listed here in detail. In addition, SteepGS introduces a few arguments associated with the steepest density control strategy:

  • --densify_strategy: The strategy adopted for density control. It can be adc to recover the default density control in 3DGS or steepest to enable our method. Users can also append attributes stationary to enable a stationary gradient condition, no_saddle, no_uncertain, no_eig_cond to disable splitting conditions on saddle points, gradient uncertainty, or splitting matrices' eigenvalues, or no_eig_upd to disable adopting splitting matrices' principal eigenvectors as the update directions.
  • --densify_S_threshold: The threshold of splitting matrices' eigenvalues used to select Gaussian points to be split. It must be negative.
  • --S_estimator: The splitting matrix estimator. It can be partial, approx, or inv_cov. By default, inv_cov is chosen for its computational efficiency.

Citation

If you find our repository helpful, please cite our work using the following BibTex.

@inproceedings{wang2025steepgs,
  title={Steepest Descent Density Control for Compact 3D Gaussian Splatting},
  author={Wang, Peihao and Wang, Yuehao and Wang, Dilin and Mohan, Sreyas and Fan, Zhiwen and Wu, Lemeng and Cai, Ruisi and Yeh, Yu-Ying and Wang, Zhangyang and Liu, Qiang and Ranjan, Rakesh},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  year={2025}
}

License

This code is released under the Gaussian-Splatting license. (see LICENSE).

About

Code for CVPR 2025 paper "Steepest Descent Density Control for Compact 3D Gaussian Splatting"

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •