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.
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.
The first step is to clone this repository by:
git clone https://github.com/facebookresearch/SteepGSUnlike the original repository, the diff-gaussian-rasterization and simple-knn libraries are already in the repo.
submodules/diff-gaussian-rasterization
submodules/simple-knnHowever, 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 5c46b9cRunning 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 toolkitsYou 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 .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.
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 renderingsSteepGS 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 beadcto recover the default density control in 3DGS orsteepestto enable our method. Users can also append attributesstationaryto enable a stationary gradient condition,no_saddle,no_uncertain,no_eig_condto disable splitting conditions on saddle points, gradient uncertainty, or splitting matrices' eigenvalues, orno_eig_updto 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 bepartial,approx, orinv_cov. By default,inv_covis chosen for its computational efficiency.
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}
}
This code is released under the Gaussian-Splatting license. (see LICENSE).
