🚀 MeshGPT-alpha-preview
MeshGPTは、オートエンコーダー(トークナイザー)とトランスフォーマーを用いてトークンを生成するテキストから3Dモデルを生成するモデルです。オートエンコーダーは、3Dモデルをトークンに変換し、そのデコーダー部分がトークンを3Dメッシュに戻すことができます。このオートエンコーダーは、世界初の公開された3Dモデルトークナイザーです!(間違っていたら指摘してください!)
DEMO
✨ 主な機能
MeshGPTは、オートエンコーダーとトランスフォーマーを組み合わせたテキストから3Dモデルを生成するモデルです。オートエンコーダーは3Dモデルをトークンに変換し、トランスフォーマーはテキスト埋め込みにクロスアテンションを行いながらトークンを学習します。最終的に、入力されたテキストに基づいて3Dモデルを自己回帰的に生成します。
📦 インストール
pip install git+https://github.com/MarcusLoppe/meshgpt-pytorch.git
💻 使用例
基本的な使用法
import torch
from meshgpt_pytorch import (
MeshAutoencoder,
MeshTransformer,
mesh_render
)
device = "cuda" if torch.cuda.is_available() else "cpu"
transformer = MeshTransformer.from_pretrained("MarcusLoren/MeshGPT-preview").to(device)
output = []
output.append((transformer.generate(texts = ['sofa','bed', 'computer screen', 'bench', 'chair', 'table' ] , temperature = 0.0) ))
output.append((transformer.generate(texts = ['milk carton', 'door', 'shovel', 'heart', 'trash can', 'ladder'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['hammer', 'pedestal', 'pickaxe', 'wooden cross', 'coffee bean', 'crowbar'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['key', 'minecraft character', 'dragon head', 'open book', 'minecraft turtle', 'wooden table'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['gun', 'ice cream cone', 'axe', 'helicopter', 'shotgun', 'plastic bottle'], temperature = 0.0) ))
mesh_render.save_rendering(f'./render.obj', output)
📚 ドキュメント
モデルの詳細
オートエンコーダー(トークナイザー)は5000万のパラメータを使用する比較的小さなモデルで、トランスフォーマーモデルは1億8400万のパラメータを使用し、コアはGPT2-smallに基づいています。ハードウェアの制約により、コードブック/語彙サイズ2048で学習されています。開発と学習は私が行い、MeshGPTのコードベースについてはPhil Wangにクレジットを与えています。
性能
- CPU: 10 triangles/s
- 3060 GPU: 40 triangles/s
- 4090 GPU: 110 triangles/s
警告
このモデルはスポンサーやGPUハードウェアのレンタルなしで作成されたため、生成できる内容に非常に制限があります。'chair'や'table'のような単一のオブジェクトはうまく扱えますが、より複雑なオブジェクトにはさらなる学習が必要です(学習データセットのセクションを参照)。また、トライアングルの順序が学習前にモデルに最適化されているため、面の向きに問題があります。ただし、これは後のバージョンで修正される予定です。
学習データセット
私はKaggleの無料版GPUしか利用できなかったため、このモデルは最大250個のトライアングルを持つ4000個のモデルで学習されています。データセットには合計800個のテキストラベルが含まれているため、生成できる内容は制限されています。3Dモデルはobjaverse、shapenet、ModelNet40から取得されています。
仕組み
MeshGPTはオートエンコーダーを使用して、3Dメッシュ(クワッドにも対応していますが、このモデルでは実装されていません)をコードブックに量子化し、トークンとして使用します。MeshGPTの第2の部分は、オートエンコーダーが生成したトークンを学習し、テキスト埋め込みにクロスアテンションを行うトランスフォーマーです。最終的に、入力されたテキストに基づいて3Dモデルを自己回帰的に生成し、トランスフォーマーが生成したトークンはオートエンコーダーを使用して3Dメッシュに変換されます。
クレジット
MeshGPTのアイデアは論文( https://arxiv.org/abs/2311.15475 )に由来しますが、作成者はコードやモデルを公開していません。Phil Wang (https://github.com/lucidrains) はこの論文にインスピレーションを得て、論文の実装を大幅に改善し、リポジトリ https://github.com/lucidrains/meshgpt-pytorch を作成しました。私の目標は、MeshGPTを学習し、実際に実装する方法を見つけることでした。K. S. Ernest には、Gradioのデモの手助けや、より大きなデータセットでの次のモデルの学習の手助けをしてくれたことに感謝しています。独自のMeshGPTを学習し始める方法についてのノートブックは、私のGitHubリポジトリ MarcusLoppe/meshgpt-pytorch を参照してください。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。