Bernhard Kerbl*、Georgios Kopanas*、Thomas Leimkühler、George Drettakis (* は同等の貢献を示します)
|ウェブページ |フルペーパー |ビデオ |その他のグラフィデコ出版物 |ファングラフプロジェクトページ |
| T&T+DB コルマップ (650MB) |事前トレーニング済みモデル (14 GB) | Windows 用ビューア (60MB) |評価イメージ (7 GB) |
このリポジトリには、「リアルタイム ラディアンス フィールド レンダリングのための 3D ガウス スプラッティング」という論文に関連する公式の作成者による実装が含まれています。この論文はここで見つけることができます。さらに、論文で報告されているエラー メトリクスの作成に使用された参照画像と、最近作成された事前トレーニングされたモデルも提供します。
要約:ラディアンス フィールド手法は、最近、複数の写真またはビデオでキャプチャされたシーンの新しいビューの合成に革命をもたらしました。ただし、高いビジュアル品質を達成するには、トレーニングとレンダリングにコストがかかるニューラル ネットワークが依然として必要ですが、最近のより高速な方法では、必然的に速度と品質がトレードオフになります。境界のない完全なシーン (孤立したオブジェクトではなく) および 1080p 解像度のレンダリングの場合、現在の方法ではリアルタイムの表示レートを達成できません。競争力のあるトレーニング時間を維持しながら最先端のビジュアル品質を達成できる 3 つの重要な要素を紹介します。また、重要なことに、1080p 解像度で高品質のリアルタイム (≥ 30 fps) のノベルビュー合成を可能にします。まず、カメラのキャリブレーション中に生成されたまばらな点から開始して、空の空間での不必要な計算を回避しながら、シーンの最適化のために連続体積放射輝度フィールドの望ましい特性を保存する 3D ガウスでシーンを表します。次に、3D ガウスのインターリーブ最適化/密度制御を実行し、特に異方性共分散を最適化してシーンの正確な表現を実現します。 3 番目に、異方性スプラッティングをサポートし、トレーニングの高速化とリアルタイム レンダリングの両方を可能にする、可視性を考慮した高速レンダリング アルゴリズムを開発します。いくつかの確立されたデータセットで最先端のビジュアル品質とリアルタイム レンダリングを実証します。
@Article{kerbl3Dgaussians, author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{"u}hler, Thomas and Drettakis, George}, title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering}, journal = {ACM Transactions on Graphics}, number = {4}, volume = {42}, month = {July}, year = {2023}, url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/} }
この研究は、ERC Advanced 助成金 FUNGRAPH No 788065 によって資金提供されました。著者らは、アドビの寛大な寄付、コートダジュール大学からの OPAL インフラストラクチャ、および GENCI-IDRIS からの HPC リソースに感謝しています (助成金 2022-AD011013409)。著者らは、貴重なフィードバックを寄せてくれた匿名の査読者、以前の草稿を校正してくれた P. ヘドマンと A. テワリ、比較を手伝ってくれた T. ミュラー、A. ユウ、および S. フリドヴィッチ=ケイルに感謝します。
コードの保守と更新のためのリソースは限られています。ただし、最初のリリース以来、他の多くの研究者が 3DGS で行ってきた優れた研究のいくつかに触発されたいくつかの新機能を追加しました。リソースの範囲内で他の機能も追加する予定です。
2024 年 10 月の更新: トレーニング速度の高速化を統合し、深さの正則化、アンチエイリアシング、露出補正と互換性を持たせました。バグを修正し、入力カメラとユーザー カメラを視覚化できるトップ ビューの機能を追加することにより、SIBR リアルタイム ビューアを強化しました。
2024 年春の更新: Orange Labs は、VR 表示のための OpenXR サポートを追加しました。
Jonathan Stephens は、ビデオから使用可能なデータセットを作成する手順とともに、マシン上でガウス スプラッティングをセットアップするための素晴らしいステップバイステップのチュートリアルを作成しました。以下の手順が無味乾燥すぎる場合は、ここで確認してください。
ユーザーの Camenduru さんは、このメソッドにすばやく簡単にアクセスできるように、このリポジトリのソース (ステータス: 2023 年 8 月!) を使用する Colab テンプレートを親切にも提供してくれました。こちらをご覧ください。
リポジトリにはサブモジュールが含まれているため、次のコマンドでチェックアウトしてください。
# SSHgit クローン [email protected]:graphdeco-inria/gaussian-splatting.git --recursive
または
# HTTPSgit クローン https://github.com/graphdeco-inria/gaussian-splatting --recursive
コードベースには 4 つの主要コンポーネントがあります。
SfM 入力から 3D ガウス モデルを生成する PyTorch ベースのオプティマイザー
最適化プロセスに接続して視覚化できるネットワーク ビューア
トレーニングされたモデルをリアルタイムでレンダリングするための OpenGL ベースのリアルタイム ビューア。
独自の画像を最適化対応の SfM データ セットに変換するのに役立つスクリプト
コンポーネントには、ハードウェアとソフトウェアの両方に関して異なる要件があります。これらは Windows 10 および Ubuntu Linux 22.04 でテストされています。それぞれのセットアップと実行の手順については、以下のセクションを参照してください。
オプティマイザーは、Python 環境で PyTorch および CUDA 拡張機能を使用して、トレーニングされたモデルを生成します。
コンピューティング機能 7.0+ を備えた CUDA 対応 GPU
24 GB VRAM (紙の評価品質をトレーニングするため)
より小さい VRAM 構成については FAQ を参照してください。
Conda (セットアップが簡単な場合に推奨)
PyTorch 拡張機能用の C++ コンパイラー (Windows 用の Visual Studio 2019 を使用しました)
PyTorch 拡張機能用の CUDA SDK 11、Visual Studioの後にインストール (ここでは 11.8 を使用しました、 11.6 の既知の問題)
C++ コンパイラと CUDA SDK には互換性がある必要があります
デフォルトで提供されるインストール方法は、Conda パッケージと環境管理に基づいています。
SET DISTUTILS_USE_SDK=1 # Windows のみconda env create --file experience.yml conda は gaussian_splatting をアクティブにします
このプロセスは、CUDA SDK 12ではなく11 がインストールされていることを前提としていることに注意してください。変更内容については、以下を参照してください。
ヒント: パッケージをダウンロードし、Conda を使用して新しい環境を作成するには、大量のディスク容量が必要になる場合があります。デフォルトでは、Conda はメイン システムのハード ドライブを使用します。これを回避するには、別のパッケージのダウンロード場所と別のドライブ上の環境を指定します。
conda config --add pkgs_dirs <ドライブ>/conda env create --fileenvironment.yml --prefix <ドライブ>/ /gaussian_splatting conda activate <ドライブ>/ /gaussian_splatting
ディスク容量に余裕がある場合は、環境ファイルを使用して、同じトレーニング環境をセットアップすることをお勧めします。変更を加えたい場合は、メジャーバージョンの変更がメソッドの結果に影響を与える可能性があることに注意してください。ただし、私たちの (限定的な) 実験では、コードベースがより最新の環境 (Python 3.8、PyTorch 2.0.0、CUDA 12) 内で問題なく動作することが示唆されています。 PyTorch とその CUDA ランタイムのバージョンが一致し、インストールされている CUDA SDK が PyTorch の CUDA バージョンと大きなバージョンの違いがない環境を作成してください。
一部のユーザーは、Windows でサブモジュールをビルドする際に問題が発生します ( cl.exe: File not found
、または同様のもの)。 FAQ からこの問題の回避策を検討してください。
オプティマイザを実行するには、次のようにします。
python train.py -s
COLMAP または合成 NeRF データ セットを含むソース ディレクトリへのパス。
トレーニングされたモデルを保存するパス (デフォルトでは、 output/
)。
COLMAP 画像の代替サブディレクトリ (デフォルトではimages
)。
MipNeRF360 スタイルのトレーニング/テスト分割を評価に使用するには、このフラグを追加します。
トレーニング前にロードされた画像の解像度を指定します。 1, 2, 4
または8
を指定すると、それぞれオリジナル、1/2、1/4、または 1/8 解像度が使用されます。他のすべての値については、画像の縦横比を維持しながら、幅を指定された数値に再スケールします。設定されておらず、入力画像の幅が 1.6K ピクセルを超えている場合、入力はこのターゲットに合わせて自動的に再スケールされます。
ソース画像データを配置する場所を指定します。デフォルトではcuda
です。大規模/高解像度のデータセットでトレーニングする場合はcpu
を使用することをお勧めします。これにより、VRAM 消費量が削減されますが、トレーニングの速度がわずかに低下します。 HrsPythonix に感謝します。
NeRF Synthetic データセットの評価などに、黒 (デフォルト) の代わりに白の背景を使用するには、このフラグを追加します。
使用する球面調和関数の次数 (3 以下)。デフォルトでは3
。
私たちの代わりに PyTorch を使用してパイプラインが SH の前後方向を計算するようにするフラグ。
私たちの代わりに PyTorch を使用して 3D 共分散の前方および後方をパイプラインで計算させるためのフラグ。
エラーが発生した場合はデバッグ モードを有効にします。ラスタライザが失敗した場合は、 dump
ファイルが作成されます。このファイルを問題として送信していただければ、確認できるようになります。
デバッグが遅い。上記のデバッグがアクティブになるまでの反復 (0 から開始) を指定できます。
トレーニングする合計反復数。デフォルトでは30_000
。
GUI サーバーを起動する IP、デフォルトでは127.0.0.1
。
GUI サーバーに使用するポート、デフォルトでは6009
。
トレーニング スクリプトがテスト セットに対して L1 と PSNR を計算するスペース区切りの反復数 (デフォルトでは7000 30000
。
トレーニング スクリプトがガウス モデルを保存するスペースで区切られた反復。デフォルトでは7000 30000
。
後で続行するためのチェックポイントを保存するスペースで区切られた反復。モデル ディレクトリに保存されます。
トレーニングを続行する保存されたチェックポイントへのパス。
標準出力パイプに書き込まれるテキストを省略するフラグ。
球面調和関数の学習率はデフォルトで0.0025
。
不透明度学習率、デフォルトでは0.05
。
スケーリング学習率、デフォルトでは0.005
。
回転学習率、デフォルトでは0.001
。
位置学習率がinitial
からfinal
までのステップ数 (0 から)。デフォルトでは30_000
。
初期の 3D 位置学習率、デフォルトでは0.00016
。
最終的な 3D 位置学習率、デフォルトでは0.0000016
。
位置学習率乗数 (Plenoxels を参照)、デフォルトでは0.01
。
高密度化が開始される反復、デフォルトでは500
。
高密度化が停止する反復、デフォルトでは15_000
。
2D 位置勾配に基づいてポイントを高密度化するかどうかを決定する制限 (デフォルトでは0.0002
。
高密度化の頻度。デフォルトでは100
(100 回の反復ごと)。
不透明度をリセットする頻度。デフォルトでは3_000
。
総損失に対する SSIM の影響は 0 から 1、デフォルトでは0.2
。
強制的に高密度化するには、ポイントが超える必要があるシーン範囲のパーセンテージ (0 ~ 1)。デフォルトでは0.01
。
MipNeRF360 と同様に、1 ~ 1.6K ピクセル範囲の解像度の画像を対象としていることに注意してください。便宜上、任意のサイズの入力を渡すことができ、その幅が 1600 ピクセルを超える場合は自動的にサイズが変更されます。この動作を維持することをお勧めしますが、 -r 1
を設定すると、トレーニングで高解像度の画像を使用するように強制できます。
MipNeRF360 シーンは、ここの論文著者によってホストされています。 Tanks&Temples およびディープ ブレンディング用の SfM データ セットは、ここで見つけることができます。出力モデル ディレクトリ ( -m
) を指定しない場合、トレーニングされたモデルは、 output
ディレクトリ内のランダム化された一意の名前を持つフォルダーに書き込まれます。この時点で、トレーニングされたモデルはリアルタイム ビューアで表示できます (以下を参照)。
デフォルトでは、トレーニングされたモデルはデータセット内の利用可能なすべての画像を使用します。評価用のテスト セットを保留しながらトレーニングするには、 --eval
フラグを使用します。このようにして、次のようにトレーニング/テスト セットをレンダリングし、エラー メトリクスを生成できます。
python train.py -s--eval # train/test でトレーニングする splitpython render.py -m <トレーニング済みモデルへのパス> # renderingspython metrics.py -m <トレーニング済みモデルへのパス> # レンダリング時のエラーメトリクスを計算する
事前トレーニングされたモデルを評価したい場合は、対応するソース データ セットをダウンロードし、追加の--source_path/-s
フラグを使用してその場所をrender.py
に指定する必要があります。注: 事前トレーニングされたモデルは、リリース コードベースを使用して作成されました。このコード ベースはクリーンアップされ、バグ修正が含まれているため、コード ベースを評価することで得られるメトリクスは、論文のメトリクスとは異なります。
python render.py -m <事前トレーニングされたモデルへのパス> -spython metrics.py -m <事前トレーニングされたモデルへのパス>
レンダリングを作成するトレーニング済みモデルのディレクトリへのパス。
トレーニング セットのレンダリングをスキップするフラグ。
テスト セットのレンダリングをスキップするフラグ。
標準出力パイプに書き込まれるテキストを省略するフラグ。
以下のパラメーターは、トレーニングに使用されたものに基づいて、モデル パスから自動的に読み取られます。ただし、コマンド ラインで明示的に指定することで、それらをオーバーライドできます。
COLMAP または合成 NeRF データ セットを含むソース ディレクトリへのパス。
COLMAP 画像の代替サブディレクトリ (デフォルトではimages
)。
MipNeRF360 スタイルのトレーニング/テスト分割を評価に使用するには、このフラグを追加します。
トレーニング前にロードされた画像の解像度を変更します。 1, 2, 4
または8
を指定すると、それぞれオリジナル、1/2、1/4、または 1/8 解像度が使用されます。他のすべての値については、画像の縦横比を維持しながら、幅を指定された数値に再スケールします。デフォルトでは1
。
NeRF Synthetic データセットの評価などに、黒 (デフォルト) の代わりに白の背景を使用するには、このフラグを追加します。
私たちの代わりに PyTorch から計算された SH を使用してパイプラインをレンダリングするためのフラグ。
私たちのものではなく PyTorch から計算された 3D 共分散を使用してパイプラインをレンダリングするためのフラグ。
メトリクスを計算する必要があるモデル パスのスペース区切りのリスト。
さらに、 full_eval.py
スクリプトも提供します。このスクリプトは、評価で使用するルーチンを指定し、COLMAP データ セット内の代替イメージ ディレクトリを定義するための--images (-i)
などの追加パラメータの使用を示します。すべてのトレーニング データをダウンロードして抽出した場合は、次のように実行できます。
python full_eval.py -m360-tat <戦車と寺院のフォルダー> -db <ディープ ブレンディング フォルダー>
現在のバージョンでは、A6000 を搭載したリファレンス マシンでこのプロセスに約 7 時間かかります。事前トレーニングされたモデルで完全な評価を実行したい場合は、ダウンロード場所を指定してトレーニングをスキップできます。
python full_eval.py -o <事前トレーニング済みモデルのあるディレクトリ> --skip_training -m360-tat <戦車と寺院のフォルダ> -db <ディープ ブレンディング フォルダ>
論文の評価画像のメトリクスを計算したい場合は、レンダリングをスキップすることもできます。この場合、ソース データセットを提供する必要はありません。複数の画像セットのメトリクスを一度に計算できます。
python full_eval.py -m <評価画像のあるディレクトリ>/garden ... --skip_training --skip_rendering
このメソッドには、リモートとリアルタイムの 2 つの対話型ビューアが提供されます。当社の表示ソリューションは、いくつかの新規ビュー合成プロジェクトのために GRAPHDECO グループによって開発された SIBR フレームワークに基づいています。
OpenGL 4.5 対応 GPU およびドライバー (または最新の MESA ソフトウェア)
4 GB VRAM を推奨
Compute Capability 7.0+ を備えた CUDA 対応 GPU (Real-Time Viewer のみ)
Clang ではなく、Visual Studio または g++ (ここでは Visual Studio 2019 for Windows を使用しました)
CUDA SDK 11、Visual Studioの後にインストール (今回は 11.8 を使用)
CMake (最新バージョン、3.24 を使用)
7zip (Windows のみ)
ここでは、Windows 用のビルド済みバイナリを提供しています。 SIBR の構築には、その場でダウンロードしてコンパイルする必要があるいくつかの外部依存関係が含まれるため、効率的なセットアップのために Windows でこれらを使用することをお勧めします。
サブモジュールを使用してクローンを作成した場合 ( --recursive
使用するなど)、ビューアのソース コードはSIBR_viewers
にあります。ネットワーク ビューアは、イメージベース レンダリング アプリケーションの SIBR フレームワーク内で実行されます。
CMake は依存関係を処理する必要があります。
cd SIBR_viewers cmake -Bbuild .cmake --build build --target install --config RelWithDebInfo
開発中にさらに制御が必要な場合は、別の構成 (たとえば、 Debug
を指定できます。
プロジェクトのセットアップを実行する前に、いくつかの依存関係をインストールする必要があります。
# 依存関係sudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev# プロジェクト setupcd SIBR_viewers cmake -Bbuild 。 -DCMAKE_BUILD_TYPE=リリース # ビルドを高速化するために -G Ninja を追加しますcmake --build build -j24 --target install
Focal Fossa との下位互換性は完全にはテストされていませんが、CMake を使用した SIBR のビルドは呼び出し後も機能するはずです。
git checkout fossa_compatibility
SIBR インターフェイスは、シーンをナビゲートするためのいくつかの方法を提供します。デフォルトでは、FPS ナビゲーターから開始されます。カメラの移動にはW, A, S, D, Q, E
回転にはI, K, J, L, U, O
を使用して制御できます。あるいは、トラックボール スタイルのナビゲータ (フローティング メニューから選択) を使用することもできます。 Snap to
ボタンを使用してデータ セットからカメラにスナップしたり、 Snap to closest
を使用して最も近いカメラを検索したりすることもできます。フローティング メニューを使用すると、ナビゲーション速度を変更することもできます。 Scaling Modifier
使用して、表示されるガウス分布のサイズを制御したり、初期点群を表示したりできます。
ビューアを抽出またはインストールした後、コンパイルされたSIBR_remoteGaussian_app[_config]
アプリを
で実行できます。例:
.//bin/SIBR_remoteGaussian_app
ネットワーク ビューアを使用すると、同じマシンまたは別のマシンで実行中のトレーニング プロセスに接続できます。同じマシンと OS でトレーニングしている場合、コマンド ライン パラメータは必要ありません。オプティマイザはトレーニング データの場所をネットワーク ビューアに伝えます。デフォルトでは、オプティマイザとネットワーク ビューアは、ローカルホストのポート6009で接続を確立しようとします。この動作を変更するには、オプティマイザとネットワーク ビューアの両方に、一致する--ip
パラメータと--port
パラメータを指定します。何らかの理由で、オプティマイザがトレーニング データを見つけるために使用するパスにネットワーク ビューアが到達できない場合 (たとえば、ネットワーク ビューアが別の (仮想) マシンで実行されているため)、 -s
使用してビューアにオーバーライドの場所を指定できます。 -s
。
ソース データセットへのモデルのパスをオーバーライドする引数。
実行中のトレーニング スクリプトへの接続に使用する IP。
実行中のトレーニング スクリプトへの接続に使用するポート。
スペースで区切られた 2 つの数値を使用して、ネットワーク レンダリングが行われる解像度を定義します。デフォルトでは幅1200
です。入力画像とは異なるアスペクトを強制するには、 --force-aspect-ratio
も必要であることに注意してください。
各カメラのトップ ビューに表示されるソース データセット画像をロードするためのフラグ。
ビューアを抽出またはインストールした後、コンパイルされたSIBR_gaussianViewer_app[_config]
アプリを
で実行できます。例:
.//bin/SIBR_gaussianViewer_app -m <トレーニング済みモデルへのパス>
トレーニング済みモデルのディレクトリを指す-m
パラメータを指定するだけで十分です。あるいは、 -s
使用して、トレーニング入力データのオーバーライド場所を指定できます。自動選択された解像度以外の特定の解像度を使用するには、 --rendering-size
を指定します。正確な解像度が必要で、画像の歪みを気にしない場合は、 --force-aspect-ratio
と組み合わせます。
フルフレームレートのロックを解除するには、マシンとアプリケーション (メニュー → ディスプレイ) で V-Sync を無効にしてください。マルチ GPU システム (ラップトップなど) では、最大のパフォーマンスを得るために、OpenGL/ディスプレイ GPU が CUDA GPU と同じである必要があります (たとえば、Windows でアプリケーションの GPU 設定を設定することにより、以下を参照)。初期点群とスプラットに加えて、フローティング メニューからガウス分布を楕円体としてレンダリングすることでガウス分布を視覚化するオプションもあります。 SIBR には他にも多くの機能があります。ビューアやナビゲーション オプションなどの詳細についてはドキュメントを参照してください。また、入力カメラと元の SfM 点群の配置を示すトップ ビュー (メニューから利用可能) もあります。トップビューを有効にするとレンダリングが遅くなることに注意してください。リアルタイム ビューアは、フローティング メニューで切り替えることができる、より積極的で高速なカリングも使用します。高速カリングをオフにすることで解決できる問題が発生した場合は、お知らせください。
COLMAP ローダーは、ソース パスの場所に次のデータセット構造を想定しています。
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
ラスタライズの場合、カメラ モデルは SIMPLE_PINHOLE カメラまたは PINHOLE カメラである必要があります。入力画像から歪みのない画像と SfM 情報を抽出するためのコンバータ スクリプトconvert.py
を提供します。オプションで、ImageMagick を使用して、歪みのない画像のサイズを変更できます。この再スケーリングは MipNeRF360 と同様です。つまり、対応するフォルダーに元の解像度の 1/2、1/4、および 1/8 の画像が作成されます。これらを使用するには、まず COLMAP (理想的には CUDA 搭載) と ImageMagick の最新バージョンをインストールしてください。使用する画像をディレクトリ
に置きます。
|---input |--- |--- |---...
システム パスに COLMAP と ImageMagick がある場合は、単純に実行できます。
python Convert.py -s[--resize] #サイズ変更しない場合、ImageMagickは必要ありません
あるいは、オプションのパラメータ--colmap_executable
および--magick_executable
を使用して、それぞれのパスを指定することもできます。 Windows では、実行可能ファイルは、実行環境の設定を行う COLMAP .bat
ファイルを指す必要があることに注意してください。完了すると、
は、元の画像と、 ディレクトリ内の一時的な (歪んだ) データに加えて、歪みのないサイズ変更された入力画像を含む予期される COLMAP データ セット構造が含まれdistorted
。
歪みのない独自の COLMAP データセットがある場合 ( OPENCV
カメラを使用するなど)、スクリプトの最後の部分だけを実行してみてください: 画像をinput
に置き、COLMAP 情報をサブディレクトリにdistorted
。
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
それから実行します
python Convert.py -s--skip_matching [--resize] #サイズ変更しない場合、ImageMagickは必要ありません
COLMAP で GPU の使用を回避するためのフラグ。
画像に対して COLMAP 情報が利用可能であることを示すフラグ。
入力の場所。
初期のマッチング ステップで使用するカメラ モデル。デフォルトではOPENCV
。
入力画像のサイズ変更されたバージョンを作成するためのフラグ。
COLMAP 実行可能ファイルへのパス (Windows では.bat
)。
ImageMagick 実行可能ファイルへのパス。
トレーニング時間を短縮するために、融合 ssim を使用した Taming-3dgs 1からのドロップイン置換を元のコードベースに統合しました。インストールされると、アクセラレーションされたラスタライザーは次のような機能を提供します。 --optimizer_type default
と--optimizer_type sparse_adam
を使用したトレーニング時間の高速化。
トレーニング時間を短縮するには、まず高速化されたラスタライザーを環境にインストールする必要があります。
pip アンインストール diff-gaussian-rasterization -ycd サブモジュール/diff-gaussian-rasterization rm -r ビルド git checkout 3dgs_accel pip インストール 。
次に、次のパラメータを追加して、 train.py
実行時にスパース adam オプティマイザを使用できます。
--optimizer_type sparse_adam
このカスタム ラスタライザーは元のバージョンとは動作が異なることに注意してください。トレーニング時間の詳細については、「トレーニング時間の統計」を参照してください。
1. マリックとゴエル、他。 「3DGS を飼いならす: 限られたリソースで高品質の放射フィールドを実現する」。 SIGGRAPH Asia 2024 カンファレンスペーパー、2024 年、https://doi.org/10.1145/3680528.3687694、github
シーンをより適切に再構築するために、各入力画像の最適化中に事前マップとして深度マップを使用します。道路などのテクスチャーのない部分に最適で、フローターを除去できます。いくつかの論文では、同様のアイデアを使用して 3DGS のさまざまな側面を改善しています。 (例: Depth RegularizedGS、SparseGS、DNGaussian)。私たちが統合した深さの正規化は、階層型 3DGS の論文で使用されているものですが、元の 3DGS に適用されています。一部のシーン (DeepBlending シーンなど) では、品質が大幅に向上します。他の人にとっては、小さな違いが生じるか、あるいはさらに悪化する可能性があります。潜在的な利点を示す結果の例と品質に関する統計については、深さの正則化の統計を参照してください。
合成データセットでトレーニングする場合、深度マップを生成でき、このメソッドで使用するためにさらなる処理は必要ありません。
実世界のデータセットの場合、入力画像ごとに深度マップを生成する必要があります。生成するには次の手順を実行してください。
クローン深さ何でも v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
Depth-Anything-V2-Large から重みをダウンロードし、 Depth-Anything-V2/checkpoints/
の下に配置します。
深度マップを生成します。
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
以下を使用してdepth_params.json
ファイルを生成します。
python utils/make_depth_scale.py --base_dir--depths_dir
深度正則化-d
を使用する場合は、トレーニング時に新しいパラメーターを設定する必要があります。
さまざまな入力画像の露出の変化を補正するために、階層 3DGS と同様に、各画像のアフィン変換を最適化します。
これにより、たとえばカメラの露出設定が固定されていないスマートフォンでの「実際の」キャプチャの再構成結果が大幅に向上します。潜在的なメリットを示す結果と品質に関する統計の例については、「露出補正の統計」を参照してください。
有効にするには、次のパラメータを追加します。
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
繰り返しになりますが、NeRF-W、URF など、他の優れた論文でも同様のアイデアが使用されています。
エイリアシングを除去するために、Mip Splatting の EWA フィルターをコードベースに追加しました。デフォルトでは無効になっていますが、 train.py
使用してシーンでトレーニングするとき、またはrender.py
使用してレンダリングするときに--antialiasing
追加することで有効にできます。アンチエイリアスは SIBR ビューアで切り替えることができます。デフォルトでは無効になっていますが、 --antialiasing
使用してトレーニングされたシーンを表示する場合は有効にする必要があります。 このシーンは--antialiasing
を使用してトレーニングされました。
Views > Top view
Top view
対応する入力カメラとPoint view
ユーザー カメラを使用して、別のビューで SfM 点群をレンダリングします。これにより、たとえば、視聴者が入力カメラからどれくらい離れているかを視覚化できます。
これは 3D ビューであるため、ユーザーはPoint view
と同じようにナビゲートできます (利用可能なモード: FPS、トラックボール、オービット)。
このビューをカスタマイズするオプションが利用可能で、メッシュを無効/有効にしたり、スケールを変更したりできます。
便利な追加機能は、入力画像の位置に移動し、その位置で SfM ポイント ビューに徐々にフェードアウトすることです (たとえば、カメラの位置を確認するため)。入力カメラからのビューは、 Top view
に表示できます (コマンド ラインで--images-path
設定する必要があることに注意してください)。 [ Top view
Top view settings > Cameras > Snap to closest
近い入力カメラにスナップ] をクリックするとPoint view
でトップ ビュー カメラをユーザー カメラから最も近い入力カメラにスナップできます。OpenXR サポート
OpenXR はgaussian_code_release_openxr
ブランチでサポートされており、そのブランチ内で VR サポートに関するドキュメントがここにあります。
データセット ( full_eval.py
で参照されるデータセットなど) はどこで入手できますか? MipNeRF360 データ セットは、元の論文の著者によってプロジェクト サイトで提供されます。データ セットのうち 2 つは公然と共有できないため、作成者に直接相談する必要があることに注意してください。 Tanks&Temples と Deep Blending については、ページの上部にあるダウンロード リンクを使用してください。あるいは、HuggingFace からクローン データ (ステータス: 2023 年 8 月!) にアクセスすることもできます。
市区町村など、より大規模なデータセットにこれを使用するにはどうすればよいでしょうか?現在の方法はこれらのために設計されたものではありませんが、十分なメモリがあれば問題なく動作するはずです。ただし、このアプローチは、マルチスケールの詳細シーン (極端なクローズアップ、遠くのショットとの混合) では困難になる可能性があります。これは通常、運転データセット (車が近くにあり、建物が遠くにある) の場合に当てはまります。このようなシーンでは、 --position_lr_init
、 --position_lr_final
、 --scaling_lr
(x0.3、x0.1、...) を下げることができます。シーンが広範囲に及ぶほど、これらの値は低くする必要があります。以下では、デフォルトの学習率 (左) と--position_lr_init 0.000016 --scaling_lr 0.001"
(右) を使用します。
Windows を使用していますが、サブモジュールをビルドできません。どうすればよいですか?ここの優れたビデオチュートリアルの手順に従うことを検討してください。役立つことを願っています。手順を実行する順序は重要です。あるいは、リンクされた Colab テンプレートの使用を検討してください。
まだ機能しません。 cl.exe
について何か書いてあります。私は何をしますか?ユーザーの Henry Pearce が回避策を見つけました。 Visual Studio のパスを環境変数に追加してみてはいかがでしょうか (バージョン番号は異なる場合があります)。 C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
次に、必ず新しい conda プロンプトを開始し、リポジトリの場所に移動してこれを試してください。
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
macOS/Puppy Linux/Greenhat を使用していますが、ビルドできません。どうすればよいですか?申し訳ありませんが、この README に記載されているプラットフォーム以外のプラットフォームについてはサポートを提供できません。リンクされた Colab テンプレートの使用を検討してください。
トレーニング用に 24 GB の VRAM がありません。どうすればよいですか? VRAM の消費量は、最適化されるポイントの数によって決まり、時間の経過とともに増加します。 7,000 回の反復までトレーニングするだけの場合は、必要な回数は大幅に少なくなります。完全なトレーニング ルーチンを実行してメモリ不足を回避するには、 --densify_grad_threshold
、 --densification_interval
を増やすか、 --densify_until_iter
の値を減らすことができます。ただし、これは結果の品質に影響することに注意してください。また、テスト中のメモリの急増を避けるために、 --test_iterations
-1
に設定してみてください。 --densify_grad_threshold
が非常に高い場合、高密度化は発生せず、シーン自体が正常に読み込まれればトレーニングは完了するはずです。
参考品質のトレーニングには 24 GB の VRAM が必要ですが、それでも十分な量です。もっと少なくて済むんじゃないでしょうか?はい、おそらくそうです。私たちのCAより