Skip to content

mlvlab/F4Splat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

F4Splat: Feed-Forward Predictive Densification for Feed-Forward 3D Gaussian Splatting

ECCV 2026

Project Page arXiv Paper

πŸ”§ Installation

The project is tested with Python 3.11 and CUDA 12.8 builds of PyTorch.

conda create -y -n f4splat python=3.11
conda activate f4splat

pip install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu128
pip install --no-build-isolation -r requirements.txt

If you use a different CUDA version, install the matching PyTorch wheels first, then install the remaining requirements.

πŸ“¦ Pre-trained Checkpoints

We provide all Hugging Face Hub-format weights in one model repository.

Checkpoint Dataset Context views Subfolder
F4Splat ACID 2-view ACID 2 acid-2view
F4Splat RE10K 2-view RealEstate10K 2 re10k-2view
F4Splat RE10K+DL3DV 2-view RealEstate10K + DL3DV 2 re10k-dl3dv-2view
F4Splat RE10K 24-view RealEstate10K 24 re10k-24view

Download one checkpoint:

huggingface-cli download Knowing/F4Splat \
    --repo-type model \
    --include "re10k-2view/*" \
    --local-dir hub/f4splat

Download the RE10K+DL3DV 2-view checkpoint:

huggingface-cli download Knowing/F4Splat \
    --repo-type model \
    --include "re10k-dl3dv-2view/*" \
    --local-dir hub/f4splat

Or download all released checkpoints:

huggingface-cli download Knowing/F4Splat \
    --repo-type model \
    --local-dir hub/f4splat

Load a downloaded checkpoint with PyTorchModelHubMixin:

from src.model.f4splat_hub import F4SplatHubModel

model = F4SplatHubModel.from_pretrained("hub/f4splat/re10k-2view")
model = model.eval().cuda()

To load directly from Hugging Face, first snapshot the target subfolder:

from pathlib import Path
from huggingface_hub import snapshot_download
from src.model.f4splat_hub import F4SplatHubModel

local_dir = snapshot_download(
    repo_id="Knowing/F4Splat",
    repo_type="model",
    allow_patterns=["re10k-dl3dv-2view/**"],
)
model = F4SplatHubModel.from_pretrained(str(Path(local_dir) / "re10k-dl3dv-2view"))
model = model.eval().cuda()

πŸš€ Demo

Run the local CUDA demo with the default RE10K+DL3DV 2-view Hub-format weight:

python demo/app.py

Or set the Hub-format weight explicitly:

F4SPLAT_MODEL_ID=Knowing/F4Splat F4SPLAT_MODEL_SUBFOLDER=re10k-dl3dv-2view python demo/app.py

To use a downloaded Hub-format folder:

F4SPLAT_MODEL_PATH=hub/f4splat F4SPLAT_MODEL_SUBFOLDER=re10k-dl3dv-2view python demo/app.py

The demo can also load a local raw Lightning .ckpt or tensor-only .safetensors file for development:

F4SPLAT_MODEL_PATH=/path/to/checkpoint.ckpt python demo/app.py

The demo accepts 2-16 uploaded images, shows the preprocessed model inputs, reports the available Gaussian budget range, and renders interpolation-only videos for user-editable Gaussian budget counts. The default budgets correspond to ratios 0.2, 0.4, 0.6, and 0.8. The video length is derived from the number of uploaded views, using 24 frames per input interval and up to 192 frames by default. Override this with F4SPLAT_DEMO_FRAMES_PER_INPUT_INTERVAL and F4SPLAT_DEMO_MAX_VIDEO_FRAMES if needed. Each video column is labeled by the actual Gaussian count in thousands and stacks the red Gaussian-location overlay below the novel-view render.

πŸ—‚οΈ Data Preparation

F4Splat uses a preprocessed PyTorch chunk format similar to the layouts used by prior feed-forward NVS pipelines. Each split should contain chunk files and an index.json. Place datasets under datasets/ by default:

