3D Gaussian Splattingを使ってみる その1(環境構築、WSL2 Ubuntu 20.04)
はじめに
今回は3D Gaussian Splattingを利用するために、環境構築を行いました。
スマートフォンのアプリとして提供されているScaniverseで3Dスキャンをして3Dモデルを作成していたのですが、その技術として3D Gaussian Splattingが利用されています。
▼NVIDIAのPhysical AIの発表でも3D Gaussian Splattingが取り上げられていました。
私が普段使っているiPhone 8ではScaniverseを利用できないので、PCで実行したいなと思っています。
▼以前の記事はこちら
環境を構築する
CUDAのバージョンの変更
環境を構築するにあたってCUDAなどの依存があり、今回はWSL2のUbuntu環境で色々試して構築しました。
▼WSL2のUbuntu 20.04は以下の記事でダウンロードしています。
READMEにはCUDA 11.8で確認しているとのことだったので、CUDA 11.8に切り替えます。
▼GitHubのリポジトリはこちら
https://github.com/graphdeco-inria/gaussian-splatting
▼予めnvidia-smiで確認すると、CUDA 12.6がインストールされていました。

nvidia-smiで確認できるのはWindows側のCUDAのバージョンで、WSL2環境のCUDAのバージョンはnvcc --versionで確認できるようです。
▼異なるバージョンが入っていたりします。

CUDAのupdate-alternativesを利用する方法が良さそうだったのですが、今回は試していません。CUDAのバージョン切り替えは今後必要になりそうなので、別の機会にしっかり検証したいなと思っています。
▼以下の記事が参考になりそうでした。
https://note.com/kmykpurin/n/n2bf91dc63f16
ChatGPTに相談しながらコマンドを実行していきました。
まず元々入っていたものを削除します。
sudo apt-get --purge remove "cuda*"
sudo apt-get --purge remove "nvidia*"
sudo apt autoremove -yUbuntu 20.04、CUDA 11.8用のパッケージをインストールしていきます。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2004-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda最後に.bashrcに環境変数を追加して、ターミナルが起動したときに反映されるようにします。
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrcnvcc -Vまたはnvcc --versionでCUDAのバージョンを確認しました。
▼11.8になっていました。

Minicondaのインストール
condaコマンドを実行するようだったので、今回はMinicondaをインストールしました。
▼インストール方法は以下のページに書かれています。
https://www.anaconda.com/docs/getting-started/miniconda/install#macos-linux-installation
Linuxのx86用のコマンドでインストールを行いました。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ~/Miniconda3-latest-Linux-x86_64.sh
source .bashrc▼condaの環境が有効化されています。

Gaussian Splattingのインストール
Gaussian Splattingのリポジトリをダウンロードし、conda環境を作成して有効化します。
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
cd gaussian-splatting
conda env create --file environment.yml
conda activate gaussian_splatting▼再度ターミナルを開いたときは、最後のコマンドを実行するとアクティベートされます。

サンプルを実行する
用意されていたCOLMAPを利用して、3Dモデルの再構築を試してみました。
READMEの最初にリンクが載せられている、T&T+DB COLMAP (650MB)をダウンロードしました。
▼画像の上のところにリンクがあります。

実行ディレクトリにダウンロードしたフォルダを追加して、コマンドを実行しました。
python train.py -s tandt_db/tandt/train/▼処理が始まりました。7000と30000があるようです。

処理が終了後、outputフォルダに結果が保存されていました。
▼plyファイルが3Dモデルです。

ブラウザで3D Gaussian Splatting形式のplyファイルを編集できる、SuperSplatを利用して確認しました。
▼SuperSplatはこちら
▼iteration_7000の結果はこちら

▼iteration_30000の結果はこちら

見た感じでは、7000と30000でどこが違うのか分からないような感じでした。それよりも周りの靄が目立つという印象です。
最後に
3D Gaussian SplattingをPCで実行できるようになったので、Scaniverseでスキャンしたときよりも広い環境に対して3Dモデルを再構築できるのか気になるところです。Scaniverseは注視していないところのトリミングが楽で手軽だったのですが、PCでもこのあたりを改善しているツールはあるのでしょうか。
サンプルは実行できたので、画像や動画に対する3Dモデルの再構築を試そうと思っています。

