Skip to content
gurutvapatlePublic

About

AD-GS: Alternating Densification for Sparse-Input 3D Gaussian Splatting

Topics

Resources

Stars

35 stars

Watchers

1 watching

Forks

Repository files navigation

AD-GS: Alternating Densification for Sparse-Input 3D Gaussian Splatting

Gurutva Patle1, Nilay Girgaonkar1, Nagabhushan Somraj1, Rajiv Soundararajan1

1Indian Institute of Science (IISc), Bengaluru

Contact: Gurutva Patle via email (gurutvac[at]iisc[dot]ac[dot]in).

✨ACM SIGGRAPH Asia 2025✨

This is the official repository for our paper AD-GS: Alternating Densification for Sparse-Input 3D Gaussian Splatting.

Abstract

3D Gaussian Splatting (3DGS) has shown impressive results in real-time novel view synthesis. However, it often struggles under sparse-view settings, producing undesirable artifacts such as floaters, inaccurate geometry, and overfitting due to limited observations.

We propose AD-GS, a novel alternating densification framework that interleaves high and low densification phases. During high densification, the model densifies aggressively, followed by photometric loss based training to capture fine-grained scene details. Low densification then primarily involves aggressive opacity pruning of Gaussians followed by regularizing their geometry through pseudo-view consistency and edge-aware depth smoothness.

This alternating approach helps reduce overfitting by carefully controlling model capacity growth while progressively refining the scene representation. Extensive experiments on challenging datasets demonstrate that AD-GS significantly improves rendering quality and geometric consistency compared to existing methods.

Method Diagram

method

Tested on

Ubuntu 20.04.6 LTS, 
NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2, 
PyTorch 1.12.1

Installation

conda env create --file environment.yml
conda activate adgs
pip install submodules/diff-gaussian-rasterization-confidence
pip install submodules/simple-knn

Sample Run

We provide a sample file for horns scene here in repo. Run below command to run demo.sh .

bash demo.sh

A file "full_logs.json" contains the output.

Required Data

├── /dataset
   ├── mipnerf360
        ├── bicycle
        ├── bonsai
        ├── ...
   ├── nerf_llff_data
        ├── fern
        ├── flower
        ├── ...
   ├── Tanks
        ├── ballroom
        ├── barn
        ├── ...

Evaluation

LLFF

  1. Download LLFF from the official download link.

  2. run colmap to obtain initial point clouds with limited viewpoints:

    python tools/colmap_llff.py
  3. Start training and testing:

    # for example 
    # put integer number 0 or 1 or 2 in place of ${gpu_id} in below command
    bash scripts/run_llff_ad.sh ${gpu_id} dataset/nerf_llff_data/horns output/nerf_llff_data/horns

    run_llff_ad.sh runs with the same defaults as the paper (edit the variables at the top of the script to change the alternating-densification schedule, loss weights, or thresholds — see Alternating Densification: Training Options below). The original scripts/run_llff.sh still works identically, with those settings hardcoded instead of exposed.

MipNeRF-360

  1. Download MipNeRF-360 from the official download link.

  2. run colmap to obtain initial point clouds with limited viewpoints:

    python tools/colmap_360.py
  3. Start training and testing:

    # for example
    bash scripts/run_360_ad.sh ${gpu_id} dataset/mipnerf360/bicycle output/mipnerf360/bicycle

    (see the note on run_llff_ad.sh above; scripts/run_360.sh still works identically)

Tanks & Temples

  1. Download Tanks & Temples from download link. We refer to NoPe-NeRF for downloading.

  2. run colmap to obtain initial point clouds with limited viewpoints:

    python tools/colmap_llff.py

    We use the same LLFF colmap_llff.py file. Change the scene names in above file for Tanks & Temples.

  3. Start training and testing:

    # for example
    bash scripts/run_tanks_ad.sh ${gpu_id} dataset/tanksntemples/ballroom output/tanksntemples/ballroom

    (see the note on run_llff_ad.sh above; scripts/run_tanks.sh still works identically)

Customized Dataset

