← Document Index Strategic plan · 4 alternatives · target 37 dB
brush PSNR gap を埋める4 つの plan Lego 30k で brush 37.40 dB に対し自作 24.84 dB の -12.56 dB gap を、本気で brush level (37 dB) に持ち上げる戦略 4 案を並列比較。audit (brush-vs-splat-37dB-gap-analysis.md) で「MCMC は path ではない、classic recipe parity が path」と判明、それを反映した版。
00a
Audit から得た key findings (path 設計に直結) brush vs splat-rs 37 dB analysis docs/findings/brush-vs-splat-37dB-gap-analysis.md の audit で 当初仮説が 2 点反転 した。それを反映した plan が以下。
★ brush は MCMC 非搭載 でも 37 dB
brush-train/src/config.rs: λ_Σ / λ_o / Eq.9 relocation すべて無し、SGLD noise weight も default は 0。「MCMC で gap を埋める」path は 逆向き 。brush は classic refine + 質の高い recipe のみで 37 dB を達成している
→ 路線転換: 37 dB の path は classic recipe parity であり MCMC ではない
★ eval convention 差で apparent gap が膨らんでいる可能性
c32-orig3dgs-bench.md §6: 同一 PLY を codebase-style (render×alpha vs gt) と paper-style (render vs gt+(1-α)·white) で測ると 28.4 dB vs 14.6 dB 。brush 37.40 と splat 24.84 が同 convention で測られているか未検証
→ 実装ギャップ純粋差は -6〜-10 dB に下方修正される可能性、最初に eval を揃える
★ grad_threshold が 1e4× 違う
brush: 2.5e-3、splat: 2e-7。gradient signal の scale 定義 (per-pixel mean / L2 norm / sum 等) が違う可能性、直接比較不能
→ refine recipe を「写経」するには grad signal 計算を揃えるところから始まる
★ lr_mean が 8× 違う (brush の方が低い)
brush: 2e-5 (init) → 2e-7 (final、exponential decay)、splat: 1.6e-4 constant。3DGS Kerbl 2023 default は 1.6e-4 だが、brush は意図的に低く取り stability 優先
→ 早期 iter で aggressive learning → NaN 発散 → refine 不安定の悪循環の根
opacity reset の方式が違う
brush: opac_decay 0.004/step (連続 exponential decay)、splat: periodic reset (default OFF)。連続 decay は smooth な regularization として効く
→ splat の opacity_reset_every=0 が「正則化欠落」として効いている可能性
alpha mask loss が brush のみ
brush: match_alpha_weight=0.1 で (1-α_pred)·α_target を加算。splat: 該当なし
→ NeRF synthetic 白背景での edge fitting に効く、推定 -0.5〜-1 dB
00b
Gap の root cause (修正版、寄与順) audit 反映、MCMC を gap 原因から除外 01
4 案の overview 比較 行をクリックで切替 P1 37 dB full plan P2 brush fork P3 scope 縮小 P4 quick wins 前提 audit で brush は MCMC 非搭載で 37 dB と判明。37 dB への path は classic recipe の徹底 parity 。MCMC は卒研 axis 1 の独自貢献として残しつつ、本路線では touch しない。eval convention の差で apparent gap が膨らんでいる可能性 (3-6 dB) もまず潰す。
研究 3 軸への影響 axis 1 (native impl)
+ 強化 (recipe parity 達成で「Apple Silicon native でも brush 同等」を data で示せる)
axis 2 (wgpu cost)
中立 → + (kernel 性能比較が recipe gap に隠されなくなる、axis 2 の clean data 取得可能)
axis 3 (unified memory)
+ (recipe 充実で host RMW 利得が顕在化、wallclock 比較が意味を持つ)
Pros L1 独立を維持しつつ 37 dB 到達 (卒論の central data 完成) brush との比較が clean (kernel 単独比較が初めて意味を持つ → axis 2 narrative 復活) recipe 知見の集約 = 卒論 §4 evaluation 章の主軸 MCMC は splat 側の独自貢献として並走 (future work 化) Cons 工数大 (8-10 週、ゼミ 1 回 + α) 途中で各 phase の数字が出ないと plan 維持の意欲低下 eval convention 確定 + grad signal 揃え までは PSNR 改善が見えない可能性 phase F-H の予定が押すと卒論ゼミに間に合わない ⚠ 既存判断との衝突 A.2 MCMC 実装 (17.4 dB plateau) を本路線では使わない判断が要る research-plan.md Phase 3 (Apple 固有最適化) の優先度を後ろ倒す必要01
A. Eval convention 統一 (まずここから) 4 項目 · 計測差 -3〜-6 dB を確定 4 / 4 brush と splat-rs が同じ convention で PSNR を測っているか検証。「実装ギャップ」と「計測差」を切り分ける、本 plan の前提整備。
02
B. Brush 互換 config の起草 3 項目 · brush 値を一括移植 3 / 3 audit で確定した brush の全 hyperparameter を「brush-compat-30k.toml」として起草、これを baseline に sweep していく。
03
C. LR scheduler を brush に揃える 4 項目 · -1〜-2 dB 推定 0 / 0 lr_mean を 1.6e-4 → 2e-5 (init) + exponential decay、lr_scale にも decay 追加。早期 iter の stability を取り戻す。
04
D. Opacity decay の連続化 3 項目 · -0.5〜-1.5 dB 推定 3 / 3 splat 現状の opacity_reset_every (周期 reset) を、brush の opac_decay (per-step exponential) に置き換える。
05
E. Refine grad signal の bit-exact 揃え 5 項目 · -1〜-2 dB 推定 + 後段の前提 0 / 0 grad_threshold が 1e4× 違う真因 = grad signal の scale 定義。brush の v_refine 出力と splat の RefineState::accumulate を bit-close まで揃える。
06
F. Alpha mask loss + auxiliary regularization 3 項目 · -0.5〜-1 dB 推定 2 / 2 07
G. SH degree progressive growth 3 項目 · -1〜-2 dB 推定 3 / 3 08
H. 最終 bench + multi-scene + 卒論差替え 5 項目 · 数字を確定して卒論へ 2 / 4 M
Milestone gates 6 個 · 各 gate で継続 / abort 判定 W
Week 別 実行順序 8 週想定 Week 1
~5/30
A: eval convention 統一
P1.A.1〜4 eval 数式 + reproducer + 統一計測差を確定 (apparent gap の何 dB が convention か) Week 2
~6/6
B+C: config 移植 + LR 揃え
P1.B.1〜3 brush-compat-30k.toml 起草P1.C.1〜4 LR scheduler 揃え + smokeWeek 3
~6/13
D+E 前半: opacity decay + grad signal 解析
P1.D.1〜3 opacity decay 実装 + smokeP1.E.1〜2 brush v_refine 解析Week 4
~6/20
E 完遂: grad signal bit-exact
P1.E.3〜5 splat 側 grad signal 修正 + 30k full中間 gate : PSNR > 30 dB + splat 200k 達成Week 5
~6/27
F: alpha mask loss
P1.F.1〜3 alpha loss 実装 + BG 切替 + smokeWeek 6
~7/4
G: SH degree progressive
P1.G.1〜3 SH progressive 実装 + smokeWeek 7
~7/11
H 前半: Lego variance + multi-scene 着手
P1.H.1 Lego variance testP1.H.2 multi-scene 半数 runWeek 8
~7/18
H 後半: multi-scene 完遂 + 卒論 update
P1.H.2 残 multi-sceneP1.H.3〜5 卒論章 updateDecision rule
Phase 毎に smoke gate を設置、各 gate で 継続 / abort / pivot 判定。Week 4 末の M3 (PSNR 30 dB) が 本路線の生命線 、ここで通らないと 37 dB 目標は撤回。 Abort condition
M3 (Week 4 末) で 28 dB 未達なら P2 (fork) or P4 (partial + negative) に切替。Week 6 末 M4 で 34 dB 未達なら P1 を打ち切り、現状値 + future work narrative で卒論 finalize。 99
使い方 本 PlanVue は brush PSNR gap をテーマに 4 plan を持つ template。同形式の別テーマ (e.g. インクリメンタル学習化 plan、CUDA baseline 拡張 plan) は plans 配列を差し替えるだけで複製可能。各 plan は独立した sections / weeks / milestones / decisionRule / abortCondition を持つので、 monthly plan (pages/plan.vue) と違って 複数戦略の並列比較 + 採用 / 切替 / abort 管理 用途に向く。
運用: tab を切替えて plan 詳細を読む。採用 plan が決まったら sections の items の status プロパティを 'done' / 'wip' / 'skip' に変更、Week 別表示の進行管理にそのまま使える。Phase gate (M1〜M5) が想定通り動くか毎週確認、不通過なら abort condition に従って pivot。