🚀 MeshGPT-alpha-preview
MeshGPT是一個文本到3D的模型,它基於自編碼器(分詞器)和變換器來生成標記。自編碼器的作用是將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)
預期輸出

僅通過文本生成的隨機樣本:


✨ 主要特性
- 基於自編碼器(分詞器)和變換器構建,可將文本轉換為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.84億個參數,其核心基於GPT2-small。由於硬件限制,它使用大小為2048的碼本/詞彙表進行訓練。
開發者和訓練者:本人,MeshGPT代碼庫歸功於 Phil Wang
性能表現
- CPU:每秒生成10個三角形
- 3060 GPU:每秒生成40個三角形
- 4090 GPU:每秒生成110個三角形
警告
此模型在沒有任何贊助或租用任何GPU硬件的情況下創建,因此在生成能力方面非常有限。它可以較好地處理單個對象,如“椅子”或“桌子”,但更復雜的對象需要更多的訓練(見訓練數據集部分)。
此外,由於在訓練前對三角形順序進行了優化,面的方向存在問題。不過,這個問題將在後續版本中修復。
訓練數據集
由於只能使用Kaggle上的免費GPU,此模型僅在最多250個三角形的4000個模型上進行了訓練。數據集總共包含800個文本標籤,因此在生成能力方面受到限制。
3D模型的來源包括 objaverse、shapenet 和 ModelNet40。
工作原理
MeshGPT使用一個自編碼器,它接收3D網格(支持四邊形,但此模型未實現),然後將其量化到一個碼本中,該碼本可以用作標記。MeshGPT的第二部分是變換器,它在自編碼器生成的標記上進行訓練,同時對文本嵌入進行交叉注意力計算。
最終的產物是一個分詞器和一個變換器,它們可以輸入文本嵌入,然後基於文本輸入自迴歸地生成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
🔧 技術細節
- 自編碼器(分詞器)使用5000萬個參數,變換器模型使用1.84億個參數,核心基於GPT2-small。
- 由於硬件限制,使用大小為2048的碼本/詞彙表進行訓練。
📄 許可證
本項目採用Apache-2.0許可證。
DEMO