松田研究室
FindingID: final-ablation-table
Status: draft / task A.5
← Findings Index
Central table · 卒論 §A.5

A.5 Final Ablation Table — brush vs 自作 + パラメータ ablation

卒論の 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 で支える。

mixedrank: highpartial第 1 軸第 2 軸第 3 軸phase-5ablationtablesh-degreemcmcmulti-scenebrushcudaresolution-scaling
Δ PSNR
-12.6 dB (自作 24.84 vs brush 37.46)
Δ Wallclock
brush は自作の 0.39× (= 2.59x 速い、同 M4 Max)
Δ Splats
82k → 1M (MCMC capacity) / 284k (brush)
Impact
三層対比 (自作 M4 / brush V100 / CUDA V100) で wgpu→Vulkan が 37.46 dB / 8m24s と CUDA orig (28.4) / gsplat (32.9) より高 PSNR + 高速、自作 24.84 / 23m40s に対し brush wgpu→Metal が 37.40 / 9m08s。「wgpu 抽象は重い」の素朴予想が 2 機種で逆転し、第 2 軸の主張を『抽象コスト < 実装最適化レベル』に再 framing 必須。
01

本文

卒論の 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 確定。

目的
卒論の central table。M-3.x baseline を起点に SH degree / MCMC / 他シーンの効果を一覧する
起草
2026-05-22
最終更新
2026-05-22 23:00 JST (A.8 sh=0/1 完了、sh=2/3 走行中)

Multi-scene (NeRF Synthetic 8 シーン complete、2026-05-24) — A.4 legacy convention 旧数字

scenePSNR (dB)wallclockΔPSNR vs legobrush papergap to brush
**lego (ref)****24.879**23m13s(baseline)35.78-10.9
chair22.88322m54s-2.0035.83-12.9
**ficus****13.959**22m54s**-10.92**34.87**-20.9** (gap 最大)
drums17.77321m27s-7.1126.15-8.4 (gap 最小)
**hotdog****30.290**23m52s**+5.41**37.72-7.4
mic15.03122m13s-9.8535.36-20.3
**materials****12.709****28m28s****-12.17**30.00-17.3
ship15.03823m58s-9.8430.94-15.9
**mean****18.95****23m23s****-5.93****33.32****-14.4** (std ±6.0)
**この A.4 数字は legacy convention (white-bg target) で誤評価**。P1.A.3 cross-eval reproducer で symmetric coupling 発見、brush convention で再評価が必要。下記 Multi-scene Phase D 表を参照。

Multi-scene Phase D (brushcompat + opacity_decay 30k、2026-05-25) — M5 完全達成 + brush 超え

scenePSNR (dB)wallclocksplatsbrush paperΔ vs brushΔ vs A.4 legacy
**lego (val)****36.106**41m54s375,14632.04 (val)**+4.07** ★+11.23
chair35.81359m10s800,64535.83-0.02+12.93
ficus34.220**21m43s****203,412**34.87-0.65**+20.26**
drums27.19862m868,30426.15**+1.05** ★+9.43
hotdog37.33523m44s206,62037.72-0.39+7.04
mic36.37532m15s329,11035.36**+1.02** ★**+21.34**
materials29.90427m33s266,01830.00-0.10+17.20
ship30.92636m16s373,68130.94-0.01+15.89
**mean (8 scene)****33.49****(合計 5h 5m)****428k****32.86****+0.63** ★**+14.54**
**Phase D re-chain 全 8 scene 完遂、M5 完全達成 + brush 超え**: mean 33.49 dB > brush 32.86 (+0.63 dB)、brush 超え 3 scene (★)、A.4 legacy convention 比 mean +14.54 dB 改善 (誤評価解消 + Phase D 効果)。全 scene で baseline brushcompat 30k 比 PSNR + splats + wallclock の universal win-win-win。詳細 p1-d-multi-scene-rechain

