gsplat (3D Gaussian Splatting) と 3DGUT の使い方 生成方法 – Windows環境構築

3D Gaussian Splatting (ガウシアンスプラッティング) 処理する方法は様々ありますが、ここでは『gsplat』の使い方、Windows環境での環境構築の手順をまとめました。

本家『Inria – 3D Gaussian Splatting』は商用利用はできないライセンスなので、仕事で使いたい場合はこのgsplatが選択肢に入るかと思います。
※Inria 3DGSが使いたい場合は こちらの記事 にまとめています

GUIで利用できる『postshot』も便利ですが、まだベータ版であり、使える機能にも限りがあるので、より柔軟に3DGS生成したい場合にもgsplatは便利です。
※postshotの使い方については こちらの記事 にまとめました

gsplatは『nerfstudio』からも利用できますがこの記事はgsplat単独で使う方法です。
gsplat直であれば最新の機能も早いタイミングから利用できます。
NVIDIAから発表された『3DGUT』も使用する事ができます。
3DGUTの使い方については記事の最後に。

情報と環境

公式リポジトリ
https://github.com/nerfstudio-project/gsplat

公式ドキュメント
https://docs.gsplat.studio/main/

この記事では以下の環境で進めています。

  • Windows 11 Pro
  • CUDA Toolkit 11.8 (または 12.1, 12.4)
  • PyTorch 2.4 (または 2.1, 2.2, 2.3)
  • Anaconda
  • Python 3.10
  • gsplat v1.5.2

上記の各対応バージョンについては リリースページ を参考にしました。

各ファイルの命名ルールは以下のようになってるようです。

  • pt:PyTorchのバージョン pt24→PyTorch 2.4
  • cu:CUDA Toolkitのバージョン cu118→CUDA Toolkit 11.8
  • cp:Pythonのバージョン cu310→Python 3.10

環境構築手順

手順の途中でエラーが起きていますが、参考としてそのままエラー内容と対策方法を記しています。

まずAnaconda Promptを起動し、仮想環境を作成する。

conda create -n gsplat python=3.10

作成した仮想環境をアクティベートする。

conda activate gsplat

pipアップグレードしておく。

python -m pip install --upgrade pip

PyTorchを入れる。
利用するのは旧バージョンなので、旧バージョン用の下記リンクにアクセス。
https://pytorch.org/get-started/previous-versions/

今回はCUDA 11.8環境で構築するので、対応したコマンドを控える。

conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=11.8 -c pytorch -c nvidia

依存関係をインストールしておく。

pip install ninja numpy jaxtyping rich

続いて、gsplatリポジトリからgitクローンするのでクローンする場所へ移動する。

cd D:\Git\3DGS_gsplat

クローンする。

git clone https://github.com/nerfstudio-project/gsplat.git

そのままだと最新版の状態なので、今回利用するv1.5.2にチェックアウトする。

git checkout v1.5.2

wheelファイルをインストールしたいので、
リリースページから自分の環境に対応したものをDLする。
https://github.com/nerfstudio-project/gsplat/releases

ここではgsplat-1.5.2+pt24cu118-cp310-cp310-win_amd64.whlを落とす。

.whlをダウンロードしたディレクトリに移動する。

cd D:\Downloads

wheelをインストールする。

pip install gsplat-1.5.2+pt24cu118-cp310-cp310-win_amd64.whl

リポジトリをクローンしたディレクトリへ移動する。

cd D:\Git\3DGS_gsplat\gsplat

requirements.txtから依存関係をインストールする。

pip install -r examples/requirements.txt

ここでエラーになった。

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for fused_ssim
Running setup.py clean for fused_ssim
Successfully built pycolmap nerfview
Failed to build fused_ssim
ERROR: Failed to build installable wheels for some pyproject.toml based projects (fused_ssim)

fused_ssim のインストールで失敗していた。

詳しく原因を探るため、VERBOSE=1を使って詳細なログを表示させてみる。以下のようにfused_ssimのインストール部分だけを単独実行し確認を行う。

SET VERBOSE=1
pip install --use-pep517 --no-build-isolation git+https://github.com/rahul-goel/fused-ssim@328dc9836f513d00c4b5bc38fe30478b4435cbb5

