PR
生成AI

Gaussian Splatting をUbuntuで実装

スポンサーリンク
スポンサーリンク

はじめに

 Gaussian Spattingという技術が3D空間の再現技術として注目を浴びているそうです。実際に以下URLを見て頂ければわかると思いますが、これ、動画から静止画を切り抜きして作られたものです。Street Viewのように3D空間っぽく見せるものがありますが、これは本当に動画から3次元座標を特定し、その上に色を良い感じで保管して3Dにするという代物のようです。NeRFという技術がこの前にあったそうですが、質感が一気に上がったというところとレンダリングのスペックが不要というのが良い点だそうです。

3D Gaussian Splatting for Real-Time Radiance Field Rendering
3D Gaussian Splatting for Real-Time Radiance Field Rendering

 人やモノの3Dモデル作成や3D空間の作成、ホログラム映像など幅広い範囲で応用できそうな気がしています。

専門家ではありませんが、面白そうなので記事を見ながら実装してみました。最初はanaconda(windows)で実装されてる方が多かったのですが、文字コードあたりのエラーがどうしても取れず、面倒になったので、Ubuntuで実装してみました。しかし、その後でviewerをUbuntu上でエラーが出たので、viewerはwindowsで動かしています。騙し騙しで動かしてみました。

環境

  • windows 11のWSL
  • Ubuntu 22.04.01 LTS
  • 12th Gen Intel(R) Core(TM) i7-12700F 2.10 GHz
  • Geforce RTX 3060Ti

実装

AWS上でのGaussian Splattingのモデル生成

AWSのubuntuで実装する手順がありますので、これを参考に実装します。私が使ってるのはWSL2です。

Gaussian Spattingに対応したcudaのバージョンで実装しないとエラーになる可能性があります。2023.12.12時点では、version 11.8です。

CUDA 11.8のインストール

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb
$ sudo apt-get update
$ sudo apt-get -y install cuda-11-8
$ 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
$ echo export CUDA_PATH="/usr/local/cuda-11.8/" >> ~/.bashrc
$ source ~/.bashrc

COLMAPの依存ライブラリのインストール

$ sudo apt-get -y install git cmake ninja-build build-essential libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libeigen3-dev libflann-dev libfreeimage-dev libmetis-dev libgoogle-glog-dev libgtest-dev libsqlite3-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libceres-dev gcc-10 g++-10 imagemagick

COLMAPのビルドとインストール

$ git clone https://github.com/colmap/colmap.git
$ cd colmap
$ mkdir build
$ cd build
$ export CC=/usr/bin/gcc-10
$ export CXX=/usr/bin/g++-10
$ export CUDAHOSTCXX=/usr/bin/g++-10
$ cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES=86
$ ninja
$ sudo ninja install

Anacondaのインストール

$ wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
$ bash Anaconda3-2023.09-0-Linux-x86_64.sh # Enter, accept -> yes, Enter, auto initialize -> no
$ echo source ~/anaconda3/etc/profile.d/conda.sh >> ~/.bashrc
$ source ~/.bashrc

Gaussian SplattingのPython環境構築

$ git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
$ cd gaussian-splatting
$ conda env create --file environment.yml

ここまででエラーが出なければ環境のインストールは成功しています。

データ作成

動画を撮影します。

この動画から静止画を作成します。このデータが細かくすると精度が良いらしいです。私は20秒の動画に対して、60枚程度だったので、3フレームくらいでとりました。今回は試しなのでもっと良い取り方があるのではと思いながら、適当にやってます。

cd gaussian-splatting
mkdir dataset
cd dataset
mkdir input
ffmpeg -i my_movie.mp4  -r 3 input/image_%05d.jpg

以下のように静止画が作成できればOKです。

学習

COLMAPの前処理

画像のゆがみ補正やカメラ姿勢を算出します。

成功すればdatasetディレクトリの中にファイルたくさん出てきます。

conda activate gaussian_splatting
cd gaussian-splatting
python convert.py -s ~/dataset

モデルの学習

python train.py -s ~/dataset

これは3060Tiという非力なマシンでもあるので、60枚程度ですが、10分はかかったような気がします。

そうすると、gaussian-splatting/outputに呪文のようなものディレクトリが作成されています。

viewer

SIBR_viewersをビルドすれば良いはずなのですが、うまくいかず。(理由は忘れました)

windows版は以下urlのViewers for Windowsコンパイル済みのものがgithubに落ちてるので、それを使ってモデルを再生します。

3D Gaussian Splatting for Real-Time Radiance Field Rendering
3D Gaussian Splatting for Real-Time Radiance Field Rendering

先ほどのoutput以下に作成されたフォルダをwindowsでアクセスできるところに移動してviewerで参照します。

コマンドプロンプトで以下のようなコマンドを叩きます。フォルダの位置関係は適宜調整ください

SIBR_gaussianViewer_app.exe -m outputd035c4-1

マウスと使うと以下の動画のように操作できます。きちんと撮影をすれば、アプリやブラウザなどで使える3Dデータを作成できるような気がしております。28秒あたりから再生しています。

タイトルとURLをコピーしました