3D Gaussian Splatting 動画から3Dのシーン生成を解説
「3D Gaussian SplattingのWindows環境構築手順を解説」という記事で、3D Gaussian Splattingのwindowsのローカル環境で構築する方法を紹介し、Anaconda上で独立した生成環境の構築を行いましたが、今回は実際に3D Gaussian Splatting を利用して2Dの動画から、3Dシーンを構築するまでを解説したいと思います。
生成に必要なソフトウェアをインストール
FFmpeg
動画を静止画に書き出したり、動画の形式を変換したりと動画ファイルを様々な形で変換してくれるFFmpeg。3D Gaussian Splattingの構築には200枚から1000枚の画像が必要とされています、そのため写真を一枚ずつ撮影するより、動画を撮影して静止画に切り出したほうが手間が少ないため、FFmpegを利用します。
ffmpeg orgよりダウンロードし、パスを通します。詳しいインストール方法やパスの通し方については「WindowsにFFmpegをインストールして利用できるようにパスを通す」をご覧ください。
COLMAP
3D Gaussian Splattingでのトレーニングは画像だけではなく、カメラ位置の推定も必要となります。COLMAPは複数の写真からカメラ位置や向きを推定してくれるツールです。CUDA対応verが必要なためgithubから「COLMAP-3.8-windows-cuda.zip」をダウンロードしましょう。
FFmpegと同じ原理で、pathの環境変数の編集追加から展開した先へパスを通しておきましょう。
ImageMagick
画像処理のため必要なツール「imagemagickの公式」から最新版の「ImageMagick-7.1.1-15-Q16-HDRI-x64-dll.exe」をダウンロード、インストーラーのためインストールすれば自動的にパスが通ります。
トレーニング準備
今回は撮影した動画を静止画に書き出してトレーニングする方法を解説します。
FFmpegで動画から静止画書き出し
動画を設置したディレクトリでコマンドプロンプトを開き以下のコマンドを実行します。Anaconda promptではないのでご注意ください。
mkdir input
ffmpeg -i GH010065.MP4 -r 2 input/image_%05d.jpg
コマンドを実行すると動画の格納フォルダにinputフォルダが生成され、2fpsで書き出されます。
COLMAPで歪み補正とデータセットを作成
gaussian-splattingをインストールしたフォルダから、Anaconda promptにて、以下のコマンドで構築した環境を呼び出し
conda activate gaussian_splatting
convert.pyを利用して、COLMAPのデータセットを受け取りトレーニングを行います。先ほどの書き出した画像をconvert.pyに渡しデータセットを作成します。
python convert.py --colmap_executable "COLMAPを設置した場所\COLMAP.bat" -s データフォルダ場所
COLMAP.bat、データフォルダの場所、いずれもフルパスで記載します。inputフォルダ事態ではなくて、inputフォルダが格納されている場所となりますのでご注意ください。
上記コマンドを実行すると、imagesフォルダに歪み補正を行ったら画像ファイルが格納され、distroted、sparse、stereoなどのフォルダが生成されカメラのデータ(位置、向き、ゆがみなど)のファイルが格納されます。
これでトレーニング準備は完了です。
トレーニングの実施
conda activate gaussian_splattingをインストールフォルダでAnaconda promptで、構築した環境を呼び出した後、以下のコマンドで構築を実行します。
python train.py -s データ格納フォルダまでのパス
データ格納フォルダは先ほどconvert.pyで指定した場所と同じとなります。
トレーニングが完了すると gaussian-splattingのoutputフォルダ内に「123456ab-1」の様なランダムな文字列のフォルダが作成されていれば、トレーニングは完了となります。
トレーニングデータの準備がすぐにできない方へ
トレーニングデータとなるデータが準備できない方は3D Gaussian SplattingのプロジェクトページのScenesからサンプルのトレーニング前データがダウンロードできるため、そちらで試してみましょう。
ビューワー編へ
今回生成したトレーニングデータを読みこんで、3Dシーンを読み込んで自由視点で閲覧していきます。