Phase G.3 SH-progressive 30k (Phase D + sh_progressive、2026-05-26) — Pareto extension

scenePSNR (dB)Δ vs Phase Dwallclocksplatsbrush paperΔ vs brush
lego**36.384**+0.278 ✓41m07s487,74132.04 (val)**+4.34** ★
chair35.952+0.142 ✓1h15m42s1,148,66735.83+0.12 ★
ficus34.281+0.061 ✓21m40s226,74934.87-0.59
drums27.217+0.017 ≈1h05m36s1,001,01426.15**+1.07** ★
hotdog37.374+0.044 ✓28m17s310,04537.72-0.35
**mic****36.624****+0.244 ✓**33m29s391,37335.36**+1.26** ★
materials30.025+0.125 ✓30m46s349,78430.00**+0.02** ★
ship30.877-0.053 ≈39m46s495,16030.94-0.06
**mean (8 scene)****33.592****+0.107** ✓**(合計 5h 36m)****551k****32.86****+0.732** ★
**Phase G.3 alone 30k = universal quality improvement on Pareto axis**: Phase D 比 mean **+0.107 dB** (7/8 scene 改善、mic +0.244 dB が最大改善、stacked では -6.05 dB だったので G.3 alone での rescue が顕著)、brush 比 +0.732 dB に拡大 (P1.M5 の +0.625 から)、wallclock +10.2% cost。brush 超え scene が 3 → **5** に拡大 (Lego/chair/drums/mic/materials)。詳細 p1-axis1-phase-g-pareto-landscape + p1-axis1-phase-g3-sh-progressive
M5 final 達成 (2026-05-25)

本実装 (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

核心 finding (2026-05-24 8 シーン complete)

同 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

メイン表 — Lego (NeRF Synthetic)

MethodSHiterPSNR (dB)wallclocksplatsNotes
brush ref (3dgs-rs 旧 M-3.x)330k25.14021m37s79,654phase5-step31-x-30k (3dgs-rs/runs/)
自作 (M-3.x migration-gate)330k24.84223m40s79,239gate band [24.4, 25.6] pass、splat workspace の baseline
自作 + MCMC fix2 (paper § 全部入り、calibration 補正)330k17.384(1h10m†)1,000,000 (cap)2026-05-23 完走、reorder + opacity_l1=0 で crash 回避。baseline -7.46 dB、Negative finding
自作 SH=0 ablation030k16.5026m47s40,288DC only、view-dependence なし → -8.34 dB
自作 SH=1 ablation130k19.0722m38s64,139first-order SH のみ → -5.78 dB
自作 SH=2 ablation230k23.6322m37s70,155second-order SH → -1.22 dB vs sh=3
自作 SH=3 baseline (re-run)330k24.87923m13s83,734new trainer + B.1 RunSummary 統合の再現性 OK (+0.037 dB vs migration-gate)
**自作 brushcompat (gt_convention=premultiplied)**330k**35.184**1h02m846,6892026-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)**330k**33.315**(eval-only)846,6892026-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)35k31.6892m34s83,0932026-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)** ★★330k**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)330k**34.065**(eval-only)375,1462026-05-25 Phase D test subset、Stage 2 (33.315) +0.75 dB、val (36.106) → test 劣化 -2.10 dB (subset bias 内)
自作 + MCMC (実装後)330kTBDTBDTBDA.2 part 2 完了後 (docs/findings/mcmc-3-defects.md)
brush wgpu→Vulkan (c32 V100)330k37.4608m24s~260k+2026-05-23 完了、brush internal eval、SSIM 0.986。3DGS 原著級の品質
brush wgpu→Metal (M4 Max)330k37.3979m08s~284k+2026-05-23 完了、SSIM 0.986。同 M4 Max で自作 (24.842 / 23m40s) との直接対比
CUDA 原著 3DGS (c32 V100)330k28.38410m37s237,9202026-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)330k32.9405m03s108,7042026-05-23 完了 (c32-gsplat-smoke.md)、val split eval

