95.6K Views
September 10, 23
スライド概要
Windows環境で3D Gaussian Splattingを使い、オリジナルデータから3Dデータを作成する方法をまとめています。
GAUSSIAN SPLATTINGで写真から3Dデータの作成 WINDOWS環境構築編
大久保 聡 Mail [email protected] Twitter @followapp
はじめに
GAUSSIAN-SPLATTINGとは Gaussian Splattingとは 2D 画像のセットを使用して 3D シーンを作成する方法です。 ガウス スプラットは、基本的には「空間内の塊の集まり」を、パーティクルとして表現します。 • 各パーティクル は、3D 空間内で位置、回転、および不均一なスケールを持ちます。 • 各パーティクルには、色だけでなく不透明度もあります。つまり、「色」は見る方向に応じて変化する可能性が あります)。 • レンダリングでは、パーティクルは画面空間内の2D ガウスとしてレンダリングされます。 出典:https://aras-p.info/blog/2023/09/05/Gaussian-Splatting-is-pretty-cool/
要求スペック Hardware Requirements • CUDA-ready GPU with Compute Capability 7.0+ • 24 GB VRAM (to train to paper evaluation quality) • Please see FAQ for smaller VRAM configurations Software Requirements • Conda (recommended for easy setup) • C++ Compiler for PyTorch extensions (we used Visual Studio 2019 for Windows) • CUDA SDK 11 for PyTorch extensions, install after Visual Studio (we used 11.8, known issues with 11.6) • C++ Compiler and CUDA SDK must be compatible
環境構築
VRAMのチューニング 24GBもVRAMねぇーよという場合、FAQをご確認くだい。 結果の品質に影響が出るかもしれないけどパラメータ調整は可能です。 I don‘t have 24 GB of VRAM for training, what do I do? The VRAM consumption is determined by the number of points that are being optimized, which increases over time. If you only want to train to 7k iterations, you will need significantly less. To do the full training routine and avoid running out of memory, you can increase the --densify_grad_threshold, --densification_interval or reduce the value of --densify_until_iter. Note however that this will affect the quality of the result. Also try setting --test_iterations to -1 to avoid memory spikes during testing. If --densify_grad_threshold is very high, no densification should occur and training should complete if the scene itself loads successfully.
GAUSSIAN-SPLATTINGのチュートリアル GitHubのReadmeからはじめよう。 https://github.com/graphdeco-inria/gaussian-splatting チュートリアルはこちら https://www.youtube.com/watch?v=UXtuigy_wYc
VISUAL STUDIO2019 Visual Studio2019をインストール、ワークロードでC++ によるデスクトップ開発を入れます。
CUDA TOOLKITの入手 CUDA Toolkit 11.8の入手します。 自分の環境は、Windows10 64Bitなので、下記のものをダウンロード。 https://developer.nvidia.com/cuda-toolkit-archive
CUDAインストール インストーラーを実行しインストールします。
格納フォルダ 本ドキュメントで環境構築に使うフォルダ構成は下記の通りです。パスの指定などこの環境に従って記 述しています。 D:\graphdeco-inria ├ COLMAP-3.8-windows-cuda …COLMAPの格納(解凍フォルダ) ├ Data │ └ Input …オリジナル写真データ格納 └ gaussian-splatting … gaussian-splattingの格納
3D GAUSSIAN SPLATTINGを取得 格納用フォルダの作成 explolerでフォルダ作成して、コマンドプロンプトで開きます。 (explolerのパスのところでcmd+Enterと入れると楽) Gitでクローンする。 git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
しばし待たれよ
ANACONDAのインストール https://www.anaconda.com/downloadからAnacondaをダウンロードしインストールします。
ANACONDAプロント起動 Anaconda Powershell Promptを起動します。
CONDA環境構築 SET DISTUTILS_USE_SDK=1、カレントディレクトリをgaussian-splattingのフォルダへ移動。 environment.yaml を指定し、condaの環境構築コマンドを叩きます。
CONDAの環境メモ Anaconda有償化で使えない場合もあろうかと思いますので、必要パッケージのメモです。 pip install -r requirements.txtでインストールできるはず… ※pytorchは、CUDA版を入れる必要があるので注意です。 requirements.txt(gaussian-splattingフォルダに格納の前提で相対パス書いてます。) setuptools==68.1.2 torch==2.0.1+cu118 --index-url https://download.pytorch.org/whl/cu118 torchaudio==2.0.2+cu118 --index-url https://download.pytorch.org/whl/cu118 torchvision==0.15.2+cu118 --index-url https://download.pytorch.org/whl/cu118 Brotli==1.0.9 certifi==2023.7.22 charset-normalizer colorama==0.4.6 idna==3.4 numpy==1.21.6 Pillow==9.2.0 plyfile==0.8.1 PySocks==1.7.1 requests==2.31.0 tqdm==4.66.1 typing_extensions==4.7.1 urllib3==2.0.4 win-inet-pton==1.1.0 submodules/diff-gaussian-rasterization submodules/simple-knn
COLMAPのダウンロード https://demuc.de/colmap/から、Release Versionを取得します。 今回はCOLMAP-3.8-windows-cuda.zip を利用しました。
COLMAPを解凍 ダウンロードしたファイルを解凍。 システム環境変数のPathに解凍フォルダを設定する。
オリジナルデータのトレーニング
DATAフォルダの作成 オリジナルデータ格納用のDataフォルダを作成。 配下にInputフォルダを作成し、写真を格納する。 33枚 適当にキッチン を撮影
用意する画像の注意 • 画像数は 200 ~ 1000 枚を目指してください。画像が 200 枚未満の場合はモデルの品質が低くな り、画像が 1000 枚を超えると処理に時間がかかります。 • カメラの露出をロックします。フレーム間で一貫性がないと、最終モデルでちらつきが発生します。
ANACONDAプロント起動 Anaconda Powershell Promptを起動します。
環境切り替え 環境の一覧確認し、環境の切り替え、実行パスの移動します。
カメラのポーズ(向き・位置)データの作成 convert.pyにCOLMAPのバッチとデータ格納フォルダを指定し実行します。 python convert.py --source_path "D:¥graphdeco-inria¥Data" --colmap_executable "D:¥graphdeco-inria¥COLMAP-3.8-windows-cuda¥COLMAP.bat"
トレーニング train.pyにデータ格納フォルダを指定し実行。 90分くらい かかってます python train.py --source_path "D:¥graphdeco-inria¥Data"
結果を確認
トレーニング結果を確認 \gaussian-splatting\outputフォルダを確認します。 タイムスタンプで作成したトレーニング結果がどれか特定してきます。
ビューアーの準備 Windowsのビルド済みバイナリーをダウンロードします。
ビューアーをインストール gaussian-splattingフォルダにviewers.zipを解凍します。
ビューアーの起動準備 ビューアーのexeのパスへ移動、コマンドプロンプトを開きます。 (explolerのパスのところでcmd+Enterと入れると楽)
ビューアー起動 コマンドプロンプトでトレーニングデータのパスを指定して、ビューアーを起動します。 SIBR_gaussianViewer_app -m D:¥graphdeco-inria¥gaussian-splatting¥output¥6cd0bb57-e
ビューアーでぐるぐるします。 起動したビューアーで表示確認。WASDで移動。Yキー押下でマウスで回転できるようになります。
撮影例
公園で遊具を撮影 真夏の炎天下、1時間かけて撮影。 EOSS Kiss x5(ISO400、1/1000、F10、太陽光)で、3脚を利用し545枚撮影。 撮影は、遊具の周りを回転しなが5周。上の方は少し密度低めですが、オーバーラップは多めに心がけ。 カメラ位置。中心部に遊具がある感じです。
トレーニング結果の表示 遊具回りはきれいにデータ化できています。遠くの鉄棒とかも再現されてて良い感じ。 動画はこちら https://youtu.be/RXDd0RTTxiE
UNITYでの利用
UNITYでの表示 各ガウス スプラットを、スクリーンスペースに揃えられた長方形として描画する方法で可視化してい るものが公開されています。 https://github.com/aras-p/UnityGaussianSplatting
UNITYGAUSSIANSPLATTINGをUNITYで開く コマンドプロンプトで、git clone https://github.com/aras-p/UnityGaussianSplatting.git
UNITYGAUSSIANSPLATTINGをUNITYで開く Unity Hubで開くを選択、cloneしたフォルダ(UnityGaussianSplatting)を選択する。
GAUSSIAN SPLAT ASSETの作成 シーンを開く ToolsからCreate GaussianSplatAssetを選択
データを選択してASSETの作成 Input Folderに、トレーニング済みデータのフォルダを選択する。 Create Assetを押下する。
GAUSSIAN SPLAT RENDERERの設定 HierarchyのGaussianSplatsを選択し、InspectorでData Assetに作成したAssetを指定する。
シーンの確認 シーンに3Dデータが表示される。