Jongmin Park1*
·
Minh-Quan Viet Bui1*
·
Juan Luis Gonzalez Bello1
·
Jaeho Moon1
·
Jihyong Oh2†
·
Munchurl Kim1†
1KAIST, South Korea, 2Chung-Ang University, South Korea
*Co-first authors (equal contribution), †Co-corresponding authors
Paper | Project Page | Code | Models
This branch holds the training and inference code for EcoSplat on the SPFSplat base (pose-free, sparse-view feed-forward 3DGS). EcoSplat is also released on a ZPressor base for scalable many-view input — see the eco_zpressor branch.
EcoSplat's efficiency control is implemented as a reusable, base-agnostic package, ecosplat_wrapper/ (the IGF training strategy), vendored into this branch. To understand the mechanism or apply it to another base model, read ecosplat_wrapper/README.md; for the exact changes we made to SPFSplat (forward + training), see INTEGRATION.md.
EcoSplat base variants — pick the branch for your setup:
- SPFSplat — this branch (
eco_spfsplat): pose-free.- ZPressor —
eco_zpressor: both inter-view and intra-view compression (MVSplat baseline + IGF).
- Installation
- Datasets
- Pre-trained Checkpoints
- Training
- Evaluation
- Camera Conventions
- Acknowledgements
- Citation
This branch is a fork of SPFSplat — set up its environment first (conda env, dependencies, and the optional CroCo RoPE CUDA kernels) following SPFSplat's installation. Then install the EcoSplat efficiency-control package (IGF) into that environment:
pip install -e ecosplat_wrapperPlease refer to DATASETS.md for dataset preparation.
The EcoSplat (IGF) checkpoint is on Hugging Face 🤗 — ecosplat-spfsplat-re10k.ckpt. Download it into pretrained_weights/:
wget -P pretrained_weights https://huggingface.co/quan5609/EcoSplat/resolve/main/ecosplat-spfsplat-re10k.ckptEcoSplat training starts from a stage-1 SPFSplat checkpoint — download one from the SPFSplat model zoo (e.g. re10k.ckpt, re10k_10view.ckpt).
EcoSplat's IGF training finetunes a converged stage-1 base checkpoint (a standard SPFSplat model — see Pre-trained Checkpoints). IGF is controlled by the model.encoder.igf config (an empty {} uses the paper defaults from IGFConfig: loss_weight=0.1, io_weight=0.1, PLGC 0.85→0.95); the provided spfsplat/re10k_10view experiment already sets igf: {}.
python -m src.main +experiment=spfsplat/re10k_10view \
checkpointing.load=pretrained_weights/re10k_10view.ckpt checkpointing.resume=false \
wandb.mode=online wandb.name=re10k_igfbash train.sh wraps the multi-GPU launch used for the released model (set CKPT to your stage-1 checkpoint). Tune the strategy via model.encoder.igf fields, e.g. model.encoder.igf.io_weight=0.2.
Evaluate novel-view synthesis at a chosen primitive budget — the protect rate κ (inference_rho); lower κ → fewer rendered Gaussians. The bundled launchers eval_igf_rho{0p7,0p4,0p1,0p02}.sh sweep the budget — edit the checkpoint / index paths inside them, then run e.g. bash eval_igf_rho0p4.sh.
The underlying command:
python -m src.main +experiment=spfsplat/re10k_10view mode=test wandb.name=re10k_igf \
dataset/view_sampler@dataset.re10k.view_sampler=evaluation \
dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json \
checkpointing.load=pretrained_weights/ecosplat-spfsplat-re10k.ckpt \
+model.encoder.igf.inference_rho=0.4 \
test.compute_scores=true test.align_pose=trueSweep inference_rho (0.7 → 0.4 → 0.1 → 0.02, default 0.4) to trade primitive count against quality. The published inference release exposes a related knob, model.encoder.primitive_ratio, on its dedicated encoder_ecosplat — it re-allocates the budget per view by high-frequency content, whereas this wrapper applies a single uniform rate.
We follow the pixelSplat camera system: normalized intrinsics (first row ÷ width, second row ÷ height), and OpenCV-style camera-to-world extrinsics (+X right, +Y down, +Z into the screen).
This project is built upon these excellent repositories: SPFSplat, NoPoSplat, pixelSplat, DUSt3R, and CroCo. We thank the original authors for their excellent work.
If you find EcoSplat useful, please cite:
@inproceedings{park2025ecosplat,
title={EcoSplat: Efficiency-controllable Feed-forward 3D Gaussian Splatting from Multi-view Images},
author={Jongmin Park and Minh-Quan Viet Bui and Juan Luis Gonzalez Bello and Jaeho Moon and Jihyong Oh and Munchurl Kim},
year = {2026},
booktitle={CVPR},
}Please also consider citing the SPFSplat base:
@article{huang2025spfsplat,
title={No Pose at All: Self-Supervised Pose-Free 3D Gaussian Splatting from Sparse Views},
author={Huang, Ranran and Mikolajczyk, Krystian},
journal={arXiv preprint arXiv: 2508.01171},
year={2025}
}