Similar to Gaussian Splatting, our method can read standard COLMAP format datasets. Please customize your sampling rule in scenes/dataset_readers.py, and see how to organize a COLMAP-format dataset from raw RGB images.

Alternating Densification: Training Options

Schedule (N_W warm-up, then N_H/N_L cycle)

Flag Default Meaning
--alt_warmup_iters 1500 N_W: iterations trained with photometric loss only, before alternation/regularization kicks in.
--alt_cycle_len 200 N_H + N_L: length of one full high-/low-densification cycle (applied after warm-up).
--alt_high_dens_iters 100 N_H: length of the high-densification part of each cycle; must be <= --alt_cycle_len. The rest of the cycle is the low-densification phase.

Depth regularization (edge-aware depth smoothness + depth-range loss, applied only during the low-densification phase)

Flag Default Meaning
--depth_smooth_weight 0.01 Weight of the combined depth regularization term.
--depth_range_weight 0.001 Weight (λ_r) of the depth-range loss inside that term.

Per-phase densification thresholds (gradient threshold τ_pos controls splitting/cloning, prune threshold ε_α controls pruning)

Flag Default Phase
--warmup_densify_grad_threshold / --warmup_prune_threshold 0.0005 / 0.005 Warm-up
--low_dens_grad_threshold / --low_dens_prune_threshold 0.0005 / 0.1 Low-densification (elevated prune threshold — aggressive pruning)
--high_dens_grad_threshold / --high_dens_prune_threshold 0.0002 / 0.005 High-densification (looser gradient threshold — more splitting/cloning)

Dual-field co-regularization (inherited from CoR-GS, gated to the low-densification phase in AD-GS)

Flag Default Meaning
--gaussiansN 1 Number of Gaussian fields to co-train (1 or 2). Use 2 to enable dual-field training.
--coreg off Enable pseudo-view photometric consistency loss between the two fields.
--coprune off Enable cross-field point-cloud consistency pruning.
--coprune_threshold 5 Distance threshold (Open3D registration) for a point to be considered consistent across fields.
--coprune_interval 500 Run co-pruning every N iterations.

--coreg is off by default in train.py itself, but the provided run scripts (demo.sh, run_llff_ad.sh, run_tanks_ad.sh, run_360_ad.sh) all pass it explicitly, so it's on in practice for the paper's reported results. --coprune stays off unless you add it yourself.

Run python train.py --help for the full list, including the underlying 3DGS/CoR-GS options (--onlyrgb, --sample_pseudo_interval, --start_sample_pseudo, --end_sample_pseudo, etc.). See also scripts/run_llff_ad.sh, scripts/run_tanks_ad.sh, and scripts/run_360_ad.sh — editable templates (one per dataset, alongside the original run_llff.sh/run_tanks.sh/run_360.sh) that expose all of these arguments as variables at the top of the script.

The previous (pre-refactor) version of this file, with the alternating-densification schedule and loss weights hardcoded rather than exposed as flags, is kept at train_old.py / README_old.md for reference.

Citation

Consider citing as below if you find this repository helpful to your project:

@inproceedings{Patle2025ADGS,
            author = {Patle, Gurutva and Girgaonkar, Nilay and Somraj, Nagabhushan and Soundararajan, Rajiv},
            title = {AD-GS: Alternating Densification for Sparse-Input 3D Gaussian Splatting},
            year = {2025},
            isbn = {9798400721373},
            publisher = {Association for Computing Machinery (ACM)},
            address = {New York, NY, USA},
            url = {https://doi.org/10.1145/3757377.3763993},
            doi = {10.1145/3757377.3763993},
            booktitle = {Proceedings of the SIGGRAPH Asia 2025 Conference Papers},
            articleno = {129},
            numpages = {11},
            keywords = {Rendering, novel view synthesis, sparse input 3D Gaussian splatting},
            series = {SA Conference Papers '25}
            }

Acknowledgement

This work was supported in part by the Kotak IISc AI–ML Centre (KIAC).

Special thanks to the following awesome projects!

About

AD-GS: Alternating Densification for Sparse-Input 3D Gaussian Splatting

Topics

Resources

Stars

35 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages