【AI3D】InstantSplat++をRTX 4060 Ti 16GB+WSLで検証|3枚の画像から3D生成してみた

AI関連の記事
AI 3D生成 Gaussian Splatting InstantSplat WSL CUDA ffmpeg

3枚の画像から3D空間を生成できると話題の Gaussian Splatting 系AI「InstantSplat++」を、 WSL + RTX4060Ti 16GB 環境で実際に動かしてみました。 環境構築自体は成功し、3D点群や補間レンダリングの生成まで確認できましたが、 キャラ設定画ではかなり破綻も目立ちました。本記事では、その手順と結果、 そしてハマりどころをまとめます。

はじめに

最近、Gaussian Splatting系の3D生成AIが急速に進化しています。 通常は数十枚以上の画像が必要なことも多いですが、 InstantSplat++ は少ない画像からでも3D空間の復元を試せる研究プロジェクトです。

今回はキャラクター画像の「正面・側面・背面」の3枚を使って、 実際にどこまで3D復元できるのかを検証してみました。 結果として、環境構築と実行までは問題なく通りましたが、 キャラ用途では限界もかなり見えました。

InstantSplat++とは

InstantSplat++ は、少ない画像から3D空間を復元する系統の研究プロジェクトです。 Gaussian Splattingベースで、画像群からカメラ位置や空間構造を推定し、 3D点群を生成します。

  • Gaussian Splattingベース
  • 少数画像でも3D復元を試せる
  • 補間カメラによるレンダリング動画も作れる

ただし「少ない画像で動く」と「綺麗に再構成できる」は別問題で、 特に今回のようなキャラ設定画は相性が難しい部類です。

実行環境

Environment
CPU  : Core Ultra 7 265K
GPU  : RTX 4060 Ti 16GB
RAM  : 96GB
OS   : Windows + WSL
CUDA : 12

セットアップ概要

今回は InstantSplat++ 系の実装を使用しました。 リポジトリ名と展開後フォルダ名が異なる場合があるため、 README を見ながら進めるのが安全です。

git clone <使用するリポジトリURL>
cd InstantSplatPP

Python仮想環境

python -m venv venv
source venv/bin/activate

PyTorchインストール

pip install torch torchvision

実際にはCUDA対応版や依存関係の整合が必要になる場合があります。

依存ライブラリ

pip install "numpy<2" "opencv-python<4.12"

CUDA設定

RTX 4060 Ti は Compute Capability 8.9 のため、以下の設定を使用しました。

export CUDA_HOME=/usr/lib/nvidia-cuda-toolkit
export PATH=$CUDA_HOME/bin:$PATH
export TORCH_CUDA_ARCH_LIST="8.9"

⚠ WSL + PyTorch の注意点(LD_LIBRARY_PATH)

WSL環境では、次の設定を入れると CUDA が壊れる場合があります。

export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

PyTorch は内部に CUDA ランタイムを持っているため、 システム側 CUDA と競合するケースがあります。 今回の環境ではこの行を設定すると不安定になったため、 最終的には無効化しました。

unset LD_LIBRARY_PATH

⚠ ハマりどころ:GPU待機ループ

WSL環境では、次のように GPU が空いているはずなのに待機ループへ入ることがありました。

No GPU available, waiting 60 seconds...

Windows 側の描画などでVRAMが少量使われていると、 GPU空き判定に引っかかることがあります。 今回は GPU_ID=0 を固定することで回避しました。

入力画像

今回はキャラクター画像の「正面・側面・背面」の3枚を使用しました。 実際に使った画像は以下です。

正面画像

00001.png(正面)

側面画像

00002.png(側面)

背面画像

00003.png(背面)

※検証用のキャラクター画像を使用しています。

フォルダ配置

assets/myset/TestScene/images

assets
 └ myset
    └ TestScene
       └ images
          ├ 00001.png
          ├ 00002.png
          └ 00003.png

run_infer.sh設定

scripts/run_infer.sh
DATASETS=(
    myset
)

SCENES=(
    TestScene
)

実行

bash scripts/run_infer.sh

出力ファイルの意味

出力フォルダには複数のファイルやサブフォルダが生成されます。主なものは次の通りです。

  • input.ply 初期点群。画像から最初に作られた3Dのタネのようなもの。
  • point_cloud/iteration_1000/point_cloud.ply 学習後の最終3D点群。今回の本命ファイル。
  • interp/ours_1000/renders/ カメラを補間してレンダリングした画像列。動画化用のフレーム。
  • pose/ours_1000/ 推定されたカメラ姿勢の可視化や numpy データ。
  • 01_init_geo.log / 02_train.log / 03_render.log 初期化・学習・レンダリングのログファイル。

動画作成(ffmpeg)

レンダリング画像は連番PNGで出力されるため、ffmpegで動画化できます。

ffmpeg -framerate 30 -i %05d.png -c:v libx264 -pix_fmt yuv420p camera.mp4
ffmpeg -framerate 30 -i %05d.png -vf "scale=1920:-1" -c:v libx264 -crf 18 camera.mp4

生成結果(動画)

生成されたカメラ移動レンダリングを動画化したものを YouTube に公開しています。

YouTube公開URL

【AI3D検証】3枚の画像から3D化してみた結果… InstantSplat++はキャラ設定画に使えるのか?

今回の入力画像では、3D形状がかなり破綻している様子が確認できます。

結果と考察(かなり破綻した)

結論から言うと、3Dモデルの形状はかなり破綻しました。 環境構築と実行自体は成功したものの、「綺麗なキャラ3Dが得られた」とは言えない結果です。

特に今回のような「正面・側面・背面」の設定画は、実写のような連続視点ではありません。 中間角度の情報が存在しないため、補間時に破綻しやすく、動画にすると違和感がかなり目立ちました。

また、イラストは実写に比べて陰影や特徴点の情報が少なく、 InstantSplat++ が得意とする「現実の複数視点画像」とは性質が異なります。 そのため、今回の題材はあまり相性が良くなかったようです。

次の記事

次回は、キャラ画像のような2Dイラストから3Dモデルを作る用途により向いている手法として、 TripoSR系のモデルを試してみる予定です。

まとめ

InstantSplat++は、少ない画像から3D生成を試せる面白い研究プロジェクトでした。 GPUがあればローカル環境でも動作し、環境構築自体は十分可能でした。
ただし、今回のようなキャラ設定画では限界も見えたため、 用途に応じて別手法との使い分けが重要だと感じました。

コメント

タイトルとURLをコピーしました