3D Gaussian Splattingを使ってみる その3(GS2Meshの環境構築とメッシュモデルの作成、WSL2 Ubuntu 20.04)

はじめに

 今回はGS2Meshを用いたメッシュモデルの作成を試してみました。

 これまでの記事で試していた3D Gaussian Splatting (3DGS)が利用されています。実際にゲームエンジンや3Dモデルとして利用するときには、3DGSのデータ形式よりもメッシュの方が使い勝手がいいので、メッシュ化する方法を探しているときに見つけました。

 3Dモデルの再構築に関する技術はどんどん研究が進んでいるという印象です。私は農業ロボットの研究に取り組んでいるので、植物の3Dモデルを再構築するのに役立てたいと考えています。

▼GS2Meshのページや説明動画はこちら

https://gs2mesh.github.io

▼以前の記事はこちら

Unreal Engine 5を使ってみる その15(Scaniverseのデータ取り込み2回目、SuperSplat)

はじめに  今回はScaniverseで3DスキャンしたデータのUnreal Engine 5 (UE5)への取り込みについて、再び試してみました。  以前の取り込み方だとScaniverseでの見た目と…

Jetson Xavierを使ってみる その3(ROSの環境構築、USBカメラ映像のPublish)

はじめに  今回はJetson XavierでROSの環境を構築して、USBカメラの映像をPublishしてみました。  ROSの通信で画像を送信して、物体検出や遠隔操作などを試したいなと思…

環境を構築する

 GS2MeshにはGaussian Splattingのリポジトリが含まれており、CUDAのバージョンが同じで11.8になっています。

▼Gaussian Splattingを利用できる環境は以下で構築済みです。この環境でGS2Meshの環境構築を行います。

3D Gaussian Splattingを使ってみる その1(環境構築、WSL2 Ubuntu 20.04)

はじめに  今回は3D Gaussian Splattingを利用するために、環境構築を行いました。  スマートフォンのアプリとして提供されているScaniverseで3Dスキャンをして3Dモデル…

▼GS2MeshのREADMEを参照しながら進めていきます。

https://github.com/yanivw12/gs2mesh/tree/main

 リポジトリをクローンし、Conda環境を有効化します。

git clone https://github.com/yanivw12/gs2mesh.git
cd gs2mesh
conda create --name gs2mesh python=3.8
conda activate gs2mesh

▼gs2meshのConda環境が有効になりました。

 念のためCUDAのバージョンを確認しておきました。

▼11.8になっています。

 必要なパッケージをインストールします。

conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 cudatoolkit=11.8 colmap -c pytorch -c nvidia -c conda-forge
pip install -r requirements.txt

 重みに関するものもそれぞれダウンロードしておきました。

cd third_party/DLNR
mkdir pretrained
cd pretrained
wget https://github.com/David-Zhao-1997/High-frequency-Stereo-Matching-Network/releases/download/v1.0.0/DLNR_Middlebury.pth
wget https://github.com/David-Zhao-1997/High-frequency-Stereo-Matching-Network/releases/download/v1.0.0/DLNR_SceneFlow.pth

cd third_party/segment-anything-2/checkpoints
wget https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt

cd third_party/GroundingDINO
mkdir weights
cd weights
wget https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth

動画ファイルから生成する

 3DGSで3Dモデルを再構築したときと同じ動画で、GS2Meshでも処理を行ってみました。

▼こちらの約30秒の動画です。

3D Gaussian Splattingを使ってみる その2(画像・動画データから3Dモデルの再構築、WSL2 Ubuntu 20.04)

はじめに  今回は画像や動画のデータから、3D Gaussian Splatting(3DGS)で3Dモデルの再構築を試してみました。  以前の記事で実行したときは用意されていたCOLMAPでした…

 READMEに書かれていますが、元となるデータはgs2mesh/data/custom/フォルダに入れることになっています。先にフォルダを作っておきました。

cd ~/gs2mesh
mkdir ./data/custom -p

▼先程の動画を、Haniwaフォルダに入れておきました。

 前回の記事ではSiftGPU not beint supportedというエラーが起きていたので3DGSに用意されていたコマンドは利用せずにcolmapコマンドを実行していました。

▼以下のようなエラーです。GS2Meshでも出ることはありました。

 今回はGS2Meshで用意されていたコマンドを実行したところ、実行できていました。フォルダ名と動画ファイルの拡張子を指定して、以下のコマンドを実行しました。

python run_single.py --colmap_name Haniwa --video_extension mp4

▼出力後のファイルがsplatting_outputフォルダにありました。

 この時点では、3DGSのモデルの再構築に失敗していました。その影響か、メッシュモデルの生成にも失敗していました。

▼ハニワが無く、平面的な靄のみがあります。

 元データのフォルダを見ると、動画ファイルから2つしか画像が抽出されていませんでした。

▼imagesフォルダに2枚だけありました。

 READMEにパラメータが書かれているのですが、video_intervalの引数を変更して、抽出される画像の枚数を増やしました。

python run_single.py --colmap_name Haniwa --video_extension mp4 --video_interval 6

▼前回と大体同じ、156枚の画像が集まりました。

▼最後にKilledと表示され、メッシュの生成に失敗しているようでした。

▼3DGSの処理自体は、以前と同じようなハニワのモデルになりました。

 メッシュモデルも生成されるようにパラメータをどう変更すればいいのかChatGPTに聞いて、以下のようにコマンドを実行しました。

python run_single.py --colmap_name Haniwa --video_extension mp4 --video_interval 6  --TSDF_voxel 4 --TSDF_sdf_trunc 0.08

▼すでにcolmapの処理が終わっていると、毎回生成したものを削除する必要があります。--skip_colmapを引数に加えると、colmapの処理はスキップされます。

▼今度はKilledと表示されず、SAVED CLEANED MESHと表示されています。

▼outputフォルダにデータが追加されていました。

▼plyファイルのメッシュが追加されています。

 Windowsの3Dビュアーで確認しました。

▼3DGSで出力したplyファイルは、開くことができません。

▼GS2Meshが出力した特有のplyファイルは、3Dビューアーで確認できました。メッシュ構造になっていることが見て取れます。

▼データとしてもメッシュデータになっているようでした。

 なお色は反映されていないようでした。

▼メモ帳で開くと、ヘッダ情報には色の要素があるようでした。

最後に

 今回はGS2Meshの環境を構築し、メッシュモデルが生成されることまで確認しました。

 Pythonでメッシュ化したときよりも滑らかに見えます。これまで見ていた3DGSのデータ形式ともまた異なっているようなので、確認する必要がありそうです。

▼3DGSのファイルの形式については以下の記事でも確認しています。今回とはヘッダ情報の書き方が違うようです。

3D Gaussian Splatting形式のデータをPythonで変換する

はじめに  今回は3D Gaussian Splatting(3DGS)形式のデータをPythonで変換できるようにしてみました。 ※便宜上3DGS形式と呼称していますが、3DGSは手法で、3DGSにより…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です