跳至主要内容

Nvidia 的 Llama Mesh:示例指南

了解 NVIDIA 的 3D 网格生成模型 LLaMA-Mesh,包括其功能、局限性、设置步骤和示例。
· 8分钟 阅读

使用 AI 探索

最近,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

您可以通过以下三种方式使用该模型:

  1. 您可以通过 Hugging Face 在本地运行该模型——代码仓库见此处。
  2. 如果您熟悉 Blender 并希望在其中使用该模型,它提供了Blender 插件。
  3. 作者还在 Hugging Face 平台上搭建了一个在线演示,我将用它来为本指南生成实验性网格。

演示版 WebApp 如下所示:

Nvidia Llama Mesh

在线演示支持最多 4096 个 token,而完整模型支持 8K。因此,如需体验其全部能力,需要在本地运行模型。

接下来,我将生成三个难度逐步提升的形状示例来测试模型的边界。我会分别在 4K 和 8K token 版本上运行这些示例,观察差异。

如何在本地或云端设置 LLaMa-Mesh

在本指南中,我将演示在 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 is None:
    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,
)

作者并未说明其网页演示中使用的超参数,因此为公平起见,本次对比我将使用默认值。

LLaMa-Mesh 示例

下面我将通过三个难度递增的示例,对比演示应用与我在 Colab 上运行模型得到的输出。

示例 1:椅子

我们先从简单但有创意的案例开始——一把设计师椅。提示词如下(我在末尾补充了要求以 OBJ 格式生成网格,因为在本地运行时模型有时会拒绝生成):

Create a 3D model of an original designer chair in OBJ format.

这是在线演示生成的对象:

nvidia llama mesh example - 3D mesh visualization of a chair

这确实是一把很酷、也很奇怪的椅子,不过更像导演椅而非设计师椅。

现在,我们在本地运行提示词并可视化结果。如下所示:

nvidia llama mesh example - 3D mesh visualization of a chair

椅子的 3D 网格可视化

上下文更大的网格看起来更为细致。不过在我看来,这把椅子更像沙发。

示例 2:环面

接下来试试几何体:环面(3D 甜甜圈)。本例提示词:

Create a 3D model of a torus in OBJ format.

这是 4096 模型生成的网格:

nvidia llama mesh torus example

模型生成的环面

另一方面,这是在 Colab 上运行模型生成的网格可视化:

nvidia llama mesh torus example

模型生成的环面

如您所见,这个网格的多边形更多。然而它仍然没有中间的孔。环面应当是这样的:

example of a torus

来源:Wikipedia

示例 3:克莱因瓶

最后,我们用克莱因瓶这一复杂的 3D 结构来挑战极限。本例提示词为:

Create a 3D model of a Klein bottle in OBJ format.

在线模型在该输入下会不断生成网格,直至最终超时并报错。

在更大的上下文窗口下本地运行可解决该问题,但生成的网格与克莱因瓶并不相像:

nvidia llama mesh example of a klein bottle

模型生成的克莱因瓶

对感兴趣的读者而言,克莱因瓶应当长这样:

Klein bottle example

来源:Wikipedia

从以上测试可以看出,虽然 LLaMA-Mesh(无论在线还是本地版本)在创意与简单设计方面表现出色,但在精确几何体和高度复杂的数学形状上仍有局限。随着模型迭代,这些能力的拓展值得期待。

总结

本指南中,我们探索了全新的 Nvidia LLaMa-Mesh 模型,并在其演示平台上做了若干示例。尽管模型仍处早期阶段,但它已对需要快速、直观生成 3D 网格的专业人士与爱好者展现出巨大潜力。

随着框架演进,未来更新或将带来更强能力,例如处理更复杂的几何体,或与 3D 打印机兼容。

Dimitri Didmanidze

作者

Dimitri Didmanidze

我叫 Dimitri Didmanidze,是一名数据科学家,目前正在攻读数学硕士学位,研究方向为机器学习。我的学术历程还包括对基于 Transformer 的模型能力进行研究,并在大学层面授课,这些经历加深了我对复杂理论概念的理解。我也曾在银行业工作,将这些原理应用于解决真实世界中的数据难题。

主题