エッジデバイス向け 3D Gaussian Splatting 統合パイプラインの検討 ― 第 3 回以降の進捗
-84%」と「既存実装との比較」の 2 本。比較では、速度は brush と同等・msplat には 2.5 倍差、品質は評価器によって逆転することを正直に言う (第 3 回の +0.63 dB の訂正を含む)。第 4 回は欠席のため、前回 = 第 3 回。下線つきの用語はタップで意味が出る。 本研究では、Apple Silicon 搭載端末上で 3D Gaussian Splatting の学習から表示までを 1 台で完結させるパイプラインの構築を目指しています。第 4 回は欠席したため、今回は第 3 回以降の報告になります。
内容は大きく 3 つで、研究範囲の整理、学習の高速化、既存実装との比較です。学習の高速化では、Lego 12,500 反復の学習時間を 766 秒から約 123〜126 秒、84% 短縮しました。既存実装の msplat と brush とは同じ日・同じ機体で比較し、速度は brush とほぼ同等、msplat とは同じ反復数で 2.5 倍の差が残ること、そして品質の優劣は評価器によって逆転することが分かりました。
766 s → 122.8〜126.1 s (-84%)まず研究範囲の整理です。3DGS-MCMC の欠陥修正は、成分ごとに切り分けて scale 正則化項が単独で 4.4 dB 悪化させることまで特定しましたが、それを除いても 30,000 反復で 14.7 dB にとどまり、5 回続けて改善しなかったので打ち切りました。
また、実写データの Mip-NeRF 360 bicycle で学習したところ、PSNR 15.55 dB で論文値より 9.7 dB 低い結果でした。refine の停止反復と点数上限を実写向けに変えても 0.05 dB しか改善しなかったので、原因は別の部分にあると考えています。以上から、本研究の評価範囲は合成・物体中心のデータセットに絞ります。
-4.4 dB と特定、除いても 30k で 14.7 dB、5 連続で改善なし15.55 dB (論文 25.25 dB から -9.7 dB)、の調整で +0.05 dB のみ高速化の効果は数 % のものが多いので、計測のばらつきと区別するための手順を決めました。各手法は設定 1 行で ON/OFF できるようにし、学習済み点群を固定したベンチで候補を絞ったうえで、Lego 12,500 反復を ON と OFF 交互に 3 回ずつ同じセッションで計測します。差が 2σ か 1% の大きい方を超え、PSNR が下がらない場合だけ採用しています。
σ = 0.83%) で候補を絞るmax(2σ, 1%) + PSNR 低下なし開始時点のプロファイルでは、学習時間の 55% がタイルへの振り分けとソートでした。ただし原因はカーネルではなく、毎反復 約 1.25 GB のバッファを確保し直していたことによるページフォールトでした。これを常駐バッファに置き換えるだけで 48.4% 短縮しました。
以降もプロファイル上で一番大きいところから順に対処し、採用したのは表 1 の 10 手法です。効果が大きかったのは、中間バッファ全般の常駐化で 22%、反復をまたいで CPU と GPU の処理を重ねるパイプライン化で 18%、基数ソートの SIMD 化で 15% です。GPU の稼働率は 69% から 91% まで上がり、PSNR は全段階で 36.2 dB 前後のままです。10 手法はすべて計算結果を変えない変更です。
最大の改善がカーネル最適化ではなくバッファ管理から得られたのは、CPU と GPU がメモリを共有するユニファイドメモリならではの知見で、研究の第 3 軸に関わると考えています。

-48.4% (、実需要の約 80 倍を毎反復確保)-22.2% (約 46 MB の確保 + 約 57 MB の再転送を撤廃)-18.1%-15.0% (最後に寄与した点から逆伝播を開始)-14.9%-9.9% () / コマンド投入の連結 -9.1% / 単位スキップ -7.7%-2.2% / SSIM 集計の GPU 化 -1.4%122.8 s / 静穏時再計測 126.1 s (長時間計測で原因不明の +3〜6%)68.9% → 91.3% (で最大の要素から順に対処)採用しなかった 9 手法も記録しています。StopThePop 型のタイル判定や、brush で使われている splat 単位の逆伝播など、他の実装で有効とされる手法も、本実装では効果がないか逆に遅くなりました。また主要なカーネルを調べたところ、Adam はすでにメモリ帯域の 9 割に達していて、計算結果を変えない範囲では 1% を超える改善余地は見つかりませんでした。
-2.5%、他手法と併用で +2.2% (常駐化と効果が重複)+34%-25% だが PSNR -0.42 dB・点数 -35% → 最適化ではない次に既存実装との比較です。msplat と brush、それぞれと本実装を同じ日・同じ機体で、Lego を 30,000 反復学習して比べました。PSNR は、各実装が自分で出す値に加えて、本実装の評価器と brush の評価器の両方で同じ点群を評価しています。
学習時間は、msplat の 2.5 倍、brush の 0.94 倍でした。brush との差は 1 回ずつの計測のばらつき程度なので、ほぼ同等です。5 月の時点では brush の 3 倍近くかかっていたので、大きく改善しました。
品質については、本実装の評価器では本実装が一番高く、brush の評価器では brush が一番高いという結果になりました。どちらの評価器も、自分のレンダラで学習した点群を約 1.9 dB 高く評価します。第 3 回で「brush より 0.63 dB 高い」と報告しましたが、あれも本実装の評価器で測った値だったので、品質で上回っているとは言えない、と訂正します。各実装が自分で測った値同士では、msplat とは互角、brush には 1 dB 劣ります。
図 2 は同じ視点を各実装自身のレンダラで描画したものです。全体像はどれも正解とほぼ同じですが、拡大すると、影になったキャタピラ付近で本実装にざらついたノイズがあり、brush が一番正解に近いです。側面の視点では msplat のギアの歯がぼやけています。
msplat との 2.5 倍の差は、最終点数の比 2.56 倍とほぼ同じで、1 点・1 反復あたりの処理時間は msplat の 0.92 倍です。なので、差の大部分は GPU の処理効率ではなく、densify で点が多いことによると考えています。
| 実装 (計測日) | 学習時間 | 各実装の評価 | 本実装の評価器 | brush の評価器 | 最終点数 |
|---|---|---|---|---|---|
| msplat (8/31) | 165.7 s | 36.46 | 33.93 | — | 191,941 |
| 本実装 (8/31) | 413.6 s | 36.46 | 36.50 | — | 490,866 |
| brush (9/23) | 417.0 s | 37.41 | 34.57 | 37.41 | 284,151 |
| 本実装 (9/23) | 392.4 s | 36.42 | 36.47 | 35.58 | 485,825 |

