本来は別の記事を書く予定でした
複数枚の写真から高品質な3Dシーンを生成する手法の一つである3D Gaussian Splattingについて、ファイルサイズを少なくする方法があるようなので試してみようとしたのが本気の目的となります
元ネタは以下になります
https://github.com/KeKsBoTer/c3dgs
・・・が、最終的に環境構築が出来ずに実施できませんでした
なので、内容を変更して3D Gaussian Splattingの生成環境のおさらいと、Webブラウザで動作するビューワーを紹介しています
この記事の最後のほうに実施した内容を記載していますので参考にしてください
本エントリでは3D Gaussian Splattingの環境設定、データ作成と、WebGLを利用したビューアの実験まで行っています
Gaussian Splattingについては、過去に一度記事にしていますので参考にしてみてください
今回の環境は以下になります
・Windows11
・GeForceRTX 2080 VRAM 8G
・Memory 24GB
・CPU Core-i7 9700K
環境構築
Anacondaを利用して環境を構築します
まずはオリジナルのGaussian Splattingの環境構築を参考にし、環境をセットアップします
自分は以下の手順で作成しました
今回はF:/Project/MachineLerning/ フォルダに移動し、リポジトリをクローンしました
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
gaussian-splattingフォルダが出来るため、このフォルダに移動し、以下のコマンドで環境を作成
SET DISTUTILS_USE_SDK=1 # Windows only
conda env create --file environment.yml
conda activate gaussian_splatting
ここまでの手順で、gaussian_splattingを利用するための環境がとのいました
上記の3番目のコマンドを実行すると、環境が切り替わったことが確認できると思います

トレーニングデータを作成するための環境構築
トレーニングに利用する画像を作成するための環境を構築します
今回は動画を作成し、その動画から数秒置きに静止画を生成することでトレーニングに利用する大量の静止画を作成します
環境構築の方法は以下の記事を参考にしました
https://taziku.co.jp/blog/3d-gaussian-splatting-traning
FFmpegの設定
公式ページからダウンロードします
https://ffmpeg.org/
今回は以下のリンクからWindowsバイナリをダウンロードしました


FFmpegにパスを通す
パスを通します
今回は「F:\Project\MachineLerning\tools\ffmpeg-7.0.1-essentials_build\bin」にツールを展開しました
システム環境変数の編集から上記フォルダへのパス設定を追加します


パス設定後、コマンドプロンプトから以下のコマンドを実行するとバージョン情報が表示されます
ffmpeg -version

COLMAPの設定
画像からカメラの位置を推測するためのツールを設定します
公式ページからダウンロードします
https://demuc.de/colmap/
リンクをたどっていくとGitHubのリリースページにたどり着くので、そこからCUDA対応版をリリースしました

FFmpegと同じく、環境変数にパスを通します
ImageMagicの設定
公式ページからダウンロードします
https://imagemagick.org/index.php

インストーラーが付属しているため、画面の指示に従って作業すれば設定が完了します
トレーニングの準備
GoProを利用してフィギュアの動画を撮影しました
この動画をもとに3Dのシーンを構築してみます
今回は環境設定で準備したgaussian-splattingフォルダ内にtrain_dataフォルダを作成し、その中に撮影した動画を置きました
さらに、inputフォルダも作成しました
コマンドプロンプトを開き、動画を設置したディレクトリに移動後、以下のコマンドを実行します
(動画ファイル名は適宜変更してください)
ffmpeg -i GH010376.MP4 -r 20 input/image_%05d.jpg
今回、動画が1分と短いため、20fpsで書き出し1200枚ほどを学習データとして使用するようにしました
(余談ですがGoProで1080の60fpsで撮影しないとFFmpegでうまく処理できませんでした)
COLMAPを利用した歪み補正データの作成
Anacondaで作成したgaussian_splattingの環境でrクローンしたリポジトリフォルダに移動し、以下のコマンドを実行します
COLMAP.batの設置場所と、先ほどinputフォルダを準備したフォルダ(inputフォルダではない!)をフルパスで指定します
python convert.py --colmap_executable "F:\Project\MachineLerning\tools\COLMAP-3.9.1-windows-cuda\COLMAP.bat" -s F:\Project\MachineLerning\gaussian-splatting\train_data
トレーニングの実施
トレーニングを開始します
同じくリポジトリフォルダのまま、以下のコマンドを実行します
python train.py --resolution 700 -s F:\Project\MachineLerning\gaussian-splatting\train_data
この時のGPU使用状態は以下のようになっていました
試したところ、専用GPUメモリだけで処理しないと学習時間が非常に伸びてしまうため、–resolutionオプションでVRAM内に収まるように調整したほうがよさそうです
(学習中にVRAM使用量が徐々に増えていくため、ある程度余裕を持たせたほうが良い)

