SIGGRAPH 2023で発表されたGaussian Splatting を試してみます。以前のNeRFとは違って、小データ、学習も早いということで、かなり自分としても楽しみなものでした。ここではWindows環境で試してみたまでの流れを紹介します。
環境の構築
先に挙げたリポジトリでコード一式が含まれているので、これを動くように環境を整えていきます。
とてもわかりやすく説明をしているサイトがあり、私もそれを見て環境を整えました。 “E:\example\GausianSplatting” というフォルダを作成して、そのなかにリポジトリを置く構成です。
ただしImageMagickはインストールせず、実行環境も VRAM 24GBはないのでその点が異なります。
CUDA 11.8をインストールの際にNVIDIAドライバが更新となりました。バージョンは 522.06 です。最近ブラックアウト問題が発生しているNVIDIAドライバの話を聞いたので、ドキリとしましたが大丈夫なようです。
注意点として、Visual Studio Professional を使用している場合には、先のページで記載されているcl.exeへのパスを通す部分において読み替えが必要です。以下のコマンドで、環境変数を更新するようにします。
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"
学習
私の場合には、スマホで動画撮影をして、そこから画像データを切り出すという方法を選んでいるので、以下の手順で学習・トレーニングを実行しました。
動画から画像を切り出す
以下のコマンドを実行して画像を切り出しました。ここで my_movie.mp4 はスマホで撮影した動画ファイルです。これを E:\example\GausianSplatting に仮置きしています。”-r” オプションは切り出すときのレート指定です。今回は 2fps で切りだしています。
cd E:\example\GausianSplatting
md input
ffmpeg -i my_movie.mp4 -r 2 output/image_%05d.jpg
COLMAP データセット作成
以下のコマンドを実行します。COLMAPの指定には、COLMAP.batのパスを入れるものとして、exeを指定するのではない点に注意です。”-s “オプションでは、前セクションで用意した input フォルダがあるフォルダをフルパスで指定します。
cd E:\example\GausianSplatting\gaussian-splatting
python convert.py --colmap_executable "E:\example\GausianSplatting\COLMAP\COLMAP-3.8-windows-cuda\COLMAP.bat" -s E:\example\GausianSplatting\gaussian-splatting
このコマンドは画像の枚数や解像度によっては、実行時間がそこそこ掛かるようです。
トレーニング
以下のコマンドを実行してトレーニングを行います。この処理には時間が掛かるのと、VRAMを多く消費します。処理が完了すると、 output/(…) なフォルダが作成され、結果が書き出されます。
python train.py -s E:\example\GausianSplatting\gaussian-splatting
私の場合には VRAM 24GB 搭載されていないこともあり、用意したデータセットでは Out of Memory が出てしまうこともありました。
そこで、解像度が 1.6K 以上はスケールがかかるようなので、元データに 4K は不要と考えました。今回は FullHD 程度、撮影秒数も 1分に満たないくらいのデータで試してみました。(オプションを変えると解像度の部分は変更できる模様ですが、デフォルトではスケールされるということで)。このくらいのものであれば 12GB のメモリでも、Gaussian Splatting を試してみることが出来ます。実際、使用量を目視していた範囲では、8GB も使用していないため、8GB モデル品でも十分に試せるのではないかと思います。
低VRAM量で試す際、”–densify_grad_threshold” というパラメータを変更するというものも方法の1つのようです。実際試してみたところ、どのくらい有効なものか判断が難しいので、入力データ量を減らす方向で進めました。
実行
Windows のビューワーを リポジトリのReadmeに記載されたリンクをクリックして取得します。
取得したらファイルの内容を適当なところに展開します。私の場合は、 “E:\example\GausianSplatting\viewers” に展開を行いました。この場所に対してパスを通しておきます。
set PATH=%PATH%;E:\example\GausianSplatting\viewers
以下のコマンドを実行して、ビューワーを起動します。ここで指定している -m オプションは学習結果が格納されたパスとなります。リポジトリを背馳した場所のoutputフォルダ以下になんらかのフォルダが出来ているので、それを指定します。
cd E:\example\GausianSplatting\gaussian-splatting
SIBR_gaussianViewer_app -m output\febb5294-a
実行すると以下のような感じでした。 WASDで移動、IJKLで視線の方向を変えるという操作です。
まとめ
このくらいのレベルのものが1分弱の動画撮影で、作成できるのは面白いですね。以前に試してみたNeRFのものよりも手軽に試せるようになるので、今後の発展も期待できそうです。
その他
いろいろ試してみた結果、スマホのカメラ設定も影響がありそうです。
- オートフォーカスをオフ
- ホワイトバランスの自動調整をオフ
このような設定を入れると、生成結果が安定する傾向にあるように感じました。
コメント