datasets/
β”œβ”€β”€ re10k/
β”‚   β”œβ”€β”€ train/
β”‚   β”‚   β”œβ”€β”€ 000000.torch
β”‚   β”‚   β”œβ”€β”€ ...
β”‚   β”‚   └── index.json
β”‚   └── test/
β”‚       β”œβ”€β”€ 000000.torch
β”‚       β”œβ”€β”€ ...
β”‚       └── index.json
β”œβ”€β”€ dl3dv/
β”‚   β”œβ”€β”€ train/
β”‚   β”‚   β”œβ”€β”€ 000000.torch
β”‚   β”‚   β”œβ”€β”€ ...
β”‚   β”‚   └── index.json
β”‚   └── test/
β”‚       β”œβ”€β”€ 000000.torch
β”‚       β”œβ”€β”€ ...
β”‚       └── index.json
└── acid/
    β”œβ”€β”€ train/
    β”‚   β”œβ”€β”€ 000000.torch
    β”‚   β”œβ”€β”€ ...
    β”‚   └── index.json
    └── test/
        β”œβ”€β”€ 000000.torch
        β”œβ”€β”€ ...
        └── index.json

The main experiment configs are:

Experiment Config Default Dataset Root
RealEstate10K 2-view +experiment=re10k_2view datasets/re10k
RealEstate10K 24-view +experiment=re10k_24view datasets/re10k
RealEstate10K + DL3DV 2-view +experiment=re10k_dl3dv_2view datasets/re10k, datasets/dl3dv
ACID 2-view +experiment=acid_2view datasets/acid

Dataset roots can be overridden from the command line:

python -m src.main +experiment=re10k_2view \
    dataset.re10k.roots='[/path/to/re10k]'

References

Detailed upstream preparation notes are available in NoPoSplat's dataset guide. Please also follow the original dataset licenses and access instructions for RealEstate10K, DL3DV, and ACID.

πŸ‹οΈ Training

Use the provided scripts with a GPU id:

bash scripts/train/train_re10k_full_2view.sh 0
bash scripts/train/train_re10k_full_24view.sh 0
bash scripts/train/train_acid_full_2view.sh 0
bash scripts/train/train_re10k_dl3dv_full_2view.sh 0

Or call Hydra directly:

CUDA_VISIBLE_DEVICES=0 python -m src.main \
    +experiment=re10k_2view \
    wandb.mode=online \
    wandb.name=RE10k_FULL_2view

To disable Weights & Biases logging:

CUDA_VISIBLE_DEVICES=0 python -m src.main \
    +experiment=re10k_2view \
    wandb.mode=disabled

Checkpoints and logs are written under outputs/ according to each experiment's Hydra run directory.

πŸ“Š Evaluation

Run test-time NVS evaluation with a checkpoint. The evaluation scripts take the GPU id and checkpoint path as required arguments and write outputs under eval_results/ by default.

Script Checkpoint Default output
scripts/eval/re10k_2view.sh RE10K 2-view checkpoint eval_results/re10k_2view
scripts/eval/acid_2view.sh ACID 2-view checkpoint eval_results/acid_2view
scripts/eval/re10k_Nview.sh RE10K 24-view checkpoint eval_results/re10k_24view/{8,16,24}view
bash scripts/eval/re10k_2view.sh 0 /path/to/checkpoint.ckpt
bash scripts/eval/acid_2view.sh 0 /path/to/checkpoint.ckpt
bash scripts/eval/re10k_Nview.sh 0 /path/to/re10k_24view_checkpoint.ckpt "8 16 24"

You can override the output path as the last argument:

bash scripts/eval/re10k_2view.sh 0 /path/to/checkpoint.ckpt eval_results/custom_re10k
bash scripts/eval/re10k_Nview.sh 0 /path/to/checkpoint.ckpt "8 16" eval_results/custom_re10k_24view

Available RealEstate10K evaluation indices include:

assets/evaluation_index_re10k.json
assets/evaluation_index_re10k_ctx_8.json
assets/evaluation_index_re10k_ctx_16.json
assets/evaluation_index_re10k_ctx_24.json

πŸ“š Citation

If you find our work helpful, please consider citing:

@misc{kim2026f4splat,
  title         = {F4Splat: Feed-Forward Predictive Densification for Feed-Forward 3D Gaussian Splatting},
  author        = {Kim, Injae and Kim, Chaehyeon and Bae, Minseong and Joo, Minseok and Kim, Hyunwoo J.},
  year          = {2026},
  eprint        = {2603.21304},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CV},
  url           = {https://arxiv.org/abs/2603.21304}
}

πŸ™ Acknowledgement

We thank the authors of VGGT, NoPoSplat, AnySplat, and gsplat for their excellent work and open-source contributions.

About

Official Implementation of "F4Splat: Feed-Forward Predictive Densification for Feed-Forward 3D Gaussian Splatting", ECCV 2026

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors