Upload via Autoresearch export_data
Browse files
experiments/fourier-splatting/README.md
CHANGED
|
@@ -11,15 +11,105 @@ tags:
|
|
| 11 |
- research
|
| 12 |
---
|
| 13 |
|
| 14 |
-
# Polymorphic:
|
| 15 |
|
| 16 |
-
|
| 17 |
|
| 18 |
-
|
| 19 |
|
| 20 |
-
|
| 21 |
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
| Scene | Method | PSNR | SSIM | VGG LPIPS | Primitives |
|
| 25 |
|---|---|---:|---:|---:|---:|
|
|
@@ -28,43 +118,24 @@ PSNR and SSIM are higher-is-better; VGG LPIPS is lower-is-better. Baseline and F
|
|
| 28 |
| Kitchen | AnySplat | 21.6155 | 0.6660 | 0.2678 | 1,983,229 |
|
| 29 |
| Kitchen | Fourier K=6 | 25.3078 | 0.8212 | 0.2586 | 120,000 |
|
| 30 |
|
| 31 |
-
- Apartment: +1.22 dB PSNR
|
| 32 |
-
- Kitchen: +3.69 dB PSNR, +0.1552 SSIM
|
| 33 |
-
- Primitive
|
| 34 |
-
|
| 35 |
-
## LOD exports
|
| 36 |
-
|
| 37 |
-
Each scene includes K=1–6 PLY files. Higher K generally improves perceptual quality while increasing file size; K=5 is a possible size/quality compromise, while K=6 had the best LPIPS on both scenes.
|
| 38 |
-
|
| 39 |
-
| Scene | K | PLY MB | PSNR | SSIM | VGG LPIPS |
|
| 40 |
-
|---|---:|---:|---:|---:|---:|
|
| 41 |
-
| Apartment | 1 | 25.071 | 19.9081 | 0.7048 | 0.3831 |
|
| 42 |
-
| Apartment | 2 | 25.867 | 20.0612 | 0.7056 | 0.3802 |
|
| 43 |
-
| Apartment | 3 | 26.663 | 20.3420 | 0.7078 | 0.3551 |
|
| 44 |
-
| Apartment | 4 | 27.459 | 20.3825 | 0.7071 | 0.3374 |
|
| 45 |
-
| Apartment | 5 | 28.255 | 20.3771 | 0.7056 | 0.3236 |
|
| 46 |
-
| Apartment | 6 | 29.051 | 20.3469 | 0.7041 | 0.3173 |
|
| 47 |
-
| Kitchen | 1 | 30.242 | 21.9698 | 0.7638 | 0.3696 |
|
| 48 |
-
| Kitchen | 2 | 31.202 | 23.3089 | 0.7772 | 0.3599 |
|
| 49 |
-
| Kitchen | 3 | 32.162 | 24.3752 | 0.8006 | 0.3186 |
|
| 50 |
-
| Kitchen | 4 | 33.122 | 24.9584 | 0.8137 | 0.2889 |
|
| 51 |
-
| Kitchen | 5 | 34.082 | 25.1819 | 0.8190 | 0.2696 |
|
| 52 |
-
| Kitchen | 6 | 35.042 | 25.3078 | 0.8212 | 0.2586 |
|
| 53 |
|
| 54 |
-
##
|
| 55 |
|
| 56 |
-
|
| 57 |
|
| 58 |
-
##
|
| 59 |
|
| 60 |
-
-
|
| 61 |
-
-
|
| 62 |
-
-
|
| 63 |
-
-
|
| 64 |
-
-
|
| 65 |
|
| 66 |
-
## Limitations and
|
| 67 |
|
| 68 |
-
Only two indoor scenes were evaluated;
|
| 69 |
|
| 70 |
-
AnySplat and Fourier Splatting have separate upstream license terms. Fourier Splatting
|
|
|
|
| 11 |
- research
|
| 12 |
---
|
| 13 |
|
| 14 |
+
# Polymorphic: AnySplat + Fourier Splatting
|
| 15 |
|
| 16 |
+
An experimental video-to-3D reconstruction pipeline. AnySplat estimates scene geometry and camera poses from video frames; Fourier Splatting then optimizes a compact, scene-specific representation that can be rendered from novel viewpoints.
|
| 17 |
|
| 18 |
+
This repository contains two example reconstructions, checkpoints, level-of-detail (LOD) PLY exports, scripts, and benchmark results.
|
| 19 |
|
| 20 |
+
**Important:** This is not a one-pass model that instantly turns any video into a finished 3D asset. Each new scene requires optimization. The output is a renderable Gaussian/surfel-style scene representation—not automatically a watertight mesh or a game-ready GLB.
|
| 21 |
|
| 22 |
+
## Quick start: inspect a released 3D scene
|
| 23 |
+
|
| 24 |
+
Download a PLY file and open it in a viewer that supports Gaussian-splatting PLY files.
|
| 25 |
+
|
| 26 |
+
- Apartment, highest tested Fourier detail: [fourier_k6.ply](models/apartment/lod/fourier_k6.ply)
|
| 27 |
+
- Kitchen, highest tested Fourier detail: [fourier_k6.ply](models/kitchen/lod/fourier_k6.ply)
|
| 28 |
+
- K=1 through K=6 variants trade file size against visual fidelity. K=5 is a reasonable size/quality compromise; K=6 had the best VGG LPIPS on both scenes.
|
| 29 |
+
|
| 30 |
+
The checkpoints are scene-specific optimization states, not general video encoders.
|
| 31 |
+
|
| 32 |
+
## Reconstruct a new video
|
| 33 |
+
|
| 34 |
+
### 1. Hardware and dependencies
|
| 35 |
+
|
| 36 |
+
The experiment used an NVIDIA H100 80 GB GPU, PyTorch with CUDA 12.9, and 448×448 images. Other GPUs may work but have not been validated. Install a PyTorch/CUDA combination compatible with your GPU and the CUDA compiler used to build the rasterizer.
|
| 37 |
+
|
| 38 |
+
From a local clone/download of this repository, create an environment and install dependencies:
|
| 39 |
+
|
| 40 |
+
~~~bash
|
| 41 |
+
python -m venv .venv
|
| 42 |
+
source .venv/bin/activate
|
| 43 |
+
python -m pip install --upgrade pip
|
| 44 |
+
# First install a PyTorch build compatible with your CUDA driver/toolkit.
|
| 45 |
+
pip install -r src/AnySplat/requirements.txt
|
| 46 |
+
pip install plyfile pillow numpy
|
| 47 |
+
cd src/FourierSplatting
|
| 48 |
+
bash compile.sh
|
| 49 |
+
cd ../..
|
| 50 |
+
~~~
|
| 51 |
+
|
| 52 |
+
The two upstream projects may require different dependency versions. If the combined environment fails, follow each upstream README to resolve versions. AnySplat model loading also requires network access and may be subject to upstream model access terms.
|
| 53 |
+
|
| 54 |
+
### 2. Extract video frames
|
| 55 |
+
|
| 56 |
+
Use a camera path that covers the scene from multiple viewpoints. Avoid large gaps, motion blur, and moving objects when possible.
|
| 57 |
+
|
| 58 |
+
~~~bash
|
| 59 |
+
mkdir -p /tmp/my_video_frames
|
| 60 |
+
ffmpeg -i input.mp4 -vf "fps=2" /tmp/my_video_frames/%04d.jpg
|
| 61 |
+
~~~
|
| 62 |
+
|
| 63 |
+
The preparation script requires at least 8 JPEG frames and an even total number of frames. Adjust the sampling rate or remove frames to meet this condition. It loads all selected frames into GPU memory, so start with a short clip.
|
| 64 |
+
|
| 65 |
+
### 3. Initialize geometry with AnySplat
|
| 66 |
+
|
| 67 |
+
From the repository root:
|
| 68 |
+
|
| 69 |
+
~~~bash
|
| 70 |
+
python scripts/make_fourier_scene_generic.py \
|
| 71 |
+
/tmp/my_video_frames \
|
| 72 |
+
/tmp/my_fourier_scene
|
| 73 |
+
~~~
|
| 74 |
+
|
| 75 |
+
This creates resized images, train/test camera transforms, and an AnySplat-derived seed point cloud. Alternating frames are used as context and held-out targets. The released preparation script resolves the checkout root relative to its own location and imports AnySplat from src/AnySplat, so it does not require the original experiment workspace path.
|
| 76 |
+
|
| 77 |
+
### 4. Optimize the scene with Fourier Splatting
|
| 78 |
+
|
| 79 |
+
The following is the training configuration used for the experiment. Run it from the repository root after compiling the CUDA rasterizer:
|
| 80 |
+
|
| 81 |
+
~~~bash
|
| 82 |
+
python src/FourierSplatting/train.py \
|
| 83 |
+
--source_path /tmp/my_fourier_scene \
|
| 84 |
+
--model_path /tmp/my_fourier_output \
|
| 85 |
+
--eval \
|
| 86 |
+
--iterations 6000 \
|
| 87 |
+
--test_iterations 3000 4500 6000 \
|
| 88 |
+
--save_iterations 3000 4500 6000 \
|
| 89 |
+
--checkpoint_iterations 3000 4500 6000 \
|
| 90 |
+
--densify_until_iter 0 \
|
| 91 |
+
--densification_interval 100000 \
|
| 92 |
+
--fourier_K 6 \
|
| 93 |
+
--fourier_freq_schedule 300,600,900,1200,1500 \
|
| 94 |
+
--no_dome \
|
| 95 |
+
--resolution 448
|
| 96 |
+
~~~
|
| 97 |
+
|
| 98 |
+
This is per-scene optimization and may take substantial time. The 6,000-iteration setting is the tested configuration, not a guarantee of quality on arbitrary videos. If the entry point cannot find its modules from the repository root, change into src/FourierSplatting and use train.py with the same arguments.
|
| 99 |
+
|
| 100 |
+
### 5. Render and export
|
| 101 |
+
|
| 102 |
+
Render the optimized scene from its saved cameras:
|
| 103 |
+
|
| 104 |
+
~~~bash
|
| 105 |
+
python src/FourierSplatting/render.py -m /tmp/my_fourier_output
|
| 106 |
+
~~~
|
| 107 |
+
|
| 108 |
+
The scripts in scripts/ and the upstream export_lod_ply.py implement the experiment's K=1–6 export and evaluation workflow. Inspect their argument definitions before adapting them to a new output directory. PLY exports are for compatible splat renderers. Mesh or GLB conversion is a separate step and is not a validated part of this release.
|
| 109 |
+
|
| 110 |
+
## Results
|
| 111 |
+
|
| 112 |
+
Held-out novel-view synthesis. PSNR and SSIM are higher-is-better; VGG LPIPS is lower-is-better. Baseline and Fourier results use the same VGG LPIPS evaluation implementation.
|
| 113 |
|
| 114 |
| Scene | Method | PSNR | SSIM | VGG LPIPS | Primitives |
|
| 115 |
|---|---|---:|---:|---:|---:|
|
|
|
|
| 118 |
| Kitchen | AnySplat | 21.6155 | 0.6660 | 0.2678 | 1,983,229 |
|
| 119 |
| Kitchen | Fourier K=6 | 25.3078 | 0.8212 | 0.2586 | 120,000 |
|
| 120 |
|
| 121 |
+
- Apartment: +1.22 dB PSNR and +0.0429 SSIM; LPIPS worsened slightly by 0.0019.
|
| 122 |
+
- Kitchen: +3.69 dB PSNR, +0.1552 SSIM and LPIPS improved by 0.0092.
|
| 123 |
+
- Primitive count fell by about 18.7× (apartment) and 16.5× (kitchen). This does not imply the same reduction in serialized file size; baseline AnySplat PLY size was not measured.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
|
| 125 |
+
## Evaluation protocol
|
| 126 |
|
| 127 |
+
Apartment: 24 frames (12 context, 12 held-out targets). Kitchen: 32 frames (16 context, 16 held-out targets). Images were center-cropped and resized to 448×448. Context-only AnySplat inference initialized the Fourier scene. All-frame inference was used only for target camera poses and alignment into the context coordinate frame; held-out target pixels were not used for scene initialization or Fourier training. Fourier frequencies were activated in stages at iterations 300, 600, 900, 1,200, and 1,500.
|
| 128 |
|
| 129 |
+
## Repository layout
|
| 130 |
|
| 131 |
+
- models/apartment/ and models/kitchen/: scene-specific checkpoints, metrics, and K=1–6 PLY files.
|
| 132 |
+
- scripts/: scene preparation, evaluation, and LOD export scripts.
|
| 133 |
+
- FOURIER_SPLATTING_REPORT.md: full experimental report.
|
| 134 |
+
- fourier_results.json: machine-readable metrics.
|
| 135 |
+
- THIRD_PARTY_NOTICES.md and licenses/: upstream license information.
|
| 136 |
|
| 137 |
+
## Limitations and licensing
|
| 138 |
|
| 139 |
+
Only two indoor scenes were evaluated; these results do not establish generalization or state-of-the-art performance. Quality depends on frame coverage, camera motion, scene dynamics, and AnySplat initialization. The apartment LPIPS metric regressed slightly despite higher PSNR and SSIM.
|
| 140 |
|
| 141 |
+
AnySplat and Fourier Splatting have separate upstream license terms. The included Fourier Splatting license restricts use to research/evaluation and prohibits commercial use without prior explicit consent. Review all included licenses and any model/dataset terms before use or redistribution.
|