2.50 倍 (30k 同士)、 の 0.94 倍 (ばらつき内でほぼ同等)1.9 dB 有利に評価-1.0 dB2.56 倍 ≒ 速度差、1 点・1 反復あたりは 0.92 倍 → による点数差が主因 (仮説)採用した手法は Lego でしか評価していなかったので、4 シーンを 30,000 反復で学習して 5 月の結果と比べました。学習時間は 5 〜 6 倍速くなり、PSNR の差はいずれも小さいです。ただ ficus は同じ設定でも PSNR が 1.4 dB ばらつくので、シーンごとにばらつきを確認する必要があります。
今後は、まず評価器によって優劣が逆転する原因を特定し、実装間で公平に品質を比べられる評価方法を確立します。次に、materials で msplat の学習が崩れる現象を同じ条件で確認し直すこと、msplat の平均点数を実測して点数と速度・品質の関係を調べることです。あわせて、今回の結果を卒業論文の評価の章としてまとめ始めます。以上です。
スクリプト中の下線つき語は本リストの内容をポップアップで表示する。第 3 回ゼミからの継続語は最後にまとめて再掲。
165.7 s-48.4%) の源max(2σ, 1%) を超え PSNR が下がらない場合のみ採用する手順1.9 dB 有利に評価する4.4 dB 下がった417 s| 想定質問 | 回答骨子 |
|---|---|
| 第 3 回で「brush より +0.63 dB」と言っていたのは間違いだったのか? | 測定自体は正しいが、本実装の評価器で測った値だった。brush の評価器で測ると逆転する (Lego で本実装 35.58 vs brush 37.41)。どちらの評価器も自分のレンダラで学習した点群を約 1.9 dB 有利に評価するため、品質で上回るとは言えない、と訂正した |
| 評価器でなぜそんなに差が出るのか? | 原因はまだ特定していない。見つかっている違いは、8 bit 化の前に値を [0,1] に制限するかどうか (本実装はする、brush はしない) と背景色。短い学習では差がほぼ無く (500 反復で 0.01 dB)、30,000 反復で 2.8 dB まで開く。今後の方針の最初の項目 |
| 結局、品質は良いのか悪いのか? | 各実装が自分の評価器で測った値同士では msplat と互角、brush には 1.0 dB 劣る。図 2 の見た目では、影のキャタピラ付近で本実装にノイズ、msplat はギアがぼやける。「同等水準だが brush がやや上」が正直なところ |
| 12,500 反復で比べれば msplat より速いのでは? | 標準設定同士 (本実装 12,500 / msplat 30,000) なら約 0.75 倍の時間で終わるが、反復数が違う比較なので主張しない。同じ 30,000 反復では 2.5 倍遅い |
| msplat との 2.5 倍の差は何が原因? | 最終点数の比が 2.56 倍でほぼ一致し、1 点・1 反復あたりの処理時間は msplat の 0.92 倍なので、GPU 処理の効率ではなく densify で点が多いことが主因と考えている。msplat の平均点数は推定値なので、実測し直して確かめる |
| -84% の中で一番効いたのは何か? なぜそんなに無駄があったのか? | タイル振り分け用バッファの常駐化 (-48.4%)。毎反復、実需要の約 80 倍の容量のバッファを確保し直しており、ページフォールトが大量に出ていた。カーネルではなくメモリ管理がボトルネックだったのは、ユニファイドメモリ環境らしい知見 |
| 採用した 10 手法で画質は本当に変わっていないのか? | すべて計算結果を変えない変更で、出力の一致をテストで確認している。PSNR も全段階で 36.14〜36.24 dB に収まり、他の 3 シーンでも 5 月と差が小さい |
| 学習時間が 122.8〜126.1 s と幅があるのはなぜ? | 長時間連続で計測すると原因不明の +3〜6% の遅れが出るため。同日の対照計測では 122.8 s、静かな環境の再計測では 126.1 s だったので、幅で報告している |
| MCMC は完全に諦めるのか? | 研究としては打ち切り。scale 正則化項が単独で -4.4 dB 悪化させることまでは特定したが、除いても 30,000 反復で 14.7 dB。卒論では「うまくいかなかった検討」として原因の切り分けまで記述する |
| 実写 (bicycle) の -9.7 dB はどうするのか? | refine の停止反復と点数上限を変えても +0.05 dB だったので、原因は別 (opacity リセット間隔、densify 閾値、初期点群の偏りなど)。卒論の評価範囲は合成・物体中心のデータに絞る |
質疑応答で 3〜6 分を見越し、全体 9〜12 分の枠を想定する。