見出し画像

3D Gaussian Splattingをやってみる(Windows11での環境構築)

初めまして。Think & Craftでアルバイトをしております、白井雅也と申します。

最近、フォトグラメトリLiDAR, NeRF など写真や動画から3次元空間を再構築する技術が登場してきています。

本記事では、その手法の一つである3D Gaussian Splattingというものに着目し、Windowsのローカル環境で行うための手順を紹介いたします。


3D Gaussian Splatting の概要

3D Gaussian Splattingとは、複数視点の画像から3D空間を再構成する手法の一つである。複数視点の画像からポイントクラウドを作成し、機械学習によって各ポイントをパラメータのあるガウシアンに変換したデータとして記録する。そのため、レンダリング時は再度学習する必要が無く、記録されたパラメーターを用いて空間の特徴をボリュームデータとして復元することができる。これによってNeRFなどと比べて高速なレンダリングを可能にしている。

環境構築要件

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

https://github.com/graphdeco-inria/gaussian-splatting?tab=readme-ov-file

GitHubには上記のように書かれているが、GPUのVRAMは24GBではないものでも動作することが確認できた。以下に検証した環境を記載する。

検証環境

  • OS:Windows 11

  • メモリ:64GB

  • GPU:NVIDIA RTX 4070ti VRAM 12GB

使用したツール

  • Git

  • Visual Studio 2019

  • CUDA 11.8

  • Anaconda 23.11.0

  • COLMAP 3.9.1

  • FFmpeg

必要なツールのインストール

3D Gaussian Splattingの環境構築を行う上で必要になってくる以下のツールをそれぞれインストールしていく。

1.Git

GitHubのREADMEにサブモジュールまでクローンするように書かれているためGitをインストールしていく。
Gitを用いることによって、GitHubからサブモジュールも含めてインストールすることができるためである。
Gitのインストールは以下から行うことができる。
インストール方法についてはこちらを参照。

サブモジュールをインストールするためには末尾に --recursive を付けてやればよい。

git clone [リポジトリパス] --recursive

2.Visual Studio 2019

C++ Compiler for PyTorch extensions (we used Visual Studio 2019 for Windows)

https://github.com/graphdeco-inria/gaussian-splatting?tab=readme-ov-file#software-requirements

「PyTorchの拡張機能用のC++コンパイラーとしてVisual Studio 2019を使用した」とあるので、これに従ってVisual Studio 2019をインストールする。
Visual Studio 2019のダウンロードを選択するとログインを求められるのでMicrosoftのアカウントを用いてログインする。
"ダウンロードとプロダクトキー"という画面になるので、”Visual Studio Community 2019"ダウンロードボタンを押すことでexeファイルがダウンロードされる。

インストール後、Visual Studio Installerを立ち上げ、「C++によるデスクトップ開発」にチェックを付けてVisual Studio 2019のインストールを完了させる。

バッチファイルの実行
後の環境構築の際に報告されている問題の対策として、先に"vcvars64.bat"を実行しておく。
以下のパスをエクスプローラーのアドレスバーに直接打ち込むと、コマンドプロンプトの画面が立ち上がり少しすると消える。

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat

これは、Visual Studio の 64 ビット版のビルドツールや開発ツールを使うために環境変数やパスを設定するためのバッチファイルであり、FAQに解決策として提示されている。

3.CUDA

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

https://github.com/graphdeco-inria/gaussian-splatting?tab=readme-ov-file#software-requirements

今回は環境構築要件に基づいてCUDA 11.8をインストールしていく。
過去のバージョンはアーカイブとしてまとめられており、11.8はこちらからダウンロードが可能である。インストール方法はこちらを参照。
インストール済みの方はバージョンを確認しておくとよい。

※そもそもCUDAを使うには

CUDA(Compute Unified Device Architecture:クーダ)とは、NVIDIAが開発・提供している、GPU向けの汎用並列コンピューティングプラットフォーム(並列コンピューティングアーキテクチャ)およびプログラミングモデルである。

https://ja.wikipedia.org/wiki/CUDA

とあるようにCUDAはNVIDIA社が提供しているライブラリのことであり、NVIDIA社のGPUでのみ動作することができる。
AMD社のGPUなどを積んでいるPCでは動作できないので注意が必要である。
使用しているPCのGPUのモデルを確認するには、
タスクマネージャー>パフォーマンス>GPU
より確認できる(画像右上)。
詳しい確認の方法はこちらを参照.

この記事を読んでくださっている多くの方にとっては知りえた話かもしれないが、自分が最初に機械学習に手を出そうと思ったときに詰まったポイントなのであえて記載しておく。

