UncleanCode commited on
Commit
be867cc
·
verified ·
1 Parent(s): 8e02a28

Upload via Autoresearch export_data

Browse files
experiments/fourier-splatting/README.md CHANGED
@@ -11,15 +11,105 @@ tags:
11
  - research
12
  ---
13
 
14
- # Polymorphic: Fourier Splatting refinement for AnySplat
15
 
16
- Experimental video-to-3D reconstruction workflow. AnySplat initializes scene geometry; Fourier Splatting then optimizes a representation for that specific scene. This release contains scene-specific checkpoints, LOD PLY exports, evaluation results, and scripts.
17
 
18
- **Important:** This is not a feed-forward model that instantly converts arbitrary video into a 3D asset. New scenes require per-scene optimization. The PLYs are renderable 3D Gaussian/surfel-style scene representations, not watertight meshes or game-ready GLB files.
19
 
20
- ## Held-out novel-view results
21
 
22
- PSNR and SSIM are higher-is-better; VGG LPIPS is lower-is-better. Baseline and Fourier results use the same VGG LPIPS implementation.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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, +0.0429 SSIM; LPIPS worsened slightly by 0.0019.
32
- - Kitchen: +3.69 dB PSNR, +0.1552 SSIM; LPIPS improved by 0.0092.
33
- - Primitive counts fell by about 18.7× (apartment) and 16.5× (kitchen). This does not establish the same reduction in serialized bytes; baseline PLY sizes were not measured.
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
- ## Method and evaluation protocol
55
 
56
- AnySplat inference on context frames initializes geometry. Fourier Splatting is optimized for 6,000 iterations at 448×448 resolution with staged Fourier-frequency activation. Apartment: 24 frames (12 context, 12 held-out targets). Kitchen: 32 frames (16 context, 16 held-out targets). Held-out target pixels were not used to initialize or train the scene representation; all-frame inference was used only for target camera poses and alignment into the context coordinate frame.
57
 
58
- ## Contents
59
 
60
- - `models/apartment/` and `models/kitchen/`: checkpoints, metrics, and K=1–6 PLY exports.
61
- - `scripts/`: preparation, evaluation, and LOD export scripts.
62
- - `FOURIER_SPLATTING_REPORT.md`: detailed protocol and findings.
63
- - `fourier_results.json`: machine-readable metrics.
64
- - `THIRD_PARTY_NOTICES.md`: upstream project/license notes.
65
 
66
- ## Limitations and license
67
 
68
- Only two indoor scenes were evaluated; this does not establish generalization or state-of-the-art performance. Reconstruction requires per-scene optimization and depends on camera coverage, scene motion, and AnySplat initialization. The apartment perceptual metric regressed slightly.
69
 
70
- AnySplat and Fourier Splatting have separate upstream license terms. Fourier Splatting specifies non-commercial research/evaluation restrictions. Review the bundled license files and obtain required permissions before commercial use or redistribution. This release does not grant broader rights to upstream code, weights, or datasets.
 
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.