🚀 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