PCにNVIDIAのGPUを積んでいないという方はLuma AIGoogle Colaboratoryを用いて3DGSを試すことができる。

4.Anaconda

Anacondaを用いることで、Pyhonでの開発に必要なデータ解析・数値計算などに適したライブラリを一括でダウンロード・管理することができる。
3D Gaussian Splattingを行う上でも、Anacondaを用いた仮想環境を用いることで必要なライブラリ等をダウンロードして使用する必要がある
Anacondaのインストール方法はこちらを参照。

※Anacondaを用いず、pipを用いて仮想環境を作成することも可能。その場合の3D Gaussian Splattingの環境構築はこちらを参照。

5.COLMAP

COLMAPとは複数の2D画像から3次元の点群データやカメラの位置推定を行うことができる。
GitHubのページに移ると下記のような画面になるので、
Assets > COLMAP-3.9.1-windows-cuda.zip (ここをクリックしてもダウンロード可能)
よりzipファイルをダウンロードできる。
この際、CUDA用のものをインストールすることによって最適化された状態で使用することができるのでNVIDIAのGPUを積んでいるPCを使用している場合はこちらをダウンロードする。

Cドライブ直下にGaussianSplatting用のディレクトリを新たに作成し、その中にGitHubからzipファイルをダウンロードし解凍しておく。

C:
├── GauusianSplatting
│ ├── COLMAP-3.9.1-windows-cuda

6.FFmpeg

FFmpeg(エフエフエムペグ)は動画音声を記録・変換・再生するためのフリーソフトウェアである

https://ja.wikipedia.org/wiki/FFmpeg

COLMAPを利用するために、FFmpegを用いて撮影した動画から画像を切り出す。
こちらのサイトを参考にFFmpegをダウンロードしPathを通すことでコマンドラインで使用できる。
インストールされているかわからない場合はコマンドプロンプトで"ffmpeg" と入力し下記の画面が出ていたらインストールされている証拠である。

Gaussian Splattingの環境構築

Anaconda Promptを用いて以下を実行していく。
GitHubのページからGauusian Splattingのリポジトリをクローン。

cd C:\GaussianSplatting

#サブモジュールを含めてリポジトリをクローンする
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive

クローンしてきたら、こちらの記事を参考に、"environment.yml" の中を書き換える。"environment.yml"はクローンしてきたgaussian-splattingのフォルダ直下にある。
デフォルトでは "environment.yml" の中のcudatoolkitバージョンが11.6で指定されているので、CUDA 11.8をインストールした方はほぼ必須で行った方が良い。
"environment.yml"をVisual Studio codeなどで開き、中身を以下のものに書き換えて保存しておく。

name: gaussian_splatting
channels:
  - pytorch
  - nvidia
  - conda-forge
  - defaults
dependencies:
  - plyfile=0.8.1
  - python=3.8.10
  - pip=22.3.1
  - pytorch=2.0.0
  - torchaudio=2.0.0
  - torchvision=0.15.0
  - cudatoolkit=11.8
  - tqdm
  - ninja
  - pip:
    - submodules/diff-gaussian-rasterization
    - submodules/simple-knn

この書き換えが終わったら以下を引き続きAnaconda Promptで実行していく。

#Windows only
SET DISTUTILS_USE_SDK=1

cd gaussian-splatting

#Anacondaを用いて仮想環境を作成する
conda env create --file environment.yml

以下のような画面になれば成功している。
これで3D Gausian Splattingを行うための環境が整った。

Anaconda Promptでの操作が終わったら一旦そのままにしておく。

エラーメッセージが表示される場合

"ERROR: Failed building wheel for diff_gaussian_rasterization"

"environment.yml"実行時のエラーメッセージ

このエラーメッセージはGitHubのIssuesページでもOpenなものになっており、pipを用いたインストールが正常に動作していない場合に生じることが確認されている。
解決方法としては、anacondaのpackagesであるvs2019_win-64をインストールすればよいようである。
その後CUDA11.8にあった適切なバージョンのライブラリやモジュールをpipを用いてそれぞれインストールしていく。

conda env create --file environment.yml

#ここでエラーが表示された

#作成した仮想環境を一度消去する
conda remove -n gaussian_splatting --all

#改めて手動で仮想環境を作成していく
conda create -n gaussian_splatting python=3.10

#仮想環境をアクティブにする
conda activate gaussian_splatting

#解決の肝となるvs2019_win-64をインストール
conda install -c anaconda vs2019_win-64

#CUDA11.8に対応したものをそれぞれpipを用いて手動でインストールしていく
pip install torch==2.0.0+cu118 torchvision==0.15.0+cu118 torchaudio==2.0.0+cu118 -f https://download.pytorch.org/whl/torch_stable.html

