Image-to-Image
GaussianFormer
Safetensors
3d-gaussian-splatting
neural-rendering
novel-view-synthesis
transformer
pytorch_model_hub_mixin
model_hub_mixin
Instructions to use shahafvl/gaussianformer-v21 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- GaussianFormer
How to use shahafvl/gaussianformer-v21 with GaussianFormer:
# pip install "gaussianformer @ git+https://github.com/SVLwoof/gaussianformer" from gaussianformer import GaussianFormerRenderingPipeline, load_ply pipeline = GaussianFormerRenderingPipeline.from_pretrained("shahafvl/gaussianformer-v21").to("cuda") gaussians = load_ply("object.ply") # 3D Gaussian Splatting PLY -> [N, 14] - Notebooks
- Google Colab
- Kaggle
File size: 6,805 Bytes
b001c45 cba8639 b001c45 cba8639 b001c45 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | ---
license: mit
library_name: gaussianformer
tags:
- 3d-gaussian-splatting
- neural-rendering
- novel-view-synthesis
- transformer
- pytorch_model_hub_mixin
- model_hub_mixin
- gaussianformer
pipeline_tag: image-to-image
datasets:
- ShapeSplats/Objaverse_Splats
base_model:
- microsoft/renderformer-v1-base
---
# GaussianFormer V21
GaussianFormer renders 3D Gaussian Splatting scenes with a transformer, without per-scene optimization and with no
rasterizer in the renderer. It adapts [RenderFormer](https://huggingface.co/microsoft/renderformer-v1-base) (SIGGRAPH
2025), a transformer renderer for triangle meshes: each Gaussian's 14 parameters `[pos(3), scale(3), quat(4), rgb(3),
opacity(1)]` become one scene token, and the two-stage architecture (view-independent scene encoder, view-dependent
ray decoder with a DPT head) is kept and warm-started from RenderFormer's weights.
**Paper:** [arXiv:2611.05593](https://arxiv.org/abs/2611.05593) · **Project page:** [svlwoof.github.io/gaussianrenderformer](https://svlwoof.github.io/gaussianrenderformer/) · **Code:** [github.com/SVLwoof/gaussianformer](https://github.com/SVLwoof/gaussianformer)
## How to use
Install the [code](https://github.com/SVLwoof/gaussianformer) with [uv](https://docs.astral.sh/uv/) (Linux, NVIDIA GPU,
Python 3.12); this also brings PyTorch for CUDA 12.8. Flash Attention is optional and recommended for speed: the
`flash` extra adds a prebuilt wheel, and without it the model uses PyTorch's scaled-dot-product attention.
```bash
uv add "gaussianformer @ git+https://github.com/SVLwoof/gaussianformer" # or: uv pip install "..."
uv add "gaussianformer[flash] @ git+https://github.com/SVLwoof/gaussianformer" # with Flash Attention
```
Then, from a 3D Gaussian Splatting PLY:
```python
import torch
from gaussianformer import GaussianFormerRenderingPipeline, load_ply
from gaussianformer.utils.cameras import orbit
pipeline = GaussianFormerRenderingPipeline.from_pretrained("shahafvl/gaussianformer-v21").to("cuda")
gaussians = load_ply("object.ply", up="z") # [N, 14]; up = the file's up axis
c2w = torch.from_numpy(orbit(8, 1.7)) # [V, 4, 4] camera-to-world (-Z forward, +Y up)
images = pipeline(gaussians, c2w, fov=45.0) # [V, 512, 512, 3]
```
The model takes each Gaussian as 14 activated values, pos(3) | scale(3) | quat wxyz(4) | rgb(3) | opacity(1): linear
scales, a unit quaternion, colors and opacity in [0, 1], for an object centered, Y-up and scaled into [-0.45, 0.45]^3,
about 20k Gaussians. A PLY stores log scales, raw quaternions, spherical-harmonic coefficients and opacity logits;
`load_ply` converts them, normalizes the object, prunes it to 20k Gaussians and fine-tunes the kept ones
against the full splat (about a minute on a GPU).
From the command line, in a clone of the repository (`uv sync`):
```bash
uv run python -m tools.ply_to_h5 --ply object.ply --out object.h5 --up z
uv run python infer.py --model shahafvl/gaussianformer-v21 --h5 object.h5 --out renders/ # one PNG per camera
```
This is the final recipe without the projected footprint: dense cross-attention, the projected 2-D RoPE and 4 px
patches, trained exactly like [shahafvl/gaussianformer](https://huggingface.co/shahafvl/gaussianformer) (V22), which
adds the footprint and is the recommended model. It is published for comparison.
## Results
300 objects held out from training and never used while developing the model, PSNR on the square crop around the
object against the full-splat ground truth, over all 28 training views and over 4 of them (views 0, 4, 7 and 11 at
camera distance 1.7):
| | 28 views | 4 views | SSIM | LPIPS |
|---|---|---|---|---|
| gsplat rasterization of the same 20k-Gaussian input | 44.02 | 44.97 | 0.9954 | 0.0046 |
| GaussianFormer V21 (this model) | 36.67 | 36.87 | 0.9779 | 0.0140 |
| GaussianFormer V22 (with the footprint) | 38.08 | 38.36 | 0.9814 | 0.0113 |
On 300 training objects, at their 28 training views, V21 scores 36.86 dB.
## Training
- **Data:** all 26,820 training objects of
[Objaverse_Splats](https://huggingface.co/datasets/ShapeSplats/Objaverse_Splats), each pruned
from ~50k to 20k Gaussians (LightGaussian importance score, then a short recovery fine-tune of the kept Gaussians).
Targets are gsplat renders of the full, unpruned splat at 512 px: 28 views per object at camera distances 1.15,
1.7 and 2.45.
- **Schedule:** initialized from RenderFormer's weights and trained at 256 px (the published checkpoint
[gaussianformer-256px](https://huggingface.co/shahafvl/gaussianformer-256px)), then the projected 2-D RoPE and 4 px patches switched on in a short
256 px stage, then 385k steps at 512 px on 8 GPUs (one view per GPU per step; 4 passes over every view): a
warmup-stable-decay learning rate at 5e-5, with a cosine decay to 5e-7 over the last 10k steps.
- **Loss:** log-HDR L1 (background pixels weighted 0.05) and LPIPS-VGG, 0.5 each.
- `scripts/train.sh` in the code repository runs all stages.
## Limitations
- Trained on isolated single objects centered in [-0.45, 0.45]^3, with a 45° field of view, 512x512 pixels and
camera distances 1.15 to 2.45; other resolutions, fields of view and distances cost quality. Real captures work
only as regions cut out of a scene and viewed from outside.
- Inputs of about 20k Gaussians: denser inputs lower its quality, while they raise a rasterizer's, and the scene
encoder's attention is quadratic in the number of Gaussians.
- Colors are view-independent (only the DC color of each Gaussian is used).
- Fine detail (thin strokes, engravings, small text) is softer than rasterizing the same splat, and the model is
much slower than a rasterizer (about 0.3 s for one 512 px view of 20k Gaussians on an L40S).
## License
MIT, for the weights as for the code. The model is trained on
[Objaverse_Splats](https://huggingface.co/datasets/ShapeSplats/Objaverse_Splats), splats fit to
[Objaverse](https://objaverse.allenai.org/) objects, each of which keeps its creator's license.
## Citation
The paper ([arXiv:2611.05593](https://arxiv.org/abs/2611.05593)) calls the model GaussianRenderFormer:
```bibtex
@article{valencialevy2026gaussianrenderformer,
title = {GaussianRenderFormer: Transformer-based Rendering of 3D Gaussian Splats},
author = {Valencia Levy, Shahaf and Benaim, Sagie},
journal = {arXiv preprint arXiv:2611.05593},
year = {2026}
}
```
GaussianFormer builds on RenderFormer; please also cite:
```bibtex
@inproceedings{zeng2025renderformer,
title = {RenderFormer: Transformer-based Neural Rendering of Triangle Meshes with Global Illumination},
author = {Chong Zeng and Yue Dong and Pieter Peers and Hongzhi Wu and Xin Tong},
booktitle = {ACM SIGGRAPH 2025 Conference Papers},
year = {2025}
}
```
|