license: apache-2.0
pipeline_tag: text-to-3d
演示
MeshGPT-alpha预览版
MeshGPT是基于自编码器(分词器)和Transformer的文本生成3D模型。自编码器的作用是将3D模型转化为标记(tokens),其解码器部分可将这些标记重新转换为3D网格。
就所有用途和定义而言,该自编码器是全球首个公开的3D模型分词器!(如有误请指正)
模型详情
自编码器(分词器)是一个相对较小的模型,使用5000万参数,Transformer模型使用1.84亿参数,核心基于GPT2-small架构。由于硬件限制,训练时使用的码本/词汇表大小为2048。
开发与训练者:本人,MeshGPT代码库致谢Phil Wang
性能:
CPU:每秒10个三角形
3060 GPU:每秒40个三角形
4090 GPU:每秒110个三角形
警告:
本模型在无赞助或租用GPU硬件的情况下创建,生成能力非常有限。可处理简单单件物品如“椅子”或“桌子”,但复杂物体需更多训练(参见训练数据集部分)。
由于训练前对三角形顺序进行了模型优化,当前版本存在面朝向问题,后续版本将修复。
使用方法:
安装:
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 = ['沙发','床', '电脑屏幕', '长凳', '椅子', '桌子' ] , temperature = 0.0) ))
output.append((transformer.generate(texts = ['牛奶盒', '门', '铲子', '心形', '垃圾桶', '梯子'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['锤子', '基座', '镐', '木十字架', '咖啡豆', '撬棍'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['钥匙', '我的世界角色', '龙头', '打开的书', '我的世界乌龟', '木桌'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['枪', '冰淇淋筒', '斧头', '直升机', '猎枪', '塑料瓶'], temperature = 0.0) ))
mesh_render.save_rendering(f'./render.obj', output)
预期输出:

纯文本生成的随机样本:


训练数据集
因仅能使用Kaggle免费GPU资源,本模型仅在4000个最多250个三角形的模型上训练。数据集共含800个文本标签,生成能力有限。3D模型来源:objaverse、shapenet及ModelNet40。
工作原理
MeshGPT使用自编码器将3D网格(支持四边形但未在本模型实现)量化至码本形成标记。Transformer部分通过交叉注意力机制结合文本嵌入,训练自编码器生成的标记。最终实现通过文本嵌入自回归生成3D模型标记,再经自编码器解码为3D网格。
致谢
灵感源自论文( https://arxiv.org/abs/2311.15475 ),但原作者未公开代码或模型。Phil Wang(https://github.com/lucidrains)改进论文实现并创建代码库:https://github.com/lucidrains/meshgpt-pytorch
特别感谢K. S. Ernest协助开发Gradio演示及训练更大规模数据集。
训练教程详见GitHub仓库:MarcusLoppe/meshgpt-pytorch