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-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-knnconda 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 をインストール。
$ sudo yum install ffmpeg
$ 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 yum install epel-release
$ sudo yum install snapd
$ sudo systemctl enable --now snapd.socket
$ sudo ln -s /var/lib/snapd/snap /snap
$ sudo snap install colmap
convert.py でカメラ位置座標付き?の colmap ファイルに変換する$cd gaussian-splatting
[gaussian-splatting] $ conda activate 3dgs
(3dgs)[gaussian-splatting] $ python convert.py -s '{ path to }test_data' -
3D画像生成
ここからが機械学習による3D画像生成(3dgs)[gaussian-splatting] $ python train.py -s '{ path to }test_data'
gaussian-splatting/output/{xxxxxxxx-x}/point_cloud/iteraton_30000/point_cloud.ply
-
WEB公開
- WebGLの利用
splat.git のクローン$ git clone https://github.com/antimatter15/splat.git
[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/splatconst 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>