Skip to content

πŸͺœ [ARXIV 2025] Pytorch implementation of 'PCGS: Progressive Compression of 3D Gaussian Splatting'

License

Notifications You must be signed in to change notification settings

YihangChen-ee/PCGS

Repository files navigation

[ARXIV'25] PCGS

Official Pytorch implementation of PCGS: Progressive Compression of 3D Gaussian Splatting.

PCGS provides a progressive compression solution for on-demand applications.

It enables reuse of existing bitstreams for enhenced fidelity when dynamic bandwidth or diversion storage occurs.

Yihang Chen*, Mengyao Li*, Qianyi Wu, Weiyao Lin, Mehrtash Harandi, Jianfei Cai

[Arxiv] [Project] [Github]

Links

You are welcomed to check a series of works from our group on 3D radiance field representation compression as listed below:

Overview

We propose PCGS (Progressive Compression of 3D Gaussian Splatting), which adaptively controls both the quantity and quality of Gaussians (or anchors) to enable effective progressivity for on-demand applications. Specifically, for quantity, we introduce a progressive masking strategy that incrementally incorporates new anchors while refining existing ones to enhance fidelity. For quality, we propose a progressive quantization approach that gradually reduces quantization step sizes to achieve finer modeling of Gaussian attributes. Furthermore, to compact the incremental bitstreams, we leverage existing quantization results to refine probability prediction, improving entropy coding efficiency across progressive levels.

Performance

Diamond markers $\diamondsuit$ represent progressive compression methods, while circle markers $\circ$ denote traditional single-rate compression methods.

Installation

The installation process follows that of HAC++.

We tested our code on a server with Ubuntu 20.04.1, cuda 11.8, gcc 9.4.0.

  1. Unzip files
cd submodules
unzip diff-gaussian-rasterization.zip
unzip gridencoder.zip
unzip simple-knn.zip
unzip arithmetic.zip
cd ..
  1. Install environment
conda env create --file environment.yml
conda activate HAC_env
  1. Install tmc3 (for GPCC)
  • Please refer to tmc3 github for installation.
  • Don't forget to add tmc3 to your environment variable, otherwise you must manually specify its location in our code.
  • Tips: tmc3 is commonly located at /PATH/TO/mpeg-pcc-tmc13/build/tmc3.

Data

First, create a data/ folder inside the project path by

mkdir data

The data structure will be organised as follows:

data/
β”œβ”€β”€ dataset_name
β”‚Β Β  β”œβ”€β”€ scene1/
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ images
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ IMG_0.jpg
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ IMG_1.jpg
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ...
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ sparse/
β”‚Β Β  β”‚Β Β      └──0/
β”‚Β Β  β”œβ”€β”€ scene2/
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ images
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ IMG_0.jpg
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ IMG_1.jpg
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ...
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ sparse/
β”‚Β Β  β”‚Β Β      └──0/
...
  • For instance: ./data/blending/drjohnson/
  • For instance: ./data/bungeenerf/amsterdam/
  • For instance: ./data/mipnerf360/bicycle/
  • For instance: ./data/nerf_synthetic/chair/
  • For instance: ./data/tandt/train/

Public Data (We follow suggestions from Scaffold-GS)

  • The BungeeNeRF dataset is available in Google Drive/η™ΎεΊ¦η½‘η›˜[提取码:4whv].
  • The MipNeRF360 scenes are provided by the paper author here. And we test on its entire 9 scenes bicycle, bonsai, counter, garden, kitchen, room, stump, flowers, treehill.
  • The SfM datasets for Tanks&Temples and Deep Blending are hosted by 3D-Gaussian-Splatting here. Download and uncompress them into the data/ folder.

Custom Data

For custom data, you should process the image sequences with Colmap to obtain the SfM points and camera poses. Then, place the results into data/ folder.

Training

To train scenes, we provide the following training scripts:

  • Tanks&Temples: run_shell_tnt.py
  • MipNeRF360: run_shell_mip360.py
  • BungeeNeRF: run_shell_bungee.py
  • Deep Blending: run_shell_db.py
  • Nerf Synthetic: run_shell_blender.py

run them with

python run_shell_xxx.py

The code will automatically run the entire process of: training, encoding, decoding, testing.

  • Multiple rate points will be run in one training process.
  • Training log will be recorded in output.log of the output directory. Results of detailed fidelity, detailed size, detailed time across different rate points will all be recorded.
  • Encoded bitstreams will be stored in ./bitstreams of the output directory.
  • After encoding, the script will automatically decode the bitstreams into multiple models across progressive levels and store them into the folder ./decoded_model.
  • Evaluated output images will be saved in ./test_ss{lambda_idx} of the output directory.

Contact

Citation

If you find our work helpful, please consider citing:

@article{pcgs2025,
  title={PCGS: Progressive Compression of 3D Gaussian Splatting},
  author={Chen, Yihang and Li, Mengyao and Wu, Qianyi and Lin, Weiyao and Harandi, Mehrtash and Cai, Jianfei},
  journal={arXiv preprint arXiv:2503.08511},
  year={2025}
}

LICENSE

Please follow the LICENSE of 3D-GS.

Acknowledgement

  • We thank all authors from 3D-GS for presenting such an excellent work.
  • We thank all authors from Scaffold-GS for presenting such an excellent work.
  • We thank Xiangrui's help on GPCC codec.

About

πŸͺœ [ARXIV 2025] Pytorch implementation of 'PCGS: Progressive Compression of 3D Gaussian Splatting'

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages