Yanzhe Lyu, Kai Cheng, Xin Kang, Xuejin Chen
[arxiv] [project page]
This repository is the official implementation of "ResGS: Residual Densification of 3D Gaussian for Efficient Detail Recovery".
To overcome the limitations of the 3D-GS densification method, we propose a novel approach, residual split, which recovers more details and reduces redundancy. To support the method, we introduce a pipeline named ResGS. Experiments show that our ResGS can achieve SOTA rendering quality in novel view synthesis. Furthermore, consistent performance improvements can be achieved by applying our residual split on various 3D-GS variants, underscoring its versatility and potential for broader application in 3D-GS-based applications.
# clone repository
git clone https://github.com/Lyuyz5440/ResGS.git --recursive
cd ResGS
# create environment
conda env create --file environment.yml
conda activate resgs
Please organize the data folder of a scene in the same way as 3D-GS. Specifically:
├──scene
├──images
├──image_0.jpg
├──image_1.jpg
├──image_2.jpg
├──...
├──sparse
└──0
├──cameras.bin
├──images.bin
├──points3D.bin
To evaluate our method on the datasets used in the paper, please organize your dataset folders as follows:
├──data
├──MipNeRF
├──scene1
├──scene2
├──...
├──tandt
├──scene1
├──scene2
├──db
├──scene1
├──scene2
To train on a single scene, please use the following command:
python train.py -s <path to COLMAP or NeRF Synthetic dataset> --eval
The parameters of "train.py" are basically the same as 3D-GS, with the addition of several new ones:
New Command Line Arguments for train.py
Set the GPU id to run the code, 0 by default.
Scale divisor factor for the new Gaussian generated by the residual split, 1.6 by default.
Opacity multiplication factor for the original Gaussian performing residual split, 0.3 by default.
To evaluate our method on all three datasets, we provide a script. Please run the following command:
python script.py --eval
Command Line Arguments for script.py
Set the GPU id to run the code, 0 by default.
Specify the dataset to evaluate the method on, "" by default, meaning evaluation on all three datasets. More options are: tt for Tanks&Temples, db for Deep Blending, mip for Mip-NeRF360.
Additional arguments to use in train.py, "" by default.
Name for the script run, default by default.
Add this flag to run the evaluation script after training
Path to save trained results and script output, trained/ by default.
Path for the three datasets, data/ by default.
After training, if the --eval flag is set to true, script_eval.py will be run to render test images and calculate metrics. By default, the final folder should look like this:
├──trained
├──db
├──scene1
├──scene2
├──MipNeRF
├──scene1
├──scene2
├──...
├──tandt
├──scene1
├──scene2
├──db_eval.txt
├──MipNeRF_eval.txt
├──tandt_eval.txt
where db_eval.txt, MipNeRF_eval.txt, tandt_eval.txt contains the collected per scene and average results of the datasets.
If you find our work helpful, please consider citing:
@inproceedings{lyu2025resgs,
title={ResGS: Residual Densification of 3D Gaussian for Efficient Detail Recovery},
author={Lyu, Yanzhe and Cheng, Kai and Kang, Xin and Chen, Xuejin},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
pages={28093--28102},
year={2025}
}
The released version of our method chooses AbsGS as its baseline, we thank them for their work. If you want to use our code, please also cite their paper. Additionally, please cite 3D-GS, as they are the original proposers of the 3D-GS framework.
@inproceedings{Ye2024AbsGSRF,
title={AbsGS: Recovering Fine Details in 3D Gaussian Splatting},
author={Zongxin Ye and Wenyu Li and Sidun Liu and Peng Qiao and Yong Dou},
booktitle={ACM Multimedia},
year={2024}
}
@Article{kerbl3Dgaussians,
author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\"u}hler, Thomas and Drettakis, George},
title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},
journal = {ACM Transactions on Graphics},
number = {4},
volume = {42},
month = {July},
year = {2023},
url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}
}
