はじめに
こんにちは、しゅんです。
この記事では、CES2025でNVIDIAとStability.aiによって発表された、次世代の3D生成ツールであるSPAR3D (Stable Point Aware 3D) を試してみた体験をご紹介します。
SPAR3Dは、単一の画像から3Dメッシュと点群データをリアルタイムで生成する機能を提供する画期的なツールです。この記事では、そのセットアップ方法や実行手順、生成された結果について解説します。
SPAR3Dとは?
公式の記事
公式のgithub
公式のHuggingface
SPAR3Dは、以下の特徴を持つ最新のAIベースの3D生成ツールです:
-
単一画像からの3D生成
- 入力画像から1秒未満で3Dメッシュと点群データを生成。
-
完全な構造予測
- 360度のビューを補完し、隠れた部分も正確に再現。
-
リアルタイム編集機能
- 点群データを削除、複製、ストレッチ、特徴追加が可能。
SPAR3Dは、NVIDIA RTX AI PCでの実行に最適化されており、ゲーム開発や製品デザインにおいて新しい基準を提供します。
環境構築
SPAR3Dを使うには以下の環境をセットアップします。
自分の環境
- OS: Ubuntu 24.04
- GPU: NVIDIA RTX3080
セットアップ手順
-
仮想環境を作成:
python3 -m venv .venv source .venv/bin/activate
-
必要なライブラリをインストール:
pip install -U setuptools==69.5.1 pip install wheel git clone https://github.com/Stability-AI/stable-point-aware-3d.git cd stable-point-aware-3d/ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install -r requirements.txt pip install gpytoolbox pynanoinstantmeshes==0.0.3 pip install trimesh pip install "pyglet<2" pip install pillow matplotlib open3d
-
Hugging Faceトークンを設定:
huggingface-cli login
-
環境変数を設定:
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
実行手順
以下の手順でSPAR3Dを使用します。
SPAR3Dを実行
単一画像から3Dメッシュを生成するには、以下のコマンドを使用します:
python run.py demo_files/examples/fish.png --output-dir output/
残念。。。自分はVRAM不足でした
VRAM不足時の対応
-
低VRAMモード:
python run.py demo_files/examples/fish.png --output-dir output/ --low-vram-mode
-
CPUモード:
python run.py demo_files/examples/fish.png --output-dir output/ --device cpu
Code
生成された出力ファイルは以下の通りです:
-
入力画像 (
input.png
)- 背景が除去された入力画像。
-
3Dメッシュ (
mesh.glb
)- 3Dモデルデータとしてエクスポートされたメッシュ。
-
点群データ (
points.ply
)- 点群形式で出力された3Dデータ。
以下のスクリプトを使って結果を可視化できます:
import os
from PIL import Image
import matplotlib.pyplot as plt
import trimesh
import open3d as o3d
output_dir = "./output/0"
image_path = os.path.join(output_dir, "input.png")
mesh_path = os.path.join(output_dir, "mesh.glb")
ply_path = os.path.join(output_dir, "points.ply")
# 入力画像の表示
def display_image(path):
img = Image.open(path)
plt.imshow(img)
plt.axis("off")
plt.show()
# 3Dメッシュの表示
def display_mesh(path):
mesh = trimesh.load(path)
mesh.show()
# 点群データの表示
def display_point_cloud(path):
point_cloud = o3d.io.read_point_cloud(path)
o3d.visualization.draw_geometries([point_cloud])
display_image(image_path)
display_mesh(mesh_path)
display_point_cloud(ply_path)
使ってみた感想
SPAR3Dを試してみた感想を以下にまとめます:
-
速さ
- 単一画像から1秒未満で結果が生成され、驚きのスピード感。
- 昔OpenAI、openai point-eの生成より早い
-
高品質な生成結果
- 隠れた部分も補完される360度構造が特に印象的。
-
操作の簡単さ
- コマンドラインだけで簡単に使用でき、セットアップもスムーズ。
結果
こういう感じです
CES2025で発表されたSPAR3Dを試して表示してみた。
— SYUN (@syun88AI) January 9, 2025
画像 →点群のデータ→ 3D
画像を入力: 2D画像を入力
点群データの生成: AIモデルが画像からobjectの構造を解析し、点群データを生成
3Dmehの生成: 点群データをもとに、最終的な3Dメッシュを生成#CES2025 #SPAR3D pic.twitter.com/8W2vxcZLSc
おわりに
面白いおもちゃたくさん出てきて、困ります。最後まで見てくれてありがとうございます。