卒論の central table。M-3.x baseline (自作 splat trainer) を起点に、SH degree / MCMC / multi-scene / 三層 (M4 自作・brush wgpu→Metal/Vulkan・CUDA orig/gsplat) の効果を一覧化。第 1〜3 軸すべての主張を data point で支える。
卒論の central table。M-3.x baseline (自作 splat trainer 24.879 dB / 23m13s / 83,734 splats sh3-30k re-run、variance σ ±0.32 dB) を起点に、SH degree (0/1/2/3) / MCMC / multi-scene (NeRF Synthetic 8 シーン complete) / Apple Silicon vs CUDA の三層対比 / Apple 固有最適化 (A.7/A.9/A.10) / iter & capacity scaling (E.5/E.6) を 1 つの表系列に統合する。第 1 軸 (品質): brush 37.46 > gsplat 32.94 > orig 3DGS 28.38 > 自作 24.88、シーン依存性 17.6 dB の幅 (ficus 13.96 〜 hotdog 30.29、8 シーン mean 18.95 ± 6.0)。第 2 軸 (wgpu 抽象コスト): 2 機種で wgpu < native という想定逆転、Chapter 4.2 のフレーミング書き換え必須。第 3 軸 (Apple 固有最適化): A.7 batched cmd buffer multi-scene で chair -18.6% / lego -6.16% / ficus -1.6% と scene-dependent、A.9 f16 forward -10 dB / +75% 二重 negative、A.10 Kahan bit-identical で variance σ ±0.32 dB が GPU 非決定性由来確定 (1 positive scene-dependent / 2 negative / 1 documented A.6 / 1 別 branch StopThePop)。モバイル含意: E.6 capacity 50-100k で 1M と同等品質 + E.5 iter 10k で 96.7% 達成、deployment 容易な data point 確定。
| scene | PSNR (dB) | wallclock | ΔPSNR vs lego | brush paper | gap to brush |
|---|---|---|---|---|---|
| **lego (ref)** | **24.879** | 23m13s | (baseline) | 35.78 | -10.9 |
| chair | 22.883 | 22m54s | -2.00 | 35.83 | -12.9 |
| **ficus** | **13.959** | 22m54s | **-10.92** | 34.87 | **-20.9** (gap 最大) |
| drums | 17.773 | 21m27s | -7.11 | 26.15 | -8.4 (gap 最小) |
| **hotdog** | **30.290** | 23m52s | **+5.41** | 37.72 | -7.4 |
| mic | 15.031 | 22m13s | -9.85 | 35.36 | -20.3 |
| **materials** | **12.709** | **28m28s** | **-12.17** | 30.00 | -17.3 |
| ship | 15.038 | 23m58s | -9.84 | 30.94 | -15.9 |
| **mean** | **18.95** | **23m23s** | **-5.93** | **33.32** | **-14.4** (std ±6.0) |
| scene | PSNR (dB) | wallclock | splats | brush paper | Δ vs brush | Δ vs A.4 legacy |
|---|---|---|---|---|---|---|
| **lego (val)** | **36.106** | 41m54s | 375,146 | 32.04 (val) | **+4.07** ★ | +11.23 |
| chair | 35.813 | 59m10s | 800,645 | 35.83 | -0.02 | +12.93 |
| ficus | 34.220 | **21m43s** | **203,412** | 34.87 | -0.65 | **+20.26** |
| drums | 27.198 | 62m | 868,304 | 26.15 | **+1.05** ★ | +9.43 |
| hotdog | 37.335 | 23m44s | 206,620 | 37.72 | -0.39 | +7.04 |
| mic | 36.375 | 32m15s | 329,110 | 35.36 | **+1.02** ★ | **+21.34** |
| materials | 29.904 | 27m33s | 266,018 | 30.00 | -0.10 | +17.20 |
| ship | 30.926 | 36m16s | 373,681 | 30.94 | -0.01 | +15.89 |
| **mean (8 scene)** | **33.49** | **(合計 5h 5m)** | **428k** | **32.86** | **+0.63** ★ | **+14.54** |
p1-d-multi-scene-rechain。| scene | PSNR (dB) | Δ vs Phase D | wallclock | splats | brush paper | Δ vs brush |
|---|---|---|---|---|---|---|
| lego | **36.384** | +0.278 ✓ | 41m07s | 487,741 | 32.04 (val) | **+4.34** ★ |
| chair | 35.952 | +0.142 ✓ | 1h15m42s | 1,148,667 | 35.83 | +0.12 ★ |
| ficus | 34.281 | +0.061 ✓ | 21m40s | 226,749 | 34.87 | -0.59 |
| drums | 27.217 | +0.017 ≈ | 1h05m36s | 1,001,014 | 26.15 | **+1.07** ★ |
| hotdog | 37.374 | +0.044 ✓ | 28m17s | 310,045 | 37.72 | -0.35 |
| **mic** | **36.624** | **+0.244 ✓** | 33m29s | 391,373 | 35.36 | **+1.26** ★ |
| materials | 30.025 | +0.125 ✓ | 30m46s | 349,784 | 30.00 | **+0.02** ★ |
| ship | 30.877 | -0.053 ≈ | 39m46s | 495,160 | 30.94 | -0.06 |
| **mean (8 scene)** | **33.592** | **+0.107** ✓ | **(合計 5h 36m)** | **551k** | **32.86** | **+0.732** ★ |
p1-axis1-phase-g-pareto-landscape + p1-axis1-phase-g3-sh-progressive。本実装 (splat-rs Phase D) が brush の multi-scene mean を decisive に超えた: 8 scene mean 33.49 dB vs brush 32.86 dB = +0.63 dB 上回り、卒論 central evaluation table 主張確定。A.4 旧 18.95 dB は legacy convention の誤評価 (P1.A.3 で symmetric coupling 発見、convention 統一 + Phase D で +14.54 dB 改善)。詳細 p1-d-multi-scene-rechain + p1-a-3-cross-eval-reproducer。
同 trainer + 同 config (sh=3, capacity=1M, seed=42, 30k iter) で シーン依存性 17.6 dB の幅 (materials 12.71 〜 hotdog 30.29)、mean 18.95 ± 6.0 dB。hotdog のみが lego を上回り (+5.41)、他 7 シーン全て lego を下回る → 本実装は「lego/hotdog に over-fit した refine schedule」の疑い。brush 比 multi-scene gap -14.4 dB (lego 単独 -10.9 より 3.5 dB 悪い)。「単一シーンの数字で trainer 能力を評価」は危険、卒論 evaluation で mean ± std 必須。詳細 a-4-nerf-synthetic-scene-results。
| Method | SH | iter | PSNR (dB) | wallclock | splats | Notes |
|---|---|---|---|---|---|---|
| brush ref (3dgs-rs 旧 M-3.x) | 3 | 30k | 25.140 | 21m37s | 79,654 | phase5-step31-x-30k (3dgs-rs/runs/) |
| 自作 (M-3.x migration-gate) | 3 | 30k | 24.842 | 23m40s | 79,239 | gate band [24.4, 25.6] pass、splat workspace の baseline |
| 自作 + MCMC fix2 (paper § 全部入り、calibration 補正) | 3 | 30k | 17.384 | (1h10m†) | 1,000,000 (cap) | 2026-05-23 完走、reorder + opacity_l1=0 で crash 回避。baseline -7.46 dB、Negative finding |
| 自作 SH=0 ablation | 0 | 30k | 16.50 | 26m47s | 40,288 | DC only、view-dependence なし → -8.34 dB |
| 自作 SH=1 ablation | 1 | 30k | 19.07 | 22m38s | 64,139 | first-order SH のみ → -5.78 dB |
| 自作 SH=2 ablation | 2 | 30k | 23.63 | 22m37s | 70,155 | second-order SH → -1.22 dB vs sh=3 |
| 自作 SH=3 baseline (re-run) | 3 | 30k | 24.879 | 23m13s | 83,734 | new trainer + B.1 RunSummary 統合の再現性 OK (+0.037 dB vs migration-gate) |
| **自作 brushcompat (gt_convention=premultiplied)** | 3 | 30k | **35.184** | 1h02m | 846,689 | 2026-05-24 P1.B+F Stage 2、brush convention 計測 (val 100 view)、brush 自身 val 32.038 を **+3.20 dB 上回り**、M3 lifeline (30 dB) +5.24 dB 突破 ★ |
| **自作 brushcompat × test subset (n=36)** | 3 | 30k | **33.315** | (eval-only) | 846,689 | 2026-05-24 P1 test split eval、brush paper test (37.40 200 view) と -4.09 dB gap (subset bias ±2 dB 残)、val→test 劣化 -1.92 dB = novel-view generalization gap |
| 自作 brushcompat + opacity decay (5k smoke) | 3 | 5k | 31.689 | 2m34s | 83,093 | 2026-05-24 P1.D Stage 1、baseline 5k 31.334 → +0.37 dB / splats -11.6% win-win、30k full bench は chain 完了後 schedule |
| **自作 brushcompat + opacity decay (30k Stage 2)** ★★ | 3 | 30k | **36.106** | **41m54s** | **375,146** | 2026-05-25 P1.D Stage 2、baseline 30k 比 PSNR +0.92 / splats -55.6% / wallclock -32% **全項目勝利**、M5 Lego val gate (>36 dB) 達成 ★ brush 自身 val +4.07 dB 上回り、test subset n=36 で 34.065 dB (Stage 2 +0.75)、brush paper 37.40 gap -3.34 dB に縮小 |
| 自作 brushcompat + opacity decay × test subset (n=36) | 3 | 30k | **34.065** | (eval-only) | 375,146 | 2026-05-25 Phase D test subset、Stage 2 (33.315) +0.75 dB、val (36.106) → test 劣化 -2.10 dB (subset bias 内) |
| 自作 + MCMC (実装後) | 3 | 30k | TBD | TBD | TBD | A.2 part 2 完了後 (docs/findings/mcmc-3-defects.md) |
| brush wgpu→Vulkan (c32 V100) | 3 | 30k | 37.460 | 8m24s | ~260k+ | 2026-05-23 完了、brush internal eval、SSIM 0.986。3DGS 原著級の品質 |
| brush wgpu→Metal (M4 Max) | 3 | 30k | 37.397 | 9m08s | ~284k+ | 2026-05-23 完了、SSIM 0.986。同 M4 Max で自作 (24.842 / 23m40s) との直接対比 |
| CUDA 原著 3DGS (c32 V100) | 3 | 30k | 28.384 | 10m37s | 237,920 | 2026-05-23 完了 (c32-orig3dgs-bench.md)、val split eval、α-mask render vs raw gt convention。paper-std white-bg eval だと 14.6 dB に下がる (off-object floater)、§6 参照 |
| CUDA gsplat (c32 V100) | 3 | 30k | 32.940 | 5m03s | 108,704 | 2026-05-23 完了 (c32-gsplat-smoke.md)、val split eval |
| 自作 (M4 Max) | brush wgpu→Vulkan (V100) | CUDA orig 3DGS (V100) | CUDA gsplat (V100) | |
|---|---|---|---|---|
| PSNR (dB) | 24.842 | 37.460 | 28.384 | 32.940 |
| wallclock | 23m40s | 8m24s | 10m37s | 5m03s |
| final splats | 79,239 | ~260k+ | 237,920 | 108,704 |
| GPU (TDP) | M4 Max (~40W) | V100 (250W) | V100 (250W) | V100 (250W) |
| 抽象レイヤ | native Metal | wgpu→Vulkan | CUDA native (paper) | CUDA native (PyTorch ext) |
| eval convention | val 100 white-bg | brush internal | α-mask render vs raw gt | val 100 white-bg |
m4-brush-bench.md の M4 Max 観察と同方向)。即ち V100 でも「抽象コスト ≪ 実装最適化レベル」が成立、卒研 Chapter 4.2 のフレーミング ("wgpu 抽象は重い") を完全否定する direction で 2 機種一致。c32-orig3dgs-bench.md §6。| brush wgpu→Metal | 自作 native Metal | 比率 | |
|---|---|---|---|
| PSNR (dB) | 37.397 | 24.842 | brush +12.6 dB |
| SSIM | 0.986 | (TBD 取得要) | — |
| wallclock | 9m08s | 23m40s | brush は自作の 0.39x (= 2.59x 速い) |
| final splats | ~284,323 | 79,239 | brush 3.6× の densify |
| GPU TDP | M4 Max (~40W) | M4 Max (~40W) | 同一 |
| brush wgpu→Vulkan | orig 3DGS CUDA (paper) | gsplat CUDA (PyTorch ext) | |
|---|---|---|---|
| PSNR (dB) | 37.460 | 28.384 | 32.940 |
| wallclock | 8m24s | 10m37s | 5m03s |
| final splats | ~260k+ | 237,920 | 108,704 |
V100 同居 wallclock の意味: orig 3DGS (CUDA native、paper baseline) と brush (wgpu→Vulkan) は 同 V100 GPU・同 30k iter・同 NeRF Synthetic Lego で動かしたので、wallclock の差 = wgpu 抽象オーバーヘッド + trainer 実装差という解釈になる。実測では brush が orig より 21% 速い。即ち抽象コストは正でなく、本実装の最適化レベル不足が主因。M4 Max 上の brush vs 自作の対比 (2.59x 速い) と方向性一致、抽象コスト ≪ 実装最適化レベル のテーゼが 2 機種で確認された。
| optimization | wallclock 効果 | PSNR 変化 | 採用 |
|---|---|---|---|
| baseline M-3.x (sh3-30k) | 0 (ref) variance ±2.4% | 24.879 mean 24.834 ±0.32 dB | ✓ sh3-30k 4-run variance baseline (a-10-variance-baseline) |
| #feat.G f16 packed splat (A.6) | ~1% (kernel pair only) | invariant (test) | △ kernel + Rust glue cherry-pick 完了 (cargo test 73/73 pass)、trainer integration 未着手で 30k bench 不可 (a-6-feat-g-packed-investigation) |
| #feat.F StopThePop emit_pairs | -10.2% | -0.07 dB | (A.5 評価外、未統合 branch) |
| A.1 SSIM タイルシェーダ (TBDR) | TBD (~3% 見込み) | invariant | △ render-pipeline 大改修で scope 過大 (a-1-ssim-tile-shader-investigation) |
| Kahan summation (A.10) | +14.6% (overhead 残) | 0 (bit-identical) | ✗ Negative finding: Metal compiler が compensator を最適化消去 (a-10-kahan-negative) |
| A.10 variance baseline (n=4) | wallclock σ ±2.4% range 5.2% | PSNR σ ±0.32 dB range 0.885 dB | ✓ noise floor 確定: 原因は GPU 非決定性 (SIMD atomic 順序)、Kahan で消えない (a-10-variance-baseline) |
| f16 forward (A.9) | +75.1% (40m40s vs 23m13s) | -10.006 dB (14.873 vs 24.879) | ✗ 二重 Negative: half3 underflow + cast overhead (a-9-f16-forward-negative) |
| A.7 batched cmd buffer (lego) | -6.16% (21m47s) | -0.302 dB (24.577) variance 内 | ✓ Mildly positive: commit ~3 個/iter 削減 (a-7-icb-batching-results) |
| A.7 × multi-scene (chair/ficus/drums/hotdog/lego) | -1.6% 〜 -18.6% (mean -7.0%) scene 依存 | +0.13 〜 -0.83 dB (hotdog drift 有意) | ✓ scene-dependent: chair / lego / hotdog で wallclock 有意改善、drums / ficus は variance 内 (a-7-multi-scene-batched) |
| E.5 iter scaling (10k / 15k / 20k / 25k) | -70% / -53% / -37% / -18% | -0.83 / -0.90 / -0.97 / -0.21 dB | △ 10k で 96.7% 品質達成 (モバイル含意 strong)、ただし non-monotonic は kerbl_exp_decay max_steps 依存 artifact (e-5-iter-scaling) |
| E.6 capacity scaling (50k / 100k / 200k / 500k) | -3〜-4% (capacity 小で僅か速い) | PSNR 全て variance band 内 | ✓ lego 本質的 splat 数 ~85k で plateau、capacity 50-100k で 1M と同等品質 (モバイル含意 strong claim) (e-6-capacity-scaling) |
SH=0: 16.50 dB -8.38 dB vs sh=3 re-run 40,288 splats 26m47s
SH=1: 19.07 dB -5.81 dB vs sh=3 re-run 64,139 splats 22m38s
SH=2: 23.63 dB -1.25 dB vs sh=3 re-run 70,155 splats 22m37s
SH=3: 24.879 dB (sh=3 re-run, full schema) 83,734 splats 23m13s
ref: 24.842 dB (migration-gate, 旧 result.toml) 79,239 splats 23m40s ← +0.037 dB drift
+2.57 → +4.56 → +1.22 dB → degree 2 と 3 の差は急減、収益逓減† MCMC fix2 30k の wallclock 1h10m は brush M4 30k と同一 GPU で並列実行したため約 3 倍に膨張。単独実行時の見積もりは ~25-28 min (capacity 1M densify による per-iter 計算量増加の影響もあり)。
res 200: 23.901 dB 80,147 splats 23m41s (sh=3、PSNR -0.98 dB vs 800px、ほぼ同 wallclock)
res 400: 25.481 dB 83,177 splats 22m50s (sh=3、PSNR +0.60 dB vs 800px、**sweet spot**)
res 800: 24.964 dB 81,945 splats 22m38s (A.12 独立 run、24.879 baseline と +0.085 dB variance band 内)
ref: 24.879 dB 83,734 splats 23m13s (= A.8 sh=3 baseline、同条件)
PSNR は解像度に対し非単調。400px > 800px (+0.6 dB)、200px < 800px (-0.98 dB)。仮説: (1) SSIM 信号密度: 小解像度では 1 pixel あたりの neighborhood 寄与が大きく、SSIM gradient が dense になる、(2) Aliasing: GT 自体が downsample 由来なので、render との一致が取りやすい、(3) ハイパパラのチューニング: refine threshold / grad threshold が 400px に偶然 fit している。このため、卒論「モバイル向け解像度選択」では「200/400/800 px のうち最適は 400」と claim できる data point。
3dgs-rs/runs/ にある M-3.x 旧 run の再現確認 (現状 splat workspace 移行で seed drift の懸念)public/runs/index.htmlmcmc-3-defects.mdc33-cuda-setup-notes.mdこの finding が観測された / 言及している実験 run。