SET DISTUTILS_USE_SDK=1

pip install submodules\diff-gaussian-rasterization

pip install submodules\simple-knn

pip install plyfile

pip install tqdm

これは"environment.yml"を実行すれば,まとめてインストールされるものをエラーが生じるために手動で行ったので、再度"environment.yml"を実行する必要はない。手動で環境構築が終了したら次の手順に進む。

※本記事の最初に記載した検証環境とは別のPC2台で環境構築を試したが、OSがWindouws10のPCでのみこのエラーメッセージが生じたので、もしかしたらこれが原因なのかもしれない。同じ環境でエラーが吐かれた方の参考になればと思う。

独自のデータで3D Gaussian Splattingをやってみる

※環境構築が完了している場合は、以下のことだけ実行すればよい。

FFmpegを用いて動画を画像に分割する

ここでは、コマンドプロンプトを用いて、トレーニングに使うために用いたい動画を画像に分割する。
そのために新しく ”C:\GaussianSplatting” 内に”RAW_Data”というフォルダを作成し、最初はData01というフォルダにデータを格納していくことにする。
以下 "C:\GaussianSplatting\RAW_Data\Data01" 内で作業を進めるとする。Gaussian Splattingを行いたい動画データ"test.mp4"を用意したと仮定すると以下のようにコマンドを実行していけばよい。

#作業ディレクトリに移動する
cd C:\GaussianSplatting\RAW_Data\Data01

#”input”という名前でディレクトリを作成する
mkdir input

#作成したディレクトリ内に動画を分割して名前つきで保存
# -r [number]:フレームレートを指定するためのオプション.number = "2"と指定されている場合,動画から 2 フレーム/秒の連番の画像を書き出す.
#”test.mp4"に自分の動画のファイル名を入れる.
ffmpeg -i test.mp4 -r 2 input/image_%05d.jpg

成功するとinputの中に画像が切り出されていることが確認できる。

C:
├── GauusianSplatting
│   ├── COLMAP-3.9.1-windows-cuda
│   ├── gaussian-splatting
│   ├── RAW_Data
    │   ├── Data01
        │   ├── test.mp4
        │   ├── input
            │   ├── image_00001.jpg
            │   ├── image_00002.jpg
            │   ├── image_00003.jpg
            │   ├── image_00004.jpg
            │   ├── ・・・

トレーニング結果のクオリティ向上
分割された画像データは"C:\GaussianSplatting\RAW_Data\Data01"に格納されている。3D Gaussian Splattingを行った結果のクオリティを向上させるためには、FFmpegで用いて分割された画像データの中から、ぶれている部分を排除していく必要がある。
ただし、COLMAPを用いて3D点群を再構築するためには画像にオーバーラップしている部分が存在しなければならない。すなわち、「撮影の対象とした部分が2枚以上の画像に映っていなければならない」ということである。その点に注意してぶれている写真をある程度消していくのが良いと思われる。これによって最終的な出力結果でぶれているような仕上がりになる部分を減らすことができる。
必要な工程ではないが、綺麗な出力結果を得たい方はこのひと手間が重要である。
また、この工程を比較的減らしたい方はジンバルを用いるとぶれが大分軽減されるのでおすすめである。

仮想環境をアクティベート

再びAnaconda Promptを用いて下記のコマンドを実行する。
これによって仮想環境構築時に指定したバージョンのPythonライブラリ等が使用できるようになる。

#Gaussian Splatting をクローンしてきたディレクトリに移動する
cd C:\GaussianSplatting\gaussian-splatting

#仮想環境をアクティベート
conda activate gaussian_splatting

COLMAPのデータセットを作成

Gaussian SplattingはCOLMAPのデータセットを受け取りトレーニングを行うため、これを利用して入力画像のゆがみ補正とSfMなどの情報を含むCOLMAPのデータセットを作成する。
"--colmap_executable" 後にCOLMAPのファイルパスを指定.
"-s" 後に入力データのファイルパスを指定してやる.
Convert.py のコマンドライン引数などはこちらを参照。GitHubではImageMagickとーいう画像処理ツールも使っているが使用は任意である。

python convert.py --colmap_executable "C:\GaussianSplatting\COLMAP-3.9.1-windows-cuda\COLMAP.bat" -s C:\GaussianSplatting\RAW_Data\Data01

以下のようになっていれば正常に完了している.

トレーニング

COLMAPを用いて作成したデータをトレーニングする。
これによって3D Gaussian Splattingの処理を行った結果を取得することができる。

