見出し画像

WSL2でLGMを試してみる

「テキスト プロンプトまたはシングルビュー画像から高解像度 3D モデルを生成するように設計された新しいフレームワーク」らしいLarge Multi-view Gaussian Model (LGM)を試してみます。

使用するPCはドスパラさんの「GALLERIA UL9C-R49」。スペックは
・CPU: Intel® Core™ i9-13900HX Processor
・Mem: 64 GB
・GPU: NVIDIA® GeForce RTX™ 4090 Laptop GPU(16GB)
・GPU: NVIDIA® GeForce RTX™ 4090 (24GB)
・OS: Ubuntu22.04 on WSL2(Windows 11)
です。


1. 準備

環境構築

python3 -m venv lgm
cd $_
source bin/activate

リポジトリをクローンして、

git clone https://github.com/3DTopia/LGM
cd LGM

パッケージのインストールです。

pip install torch torchvision torchaudio
pip install xformers
git clone --recursive https://github.com/ashawkey/diff-gaussian-rasterization
pip install ./diff-gaussian-rasterization
pip install git+https://github.com/NVlabs/nvdiffrast
pip install -r requirements.txt

convert.pyのために

 pip install pymcubes nerfacc pymeshlab

これだけだと 「girdencode/src ディレクトリが見当たらない」とエラーになるので、issue #1 (Missing gridencoder source files )にあるように

pip install -U git+https://github.com/ashawkey/kiuikit.git

としてパッケージを更新しておきます。
(注)WSL2ですとOpenGLがまともに動かないため、convert.py実行時に以下のエラーが発生します。Windowsで試さないと、ですね。

RuntimeError: OpenGL 4.4 or later is required

モデルのダウンロード

mkdir pretrained && cd pretrained
wget https://huggingface.co/ashawkey/LGM/resolve/main/model_fp16.safetensors
cd ..

2. 試してみる

4つ.pyファイルがあります。1つずつ試していきます。

  • app.py : Gradioが起動します。いわゆるデモです

  • infer.py : 推論で使用するモデルを指定し、画像ファイルが格納されたディレクトリを指定。mp4/plyファイルを生成します。バッチ処理ですね。

  • gui.py : 生成されたplyファイルを指定し、Gaussian3Dでぐるぐる回せます

  • convert.py : 指定したplyファイルをglb形式へと変換します。

なお、1番目に指定する共通の引数の意味合いは以下です。

  • lrm : LGMのデフォルト設定

  • small : 低解像度のガウスを使用した小さいモデル

  • big : より高解像度のガウスを備えた大きなモデル

  • tiny : 小さなアブレーションモデル

各引数で実際に指定される実際の値を知りたい方は、 core/options.py を参照ください。

app.py

python app.py big --resume pretrained/model_fp16.safetensors

Gradioが起動してきました。

M2UGenの羊画像を指定して、Generateします。

生成された動画はこちら。

右側の枠にある「マルチビュー」のタブをクリックすると、前後左右から見た羊さんのイメージが確認できます。

infer.py

python infer.py big \
	--resume pretrained/model_fp16.safetensors \
	--workspace workspace_test \
	--test_path data_test
  • resume: モデルへのパス

  • workspace: 出力先のディレクトリ

  • test_path: 入力画像が含まれているディレクトリ

実行すると以下のように入力画像が処理されています。

[INFO] Loaded checkpoint from pretrained/model_fp16.safetensors
Keyword arguments {'trust_remote_code': True} are not expected by MVDreamPipeline and will be ignored.
Loading pipeline components...: 100%|████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 10.39it/s]
[INFO] Processing data_test/bird_rgba.png --> bird_rgba
100%|██████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:03<00:00,  7.88it/s]
100%|███████████████████████████████████████████████████████████████████████████████████| 180/180 [00:00<00:00, 244.59it/s]
[INFO] Processing data_test/catstatue_rgba.png --> catstatue_rgba
100%|██████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:02<00:00, 10.23it/s]
100%|███████████████████████████████████████████████████████████████████████████████████| 180/180 [00:00<00:00, 301.49it/s]
[INFO] Processing data_test/anya_rgba.png --> anya_rgba
100%|██████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:02<00:00, 11.43it/s]
100%|███████████████████████████████████████████████████████████████████████████████████| 180/180 [00:00<00:00, 303.54it/s]

結果、mp4ファイルとplyファイルが生成されました。

・入力画像ファイル

$ ls -al data_test/
total 148
drwxr-xr-x  2 user user  4096 Feb  9 13:07 .
drwxr-xr-x 11 user user  4096 Feb  9 16:28 ..
-rw-r--r--  1 user user 32860 Feb  9 13:07 anya_rgba.png
-rw-r--r--  1 user user 56248 Feb  9 13:07 bird_rgba.png
-rw-r--r--  1 user user 45476 Feb  9 13:07 catstatue_rgba.png
$

・出力先ディレクトリ

$ ls -al workspace_test/
total 7328
drwxr-xr-x  2 user user    4096 Feb  9 13:28 .
drwxr-xr-x 11 user user    4096 Feb  9 13:28 ..
-rw-r--r--  1 user user  157287 Feb  9 13:28 anya_rgba.mp4
-rw-r--r--  1 user user 1913489 Feb  9 13:28 anya_rgba.ply
-rw-r--r--  1 user user  207866 Feb  9 13:28 bird_rgba.mp4
-rw-r--r--  1 user user 2513585 Feb  9 13:28 bird_rgba.ply
-rw-r--r--  1 user user  195476 Feb  9 13:28 catstatue_rgba.mp4
-rw-r--r--  1 user user 2497121 Feb  9 13:28 catstatue_rgba.ply
$

gui.py

上記で生成された anya_rgba.plyを使用して起動します。

python gui.py big --output_size 800 --test_path workspace_test/anya_rgba.ply

Gaussian3Dが起動し、オブジェクトをくるくる回せます。

conver.py

OpenGLのエラーが発生しました。こちら、WSL2だといかんともし難いエラーです。この処理はply形式からglb形式への変換だけですので、そっと蓋を閉じます。。。

python convert.py big --test_path workspace/gradio_output.ply
Number of points at loading :  35066
Traceback (most recent call last):
  File "/mnt/data/user/venv/lgm/LGM/convert.py", line 458, in <module>
    converter = Converter(opt).cuda()
  File "/mnt/data/user/venv/lgm/LGM/convert.py", line 83, in __init__
    self.glctx = dr.RasterizeGLContext()
  File "/mnt/data/user/venv/lgm/lib/python3.10/site-packages/nvdiffrast/torch/ops.py", line 221, in __init__
    self.cpp_wrapper = _get_plugin(gl=True).RasterizeGLStateWrapper(output_db, mode == 'automatic', cuda_device_idx)
RuntimeError: OpenGL 4.4 or later is required

GPUリソース

READMEにもあるように、VRAMは10GB前後(10.5GB)弊環境では 8.9GB、でした。
※ディスプレイ表示で使用済みの1.6GBを減算するのを忘れていました。

3. まとめ

VRAMは10.5GB使用でした。
VRAMは 8.9GB使用でした。


1つの静止画から、360度の画像を数秒で生成できるのは普通にすごい。

この記事が気に入ったらサポートをしてみませんか?