
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します。

生成された動画はこちら。
LGMを試してみる。
— NOGUCHI, Shoji (@noguchis) February 9, 2024
M2UGenの羊的なオブジェクトを指定して生成された結果がこちら。
READMEにもあるように、VRAMは10GB前後の10.5GB使用。https://t.co/7N1yjloj3F pic.twitter.com/VhwH3G6YbV
右側の枠にある「マルチビュー」のタブをクリックすると、前後左右から見た羊さんのイメージが確認できます。

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が起動し、オブジェクトをくるくる回せます。
LGM続き。
— NOGUCHI, Shoji (@noguchis) February 9, 2024
生成されたplyファイルを、マウスでぐるぐる回転させてみた動画がこちら。 pic.twitter.com/d6e2wdRswc
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度の画像を数秒で生成できるのは普通にすごい。