README.md
November 27, 2025 · View on GitHub
Distilled-3DGS: Distilled 3D Gaussian Splatting
3Sun Yat-Sen University
TL;DR: We present Distilled-3DGS, a simple yet effective knowledge distillation framework that achieves competitive performance in both rendering quality and storage efficiency.
⚡ Updates
- [2025-08-19] Project resources released: Project Page | arXiv
⭐ Abstract
3D Gaussian Splatting (3DGS) has exhibited remarkable efficacy in novel view synthesis (NVS). However, it suffers from a significant drawback: achieving high-fidelity rendering typically necessitates a large number of 3D Gaussians, resulting in substantial memory consumption and storage requirements. To address this challenge, we propose the first knowledge distillation framework for 3DGS, featuring various teacher models, including vanilla 3DGS, noise-augmented variants, and dropout-regularized versions. The outputs of these teachers are aggregated to guide the optimization of a lightweight student model. To distill the hidden geometric structure, we propose a structural similarity loss to boost the consistency of spatial geometric distributions between the student and teacher model. Through comprehensive quantitative and qualitative evaluations across diverse datasets, the proposed Distilled-3DGS—a simple yet effective framework without bells and whistles—achieves promising results in both rendering quality and storage efficiency compared to state-of-the-art methods.
⭐ Pipeline
1. Setup
This code has been tested with Python 3.10, PyTorch 2.0.1, CUDA 11.8.
- Clone the repository
git clone https://github.com/lt-xiang/Distilled-3DGS.git
cd Distilled-3DGS
- Setup Python environment
# Create and activate conda environment
conda create -n DistilledGS python=3.10 -y
conda activate DistilledGS
# Install PyTorch (CUDA 11.8)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
# Install project dependencies
pip install -r requirements.txt
2. Dataset
- Download datasets:
- Mip-NeRF 360: https://jonbarron.info/mipnerf360/
- T&T + DB (COLMAP inputs): https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/input/tandt_db.zip
- Generate depth maps
a. Clone Depth Anything v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
b. Download weights from Depth-Anything-V2-Large and place under Depth-Anything-V2/checkpoints/:
c. Generate depth maps:
python Depth-Anything-V2/run.py \
--encoder vitl \
--pred-only \
--grayscale \
--img-path <path_to_input_images> \
--outdir <output_path>
d. Generate depth_params.json:
python utils/make_depth_scale.py \
--base_dir <path_to_colmap> \
--depths_dir <path_to_generated_depths>
3. Model
Run the following scripts for training and evaluation:
# Mip-NeRF 360 (indoor)
bash run_mip360_in.sh
# Mip-NeRF 360 (outdoor)
bash run_mip360_out.sh
# Tanks & Temples
bash run_tnt.sh
# Deep Blending (DB)
bash run_db.sh
Using the Mip-NeRF 360 bonsai scene as an example, we first train three different teacher models. Then, outputs from these teachers are used to supervise the student model.
# 1) Train (teachers + student)
python train.py \
--source_path <dataset_path> \
--model_path <model_path> \
--resolution 2 \
--eval \
--imp_metric indoor \
--iterations 30000 \
--num_models 4 # 0,1,2 are teacher models; 3 is the student model.
# 2) Render with the student model
python render.py \
--source_path <dataset_path> \
--model_path <model_path> \
--skip_train \
--iteration 30000 \
--itrain 3 # student model index
# 3) Evaluation
python metrics.py --model_path <model_path>
Acknowledgement
Special thanks to the following awesome projects!
- Gaussian Splatting: https://github.com/graphdeco-inria/gaussian-splatting
- Mini Splatting: https://github.com/fatPeter/mini-splatting
- Dropout Gaussian: https://github.com/DCVL-3D/DropGaussian_release
Citation
@article{Xiang2025Distilled3DGaussianSplatting,
title = {Distilled-3DGS: Distilled 3D Gaussian Splatting},
author = {Lintao Xiang and Xinkai Chen and Jianhuang Lai and Guangcong Wang},
journal = {arXiv},
year = {2025},
eprint = {2508.14037},
archivePrefix = {arXiv},
primaryClass = {cs.CV}
}