終了しました

トレーニングが終了すると、\gaussian-splatting\output\ee9de029-cのようなランダムなフォルダが生成されているはずです
WebGLを利用したビューアーを試してみる
今回はこちらを利用してみました
https://github.com/antimatter15/splat
まずはリポジトリをクローンします
git clone https://github.com/antimatter15/splat.git
クローンしたフォルダ内の「index.html」を開きます
(デフォルトで電車のシーンが表示されます)

今回のビューアは.splat形式のファイルを表示するため、.ply形式から変換する必要があります
が、変換方法は簡単で、ブラウザ上に.plyをドラッグアンドドロップすれば.splatに変換できます

ブラウザにシーンが表示されると同時に、.splatファイルのダウンロードが始まります
ほか、urlパラメータにsplatファイルを指定すれば、そのシーンを表示することもできます
ほか、splatファイルに変換した時点で、かなり容量が削減されました

ここで気になるのは「サイズ容量が減ったことで、品質が劣化していないのか」ということ
今回は公式ページで用意されているプリビルドバイナリを利用しました
https://github.com/graphdeco-inria/gaussian-splatting#pre-built-windows-binaries
それぞれの比較は以下の通り
↓公式のビューア

↓Webビューア

元データが悪いので何ともですが、気持ち公式ビューアのほうが綺麗かな?と感じる程度でした
ちなみに「polycanvas」というサイトでplyファイルが閲覧できました
これなら、plyファイルだけ配布して、上記のページで閲覧を楽しんでもらうこともできますね!
以上
ということで、今回は3D Gaussian Splattingの環境設定とWebビューアの紹介を行いました
映像から3Dシーンを構築できるのはやっぱり楽しいですね!
これを利用すればバイクツーリング先の風景や、バイクを乗り換えるときに思い出を3Dシーンとして残すことも出来そうです
コスプレイヤーさんとかも3D Gaussian Splattingで撮影してみたいですね!
とりあえず、つよつよGPUが欲しくなりました
Compressed 3D Gaussian Splatting for Accelerated Novel View Synthesisを試す・・・はずが、環境構築できず
手順はGirHubのReadMeを参考にします
https://github.com/KeKsBoTer/c3dgs
まずはリポジトリをクローンします
git clone https://github.com/KeKsBoTer/c3dgs.git
F:/Project/MachineLerning/c3dgs となるようにクローンしました
こちらについてはCUDA12系が必要だったため、アップデートを行いました
(マシンにはCUDA11系がインストールされていたため)
ここでちょっとしたトラブル発生
CUDA12系インストールでエラーが発生しました

nVidiaフォーラムによると、NsightComputeについて、すでに同一 or より新しいバージョンがあるとインストールに失敗するとのこと
その場合はカスタムインストールを選択し、NsightComputeのチェックを外すといいらしいです
・・・が、自分の環境ではそれでもだめだったので、最終的にCUDA12.2をインストールしました

あらためてAnacondaで環境を構築します
コマンドプロンプトでリポジトリフォルダに移動した後、以下のコマンドを実行します
この後、以下のコマンドを利用して環境構築を行いましたが、様々なエラーで環境構築に失敗しました
conda env create --file environment.yml
エラーの詳細はメモしていませんが、おおむね以下の内容です
・pytourchのバージョンが異なる(CUDA12を要求されているのに、pytourchは11.6が指定される)
・warning C4067: プリプロセッサ デ・・・ みたいなエラーでインストールが中断
心折れたので、また数か月後 or 数年後にチャレンジします
環境構築で手間取るのはだめだわ・・・