在本指南中,我将演示在 Google Colab 的 A100 GPU 运行时上运行该模型。如果您本地算力充足,也可将相同代码改用到您的个人硬件上。Hugging Face 仓库见此处。
首先需要导入必要的库,并下载模型与分词器:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path ="Zhengyi/LLaMA-Mesh"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto").cuda()技术支持
还需要设置 pad_token:
if tokenizer.pad_token_id isNone:
tokenizer.pad_token_id = tokenizer.eos_token_id技术支持
最后,对提示词进行分词并送入模型推理(这些都是标准的 Hugging Face 工作流,几乎适用于任何其他模型):
prompt ="Create a 3D model of an original designer chair."
inputs = tokenizer(prompt, return_tensors="pt", padding=True)
input_ids = inputs.input_ids.cuda()
output = model.generate(
input_ids,
attention_mask=inputs['attention_mask'],# Provide the attention_mask
max_length=8000,)技术支持
最近,NVIDIA 发布了一款名为LLaMA-Mesh的创新模型,能够根据自然语言描述生成 3D 网格。
它也可以反向工作:给定一个 3D 网格,模型可以识别该物体。
这对机器学习而言是一个重要进展,因为理解 3D 空间是迈向通用人工智能的重要一步。对于经常使用 Blender 等软件的专业人士和爱好者来说,LLaMA-Mesh 也是一款实用工具,可加快生成与使用 3D 网格的流程。
在这份简短指南中,我将介绍该模型的能力,并运行几个示例,帮助您了解它的潜力与局限。
什么是 LLaMa-Mesh?
LLaMA-Mesh 是 NVIDIA 开发的一款创新模型,将大型语言模型(LLM)的能力扩展到了 3D 领域。
与以往模型不同,LLaMA-Mesh 统一了文本与 3D 两种模态,使用户可以通过简单的自然语言提示词创建 3D 网格。
在底层实现上,该模型是在LLaMa-3.1-8B-Instruct的基础上微调得到。模型通过将 3D 网格数据编码为基于文本的格式来工作,具体采用 OBJ 文件标准,以纯文本描述顶点与面。
如何访问 LLaMa-Mesh
您可以通过以下三种方式使用该模型:
演示版 WebApp 如下所示:
在线演示支持最多 4096 个 token,而完整模型支持 8K。因此,如需体验其全部能力,需要在本地运行模型。
接下来,我将生成三个难度逐步提升的形状示例来测试模型的边界。我会分别在 4K 和 8K token 版本上运行这些示例,观察差异。
如何在本地或云端设置 LLaMa-Mesh
在本指南中,我将演示在 Google Colab 的 A100 GPU 运行时上运行该模型。如果您本地算力充足,也可将相同代码改用到您的个人硬件上。Hugging Face 仓库见此处。
首先需要导入必要的库,并下载模型与分词器:
还需要设置
pad_token:最后,对提示词进行分词并送入模型推理(这些都是标准的 Hugging Face 工作流,几乎适用于任何其他模型):
作者并未说明其网页演示中使用的超参数,因此为公平起见,本次对比我将使用默认值。
LLaMa-Mesh 示例
下面我将通过三个难度递增的示例,对比演示应用与我在 Colab 上运行模型得到的输出。
示例 1:椅子
我们先从简单但有创意的案例开始——一把设计师椅。提示词如下(我在末尾补充了要求以 OBJ 格式生成网格,因为在本地运行时模型有时会拒绝生成):
这是在线演示生成的对象:
这确实是一把很酷、也很奇怪的椅子,不过更像导演椅而非设计师椅。
现在,我们在本地运行提示词并可视化结果。如下所示:
椅子的 3D 网格可视化
上下文更大的网格看起来更为细致。不过在我看来,这把椅子更像沙发。
示例 2:环面
接下来试试几何体:环面(3D 甜甜圈)。本例提示词:
这是 4096 模型生成的网格:
模型生成的环面
另一方面,这是在 Colab 上运行模型生成的网格可视化:
模型生成的环面
如您所见,这个网格的多边形更多。然而它仍然没有中间的孔。环面应当是这样的:
来源:Wikipedia
示例 3:克莱因瓶
最后,我们用克莱因瓶这一复杂的 3D 结构来挑战极限。本例提示词为:
在线模型在该输入下会不断生成网格,直至最终超时并报错。
在更大的上下文窗口下本地运行可解决该问题,但生成的网格与克莱因瓶并不相像:
模型生成的克莱因瓶
对感兴趣的读者而言,克莱因瓶应当长这样:
来源:Wikipedia
从以上测试可以看出,虽然 LLaMA-Mesh(无论在线还是本地版本)在创意与简单设计方面表现出色,但在精确几何体和高度复杂的数学形状上仍有局限。随着模型迭代,这些能力的拓展值得期待。
总结
本指南中,我们探索了全新的 Nvidia LLaMa-Mesh 模型,并在其演示平台上做了若干示例。尽管模型仍处早期阶段,但它已对需要快速、直观生成 3D 网格的专业人士与爱好者展现出巨大潜力。
随着框架演进,未来更新或将带来更强能力,例如处理更复杂的几何体,或与 3D 打印机兼容。