Project page | Paper | Quadric Surfel Rasterizer (python)
This repo contains the official implementation for the paper “Quadratic Gaussian Splatting for Efficient and Detailed Surface Reconstruction.” Following 2DGS, we also provide a Python demo that demonstrates the differentiable rasterization process for quadratic surfaces:
# download
git clone https://github.com/QuadraticGS/QGS.git
conda env create -f environment.yml
To train a scene, simply use
python train.py --conf_path ./config/base.yaml
In base.yaml
, you can adjust all configurable parameters, with most parameters remaining consistent with 2DGS. Furthermore, we have briefly experimented with curvature-related losses, such as curvature distortion loss and curvature flatten loss. Unfortunately, their performance was not satisfactory.
Tips for adjusting the parameters on your own dataset:
- We observed that setting
pipeline.depth_ratio=1
enhances rendering quality. Additionally, by employing per-pixel reordering, we effectively eliminate the "disk-aliasing" artifacts present in 2DGS when usingdepth_ratio=1
. Therefore, we recommend usingpipeline.depth_ratio=1
when aiming to improve rendering quality. - In most scenarios, we recommend adjusting the
optimizer.densify_grad_threshold
andoptimizer.lambda_dist
parameters to achieve better reconstruction. The former controls the number of Gaussian primitives, while the latter controls the compactness of the primitives. - For large scenes, especially aerial or street views, we suggest adjusting the number of training iterations based on the number of images. We provide
TNT_Courthouse.yaml
as an example.
To extract scene geometry, simply use:
python render.py --conf_path ./config/base.yaml -m <path to pre-trained model>
In the pipeline
section of the base.yaml
configuration file, you can set various parameters for mesh extraction, maintaining the same meanings as those in 2DGS.
For geometry reconstruction on the DTU dataset, please download the preprocessed data from Drive or Hugging Face. You also need to download the ground truth DTU point cloud.
Next, modify the DTU.yaml
configuration file by setting the load_model_path
to the path of your trained model and dataset_GT_path
to the path of the ground truth dataset. After making these changes, simply execute the following commands to perform the evaluation:
python scripts/eval_dtu/eval.py --conf_path ./config/DTU.yaml -m <path to pre-trained model>
For the TNT dataset, please download the preprocessed TNT_data. Additionally, you need to download the ground truth TNT_GT.
Next, modify the TNT.yaml
configuration file by setting load_model_path
to the path of your trained model and dataset_GT_path
to the path of the ground truth dataset. After making these changes, simply execute the following commands to perform the evaluation:
python scripts/eval_tnt/run.py --conf_path ./config/TNT.yaml -m <path to pre-trained model>
This project is built upon 2DGS. The TSDF fusion for extracting mesh is based on Open3D. The rendering script for MipNeRF360 is adopted from Multinerf, while the evaluation scripts for DTU and Tanks and Temples dataset are taken from DTUeval-python and TanksAndTemples, respectively. We thank all the authors for their great repos.
If you find our code or paper helps, please consider citing:
@misc{zhang2024quadraticgaussiansplattingefficient,
title={Quadratic Gaussian Splatting for Efficient and Detailed Surface Reconstruction},
author={Ziyu Zhang and Binbin Huang and Hanqing Jiang and Liyang Zhou and Xiaojun Xiang and Shunhan Shen},
year={2024},
eprint={2411.16392},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2411.16392},
}