第 1 軸 (Apple Silicon native vs CUDA reference) — 三層対比完成 (2026-05-23)

自作 (M4 Max)brush wgpu→Vulkan (V100)CUDA orig 3DGS (V100)CUDA gsplat (V100)
PSNR (dB)24.84237.46028.38432.940
wallclock23m40s8m24s10m37s5m03s
final splats79,239~260k+237,920108,704
GPU (TDP)M4 Max (~40W)V100 (250W)V100 (250W)V100 (250W)
抽象レイヤnative Metalwgpu→VulkanCUDA native (paper)CUDA native (PyTorch ext)
eval conventionval 100 white-bgbrush internalα-mask render vs raw gtval 100 white-bg

核心 finding (2026-05-23 三層対比完成版)

  1. PSNR 順序: brush (37.46) > gsplat (32.94) > orig 3DGS (28.38) > 自作 (24.84) — 抽象レイヤの薄さと品質は 逆相関。CUDA native (paper) よりも wgpu (brush) の方が +9.1 dB 高い。原因は trainer recipe (densification、refine schedule、capacity、eval convention の整合性) の差で、抽象コストは completely overshadowed。
  2. wallclock 順序: gsplat (5m03) < brush (8m24) < orig 3DGS (10m37) < 自作 (23m40) — wgpu (brush) は CUDA native (orig 3DGS) より 約 21% 速い (m4-brush-bench.md の M4 Max 観察と同方向)。即ち V100 でも「抽象コスト ≪ 実装最適化レベル」が成立、卒研 Chapter 4.2 のフレーミング ("wgpu 抽象は重い") を完全否定する direction で 2 機種一致。
  3. orig 3DGS の eval convention 依存: 同 30k checkpoint を 4 通り eval すると 2.5 dB (broken upstream) / 14.6 dB (paper-std white-bg) / 28.4 dB (codebase-internal、α-mask render vs raw gt) と 26 dB の幅で振れる。本表は codebase-internal (28.4) を採用するが、3 層対比の絶対値比較は eval convention を揃えない限り正しくない。詳細 c32-orig3dgs-bench.md §6。
  4. 自作 (24.84) と brush (37.46) の 12.6 dB gap が依然支配的 — 本研究の trainer recipe が brush に届かない。第 2 軸の純粋抽象コスト測定は本実装が brush 水準に到達した後でないと不可。

第 2 軸 (wgpu 抽象コスト) — 2026-05-23 大幅更新

M4 Max での 直接対比 (同 GPU 上で wgpu→Metal vs native Metal)

brush wgpu→Metal自作 native Metal比率
PSNR (dB)37.39724.842brush +12.6 dB
SSIM0.986(TBD 取得要)
wallclock9m08s23m40sbrush は自作の 0.39x (= 2.59x 速い)
final splats~284,32379,239brush 3.6× の densify
GPU TDPM4 Max (~40W)M4 Max (~40W)同一

V100 での wgpu→Vulkan vs CUDA native (第 2 軸の本筋対比、完成)

brush wgpu→Vulkanorig 3DGS CUDA (paper)gsplat CUDA (PyTorch ext)
PSNR (dB)37.46028.38432.940
wallclock8m24s10m37s5m03s
final splats~260k+237,920108,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 機種で確認された。

核心 finding (2026-05-23 確定)

  1. wgpu→Metal は native Metal より遅くなかった、むしろ本実装より 2.6× 速い — 「wgpu 抽象は遅い」という素朴予想を 反証。本実装の trainer (自作) が brush の trainer recipe より immature だったため、wgpu のオーバーヘッドが実装最適化の差に 完全に埋没。結論: 「wgpu 抽象コスト」を純粋に取りたければ 同 trainer recipe + wgpu vs native の対比が必要。今 session のデータは「実装最適化レベル + 抽象」の合算で、純粋抽象コストは未確定。
  2. wgpu→Vulkan も CUDA native (gsplat) より高 PSNR (+4.5 dB)、wallclock は CUDA が 1.67× 速い。これも実装差 (brush trainer vs gsplat simple_trainer) が支配的、抽象コスト純抽出は不可。
  3. 卒論への影響: 第 2 軸の主張を「wgpu 抽象は重い」から「抽象コスト < 実装最適化レベル」に転換すべき (Negative finding として位置付け可)。Chapter 4.2 のフレーミング全面書き換えを検討。