すると以下のエラーが確認できた。

fatal error C1189: #error: -- unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2022 (inclusive) are supported!

ChatGPTで確認してみるとー

これは Visual Studio 2022 の最新アップデート (v14.44) が CUDA 11.8 に未対応 であることが原因です。
CUDA 11.8 が正式にサポートする MSVC のバージョンは 14.29(Visual Studio 2019)か、Visual Studio 2022 でも古いバージョン(14.30~14.33くらい) です。

私の環境では「Visual Studio 2019」は入っているけれど「2022」も入っているので、そちらを参照してしまっているのが原因かもしれない。

Geminiに相談してみるとー

【最重要】専用のコマンドプロンプトからビルドを実行する
Windowsのスタートメニューを開き、検索ボックスに「x64 Native Tools Command Prompt for VS 2019」と入力します。
表示された「x64 Native Tools Command Prompt for VS 2019」を管理者として実行します

Visual Studio 2019専用のコマンドプロンプトを立ち上げる。

この状態で改めて環境をアクティベートする。

conda activate gsplat

しかしcondaを環境変数設定してないと以下のエラーになる。

'conda' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

そこで簡易的な対策として以下を実行する。

call C:\Users\ryo\anaconda3\Scripts\activate.bat

これで直接Anaconda環境がアクティベートされる。
改めてgsplat環境をアクティベートする。

conda activate gsplat

この状態で再度requirements.txtを参照した依存関係のインストールを実行。

pip install -r examples/requirements.txt

すると今度は以下のエラー。

UserWarning: It seems that the VC environment is activated but DISTUTILS_USE_SDK is not set.This may lead to multiple activations of the VC env.Please set `DISTUTILS_USE_SDK=1` and try again.

これはGeminiによると、

この準備された環境をそのまま使っていい、という明確な許可(= DISTUTILS_USE_SDK=1)が出ていない。もし許可がないと、こちらで勝手に別の環境を準備し始めて二重設定になるかもしれないから、安全のために一旦止めます」と警告を出して処理を停止しています。

というもの。
なので以下を実行する。

set DISTUTILS_USE_SDK=1

setで一時的に環境変数を設定するもの。これは他環境への影響はないので安心して実行して良いらしい。

最終的な手順をまとめると、以下の流れ。
まず「x64 Native Tools Command Prompt for VS 2019」を立ち上げ、以下のコマンドを順に実行する。

call C:\Users\ryo\anaconda3\Scripts\activate.bat
conda activate gsplat
set DISTUTILS_USE_SDK=1
pip install -r examples/requirements.txt


無事に fused_ssim がインストールできた。

トレーニングの実行 3DGS生成処理

試しに処理をしたいので、サンプルデータをDLする。

Inria の 3D Gaussian Splatting のサンプルデータを使わせてもらう。
「Scenes」からデータをDL。

truckフォルダをgsplatフォルダ以下にdataフォルダを作成しその中にコピーする。
以下のような構成。

トレーニング用実行ファイルはexampleフォルダ内にあるのでそこへ移動する。

cd examples

トレーニングを実行する。

python simple_trainer.py default --data_dir ../data/truck/ --data_factor 4 --result_dir ../results/truck

しかしここでエラーになる。

struct.error: unpack requires a buffer of 4 bytes

該当Issueがあった。
https://github.com/nerfstudio-project/gsplat/issues/275

結論はC:\Users\ryo\anaconda3\envs\gsplat\lib\site-packages\pycolmap\scene_manager.pyのファイルを以下のように修正する。
https://github.com/Fabulani/pycolmap/commit/d44e03b86044cca2756a3a5fa841ee0fb393f24e

修正したら改めて学習コマンドを実行する。

python simple_trainer.py default --data_dir ../data/truck/ --result_dir ../results/truck

無事に実行できた。

以上。更に3DGUTも試したい場合は↓

3DGUTの使い方

『3DGUT』を使用したい場合は こちらの公式のドキュメント を参照ください。

mcmc モードで、–with_ut–with_eval3d のオプションを指定することで利用できます。