python train.py -s C:\GaussianSplatting\RAW_Data\Data01

完了すると以下のようになる

フォルダ名の変更

トレーニングが終了すると結果は、
"C:\GaussianSplatting\gaussian-splatting\output" 内に出力される。
トレーニングが行われた結果のファイルはランダムな文字列となっているので、マストではないがRAW_Data内に作成したフォルダ名と同じ名前に変更してやると後で分かりやすくなるのでおすすめである。

Ex)
[変更前] C:\GaussianSplatting\gaussian-splatting\output\a2ddf651-0
[変更後] C:\GaussianSplatting\gaussian-splatting\output\Data01

トレーニングデータを表示する

Windowsの場合は、GitHubのPre-built Windows Binariesからビルド済みのビューワーをダウンロードして使用すればよい。
ここをクリックしてもビューワーのzipファイルをダウンロードできる。
UbuntuまたはWindowsの場合でもCMakeを利用して各自でビルドすることも可能。

ここではビルド済みのものをダウンロードしたものとして話を進める。
ダウンロードされた”viewers.zip"を回答し、"C:\GaussianSplatting"下に移動しておくとわかりやすい。

C:
├── GauusianSplatting
│ ├── viewers

回覧したいデータを指定して,ビューワーを起動する。

C:\GaussianSplatting\viewers\bin\SIBR_gaussianViewer_app -m output\Data01

起動すると以下のような画面が立ち上がる。

ビューアーの操作

”Y"キーを押すことでキーボード操作とマウス操作の切り替えが可能。

$$
\begin{array}{|l:l|} \hline
\text{キー } & \text{動作 } \\ \hline
\text{W} & \text{前進} \\
\text{S} & \text{後退} \\
\text{A} & \text{左移動} \\
\text{D} & \text{右移動} \\
\text{E} & \text{上昇} \\
\text{Q} &\text{下降} \\ \hline
\end{array}
$$

$$
\begin{array}{|l:l|} \hline
\text{キー } & \text{動作 } \\ \hline
\text{I} & \text{見上げる} \\
\text{K} & \text{見下ろす} \\
\text{J} & \text{左旋回} \\
\text{L} & \text{右旋回} \\
\text{U} & \text{左に傾く} \\
\text{O} &\text{右に傾く} \\ \hline
\end{array}
$$

その他の主な操作

  • Camera Point View > Snap to Closet
    推定されたカメラ位置の中から一番近い場所に移動することができる。

  • Camera Point View > Snap to
    プラスとマイナスボタンを押すことで次のカメラ位置に移動できる。(FFmpegを用いて分割した画像と見比べてみても面白い)

  • 3D Gaussian Splatting > Scaling Modifier
    パラメーターの値を操作することで点群がSplatされていく様子を見ることができる。

ビューワーのみの使用

トレーニングデータが終わっており、ビューワーでの回覧を行いたい場合は以下の操作を行えばよい。

cd C:\GaussianSplatting\gaussian-splatting
conda activate gaussian_splatting
#Data00 ←ここの番号を表示したいファイル名に変更する
C:\GaussianSplatting\viewers\bin\SIBR_gaussianViewer_app -m output\Data00

技術的な話

本記事では3D Gaussian Splattingの技術的な説明は冒頭に記載した概要程度にとどめさせて頂くので、詳しい説明は論文を参照していただきたい。
日本語で詳しく書かれた解説記事も多数存在するので、気になる方は以下のサイトを参考にした頂ければと思う。

まとめ

本記事では写真や動画から3次元空間を再構築する技術の一つである3D Gaussian Splattingをローカルマシーンで動かす方法について紹介させていただきました。
NeRFに比べて高い解像度を実現させているだけでなく、トレーニングデータはplyファイルに格納されるため、データの取り回しや共有が行いやすいのが特徴です。それによってレンダリング時間が大幅に削減されているのが優れている点だといえます。
また、LiDARなどと違って特別なデバイスを必要としないため、カメラで写真を撮りながら動画も撮って、後から3D Gaussian Splattingで3Dデータ化してみる… ということもできるのが魅力かなと思っております。

最後まで読んでいただきありがとうございました!

参考サイト


新メンバー募集中!
Think & Craftでは一緒に働く仲間を募集しています。
ご興味のある方はお気軽にRecruitページよりご連絡ください。


Think & Craft 公式SNS 
X:https://twitter.com/thinkandcraft
Instagram:https://www.instagram.com/_thinkandcraft/
Facebook:https://www.facebook.com/thinkandcrafttokyo/
YouTube:https://www.youtube.com/@thinkandcrafttokyo

Think & Craft Webサイト


この記事が参加している募集

仕事について話そう