3D Gaussian Splatting を試す
2次元画像から3次元画像を生成する方法の一つとして3D Gaussian Splatting という手法が2023年に公開された。
これは興味の赴くままに試してみた記録である。
実行環境
- OS : AlmaLinux9.4
- Mem : 19.4G
- CPU : Intel Core i7-3770K
- GPU : NVIDIA GeForce RTX 3060 (12GB GRAM)
環境構築
-
nvidiaディスプレイドライバーのダウンロードとインストール
https://www.nvidia.com/ja-jp/drivers/からドライバーを検索しダウンロード
実行属性つけて実行
$ chmod +x NVIDIA-Linux-x86_64-550.120.run
$ sudo ./NVIDIA-Linux-x86_64-550.120.run -
CUDA 11.8 インストール
CUDAは最新版ではなく11.8を使わなければいけない。
$ sudo yum install cuda-toolkit-11-8
環境変数設定
$ export PATH="/usr/local/cuda/bin:$PATH"
$ export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH" -
anaconda環境構築
$ mkdir -p ~/miniconda3
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
$ bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
$ rm ~/miniconda3/miniconda.sh -
gitインストール
gitがインストールされてなければ
$ sudo yum install git
-
3D Gaussian Splittingのソースをクローン
$ git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
-
gaussian_splattingの仮想環境を構築
gaussian-splatting下に移動してenvironment.ymlを編集した。環境名を 3dgs に変更、cudatoolkit等にバージョンを設定し
name: 3dgs
channels:
- pytorch
- conda-forge
- defaults
dependencies:
- cudatoolkit=11.8
- plyfile
- python=3.12
- pip=24.2
- pytorch=2.4.1
- torchaudio=2.4.1
- torchvision=0.19.1
- tqdm
- pip:
- submodules/diff-gaussian-rasterization
- submodules/simple-knn$ conda env create --file environment.yml
raise OSError('CUDA_HOME environment variable is not set. '
OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.
$ conda activate 3dgs
(3dgs) $ python
>>>import torch
>>>print(torch.__version__)
2.4.1
>>> -
pytorch のインストール
PyTorchサイトから条件を選択しコマンドでインストールする。Computer Platformは必ずCUDA11.8を選ぶ。
PackageがPipの時のコマンド(3dgs) $ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
(3dgs) $ conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
$ conda activate 3dgs
(3dgs) $ python
>>>import torch
>>>print(torch.__version__)
2.4.1+cu118
>>> -
submoduleのインストール
(3dgs) $ pip3 install submodules/
作業の流れ
動画撮影→静止画に分割→COLMAPデータ作成→3D画像生成→WEB公開
-
動画撮影
スマホ等で撮影 -
静止画に分割
動画分割用に ffmpeg をインストール。
epel repositoryを有効化。$ sudo dnf -y install https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm $ sudo dnf install yum-utils -y $ sudo dnf config-manager --enable crb
Fusion repository を追加して
$ sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm -y $ sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm -y
ffmpeg,ffmpeg-develのインストール
$ sudo yum install ffmpeg ffmpeg-devel
$ mkdir test_data && cd test_data
[test_data] $ mkdir input && cd input静止画像に分割
[test_data/input] $ ffmpeg -ss <開始時間[s]> -i path_to/video.mp4 -t <切り出し時間[s]> -r <1sに何枚切り出すか> -q:v <画質クオリティ1~4> -f image2 %06d.jpg
-
COLMAPデータ作成
colmapをソースからコンパイルしてインストール
必要なパッケージのインストール
# 基本的な開発ツール $ sudo dnf groupinstall 'Development Tools' # 必要なライブラリ $ sudo dnf install \ boost-devel \ eigen3-devel \ flann-devel \ freeimage-devel \ metis-devel \ glog-devel \ gtest-devel \ gmock-devel \ sqlite-devel \ glew-devel \ qt5-devel \ qt5-qtbase-devel \ qt5-qtdeclarative-devel \ qt5-qttools-devel \ qt5-qtwebkit-devel \ CGAL-devel \ ceres-solver-devel \ lz4-devel \ suitesparse-devel \ openblas-devel
colmapソースコードのダウンロードとコンパイル、インストール$ git clone https://github.com/colmap/colmap.git $ mkdir colmap/build && cd colmap/build [colmap/build] $ cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES=native [colmap/build] $ ninja [colmap/build] $ sudo ninja install
convert.py でカメラ位置座標付き?の colmap ファイルに変換する
$cd gaussian-splatting [gaussian-splatting] $ conda activate 3dgs (3dgs)[gaussian-splatting] $ python convert.py -s '{ path to }test_data'
test_data/images フォルダーが作られ、その下に colmap ファイルができる。
-
3D画像生成
ここからが機械学習による3D画像生成(3dgs)[gaussian-splatting] $ python train.py -s '{ path to }test_data'
gaussian-splatting/output 下にランダム文字列のフォルダーが作られ、以下のように目的のファイルが作られる。
gaussian-splatting/output/{xxxxxxxx-x}/point_cloud/iteraton_30000/point_cloud.ply
-
WEB公開
- WebGLの利用
splat.git のクローン
$ git clone https://github.com/antimatter15/splat.git
plyをsplatに変換
[splat] $ python convert.py -o outfile.splat {point_cloud.ply へのpath}
- 公開サイトの用意
splatフォルダー下のindex.html、main.jsを公開するフォルダーの中に配置。例えば
[splat] $ sudo mkdir /var/www/html/splat [splat] $ sudo cp index.html main.js /var/www/html/splat
main.js を自サイト用に編集。ファイルでは750行目辺り。
const url = new URL(
// "nike.splat",
// location.href,
params.get("url") || "train.splat",
//"https://huggingface.co/cakewalk/splat-data/resolve/main/",
"https://{公開アドレス}/splat/", ); - WEBへ公開
outfile.splatを/var/www/html/splat/の下に置き公開。アクセスは下記の通り
https://{公開アドレス}/splat/?url=outfile.splat
- WebGLの利用
コメント
3D Gaussian Splatting を試す — コメントはまだありません
HTML tags allowed in your comment: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>