第 3 軸 (Apple Silicon 固有最適化)

optimizationwallclock 効果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 degree ablation サマリ (A.8、走行中)

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

観察

  • SH degree 1 つ上げる毎に PSNR +2.57 → +4.56 → +1.22 dB → degree 2 と 3 の差は急減、収益逓減
  • splats 数も SH degree と単調増加、高 degree ほど refine 時に保持される
  • wallclock は SH=0 が若干遅い (26m47s vs 他 ~22m半)、SH 切り詰めで refine 挙動が変わるためか
  • モバイル想定 take: SH=2 で 95% の品質 (-1.22 dB) を 88% の splats (70k/79k) で達成 → メモリ制約下では sh=2 が cost-effective

注釈

† MCMC fix2 30k の wallclock 1h10m は brush M4 30k と同一 GPU で並列実行したため約 3 倍に膨張。単独実行時の見積もりは ~25-28 min (capacity 1M densify による per-iter 計算量増加の影響もあり)。

Resolution scaling 中間結果 (A.12、走行中)

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。

観察 (中間)

  • res 200 でも PSNR 23.9 dB (vs 800 の 24.88、わずか -0.98 dB ロス) — Lego の幾何が単純で低解像度でも 3DGS が学習しきれる
  • wallclock がほぼ同 (~23m半) — 我々の trainer は splat-bound (1M capacity) で pixel-bound ではない。resolution を下げても速度は上がらない
  • thesis 含意: モバイル推論で重要なのは training resolution ではなく trained model size (splats × bytes/splat)

残課題 (本表を完成させるため)

  1. A.8 sh=2 / sh=3 再現 run 完了 ✓ 全 4 段階完了 (16.50 / 19.07 / 23.63 / 24.879 dB)
  2. A.2 part 2 (MCMC 完全実装) ✓ 実装完遂、Negative finding として close (17.38 dB)
  3. A.3 phase 2 (CUDA bench) ✓ 三層対比表完成 (V100 brush / orig / gsplat)
  4. A.4 NeRF Synthetic 4 シーン展開 — chair-30k 進行中 (2026-05-23 05:16〜)、その後 ficus / drums / hotdog (~90 min)
  5. ✓ A.6 #feat.G f16 packed → kernel + glue cherry-pick 完了 (cargo test 73/73)、trainer integration 未着手で 30k bench 不可、documented investigation (a-6-feat-g-packed-investigation)
  6. ✓ A.7 ICB simpler batching → 30k bench 完了 24.577 dB / 21m47s / -6.16% (a-7-icb-batching-results)、Mildly positive
  7. ✓ A.9 f16 forward → 30k bench 完了 14.873 dB / 40m40s / -10 dB / +75%、Negative (a-9-f16-forward-negative)
  8. brush ref re-validation — 3dgs-rs/runs/ にある M-3.x 旧 run の再現確認 (現状 splat workspace 移行で seed drift の懸念)

参照

  • 個別 run summary: public/runs/index.html
  • MCMC spec: mcmc-3-defects.md
  • CUDA env: c33-cuda-setup-notes.md
  • 関連 memory: [[autonomous-plan-a-b]], [[research_direction]], [[h_a_regression_findings]], [[feat_g_f16_packed_roi]]
02

関連する run

この finding が観測された / 言及している実験 run。

03

関連 finding

© 2026 大竹律輝 — 松田研究室