文本到 3D AI 生成——Meta 3D Gen、OpenAI Shap-E工作原理与算法解析

news2024/11/15 13:27:09

概述

根据文本提示生成 3D 数字资产的能力代表了人工智能和计算机图形学领域最近最令人兴奋的发展之一。随着 3D 数字资产市场规模预计将从2024 年的 28.3 亿美元增加到 2029 亿美元,文本转 3D 人工智能模型将在游戏、电影、电子商务等行业的内容创作革命中发挥重要作用。但这些人工智能系统究竟是如何工作的呢?在本文中,我们将深入探讨文本转 3D 生成背后的技术细节。

3D 生成的挑战

从文本生成 3D 资产比生成 2D 图像要复杂得多。虽然 2D 图像本质上是像素网格,但 3D 资产需要在三维空间中表示几何图形、纹理、材质,通常还有动画。这种增加的维度和复杂性使生成任务更具挑战性。

文本到 3D 生成的一些关键挑战包括:

  • 表示 3D 几何和结构
  • 在 3D 表面上生成一致的纹理和材质
  • 从多个角度确保物理合理性和一致性
  • 同时捕捉精细细节和整体结构
  • 生成可轻松渲染或 3D 打印的资产

为了应对这些挑战,文本到 3D 模型利用了几种关键技术和技巧。
在这里插入图片描述

文本转 3D 系统的关键组件

大多数最先进的文本到 3D 生成系统都有一些共同的核心组件:

  1. 文字编码: Converting the input text prompt into a numerical representation
  2. 3D表示:一种表示三维几何形状和外观的方法
  3. 生成模型:生成 3D 资产的核心 AI 模型
  4. 渲染:将三维表示转换为二维图像进行可视化

让我们更详细地探讨每一个问题。

文本编码

第一步是将输入的文本提示转换为 AI 模型可以使用的数字表示。这通常使用BERT 或 GPT等大型语言模型来完成。

3D 表示

在 AI 模型中,有几种常见的表示 3D 几何的方法:

  1. 体素网格:表示占用或特征的 3D 值数组
  2. 点云: Sets of 3D points
  3. 网格:定义表面的顶点和面
  4. 隐式函数:定义曲面的连续函数(例如有符号距离函数)
  5. 神经辐射场(NeRF):表示 3D 空间中的密度和颜色的神经网络

每种方法在分辨率、内存使用量和生成难易程度方面都有所取舍。许多近期模型都使用隐式函数或 NeRF,因为它们可以在合理的计算要求下获得高质量的结果。

例如,我们可以将一个简单的球体表示为一个有符号的距离函数:

import numpy as np
def sphere_sdf(x, y, z, radius=1.0):
    return np.sqrt(x**2 + y**2 + z**2) - radius
# Evaluate SDF at a 3D point
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f"Distance to sphere surface: {distance}")

生成模型

文本到 3D 系统的核心是从文本嵌入生成 3D 表示的生成模型。大多数最先进的模型都使用扩散模型的一些变体,类似于 2D 图像生成中使用的模型。

扩散模型的工作原理是逐渐向数据添加噪声,然后学习逆转此过程。对于 3D 生成,此过程发生在所选 3D 表示的空间中。

扩散模型训练步骤的简化伪代码可能如下所示:

def diffusion_training_step(model, x_0, text_embedding):
# Sample a random timestep
t = torch.randint(0, num_timesteps, (1,))
# Add noise to the input
noise = torch.randn_like(x_0)
x_t = add_noise(x_0, noise, t)
# Predict the noise
predicted_noise = model(x_t, t, text_embedding)
# Compute loss
loss = F.mse_loss(noise, predicted_noise)
return loss
# Training loop
for batch in dataloader:
x_0, text = batch
text_embedding = encode_text(text)
loss = diffusion_training_step(model, x_0, text_embedding)
loss.backward()
optimizer.step()

在生成过程中,我们从纯噪声开始,并根据文本嵌入进行迭代去噪。

渲染

为了在训练期间可视化结果并计算损失,我们需要将 3D 表示渲染为 2D 图像。这通常使用可微分渲染技术来实现,该技术允许梯度在渲染过程中回流。

对于基于网格的表示,我们可能会使用基于光栅化的渲染器:

def diffusion_training_step(model, x_0, text_embedding):
# Sample a random timestep
t = torch.randint(0, num_timesteps, (1,))
# Add noise to the input
noise = torch.randn_like(x_0)
x_t = add_noise(x_0, noise, t)
# Predict the noise
predicted_noise = model(x_t, t, text_embedding)
# Compute loss
loss = F.mse_loss(noise, predicted_noise)
return loss
# Training loop
for batch in dataloader:
x_0, text = batch
text_embedding = encode_text(text)
loss = diffusion_training_step(model, x_0, text_embedding)
loss.backward()
optimizer.step()

对于像 NeRF 这样的隐式表示,我们通常使用光线行进技术来渲染视图。

整合所有内容:文本到 3D 管道

现在我们已经介绍了关键组件,让我们来看看它们是如何在典型的文本到 3D 生成流程中组合在一起的:

  1. 文字编码:使用语言模型将输入提示编码为密集向量表示。
  2. 初始生成:以文本嵌入为条件的扩散模型生成初始 3D 表示(例如 NeRF 或隐式函数)。
  3. 多视图一致性:模型呈现生成的 3D 资产的多个视图,并确保跨视点的一致性。
  4. 精致:附加网络可以细化几何形状、添加纹理或增强细节。
  5. 最终输出:3D 表示被转换为所需格式(例如纹理网格)以供下游应用程序使用。

以下是代码中的简化示例:

def diffusion_training_step(model, x_0, text_embedding):
# Sample a random timestep
t = torch.randint(0, num_timesteps, (1,))
# Add noise to the input
noise = torch.randn_like(x_0)
x_t = add_noise(x_0, noise, t)
# Predict the noise
predicted_noise = model(x_t, t, text_embedding)
# Compute loss
loss = F.mse_loss(noise, predicted_noise)
return loss
# Training loop
for batch in dataloader:
x_0, text = batch
text_embedding = encode_text(text)
loss = diffusion_training_step(model, x_0, text_embedding)
loss.backward()
optimizer.step()

顶级文本到 3D 资产模型可用

3DGen - Meta

3DGen旨在解决根据文本描述生成 3D 内容(例如角色、道具和场景)的问题。

在这里插入图片描述

3DGen 支持基于物理的渲染 (PBR),这对于在实际应用中实现逼真的 3D 资产重光照至关重要。它还支持使用新的文本输入对之前生成或艺术家创建的 3D 形状进行生成性重纹理。该管道集成了两个核心组件:Meta 3D AssetGen 和 Meta 3D TextureGen,分别处理文本到 3D 和文本到纹理的生成。

Meta 3D 资产生成

Meta 3D AssetGen(Siddiqui 等人,2024 年)负责根据文本提示初始生成 3D 资源。此组件可在约 30 秒内生成带有纹理和 PBR 材质贴图的 3D 网格。

Meta 3D 纹理生成器

Meta 3D TextureGen(Bensadoun 等人,2024)细化 AssetGen 生成的纹理。它还可用于根据附加的文本描述为现有 3D 网格生成新纹理。此阶段大约需要 20 秒。

Point-E(OpenAI)

OpenAI 开发的 Point-E是另一个值得注意的文本到 3D 生成模型。与生成 NeRF 表示的 DreamFusion 不同,Point-E 生成 3D 点云。

Point-E 的主要特点:

a)两阶段管道:Point-E 首先使用文本到图像扩散模型生成合成的 2D 视图,然后使用该图像来调节产生 3D 点云的第二个扩散模型。

b)效率:Point-E 的设计具有极高的计算效率,能够在单个 GPU 上在几秒钟内生成 3D 点云。

c)颜色信息:该模型可以生成彩色点云,保留几何和外观信息。

限制:

  • 与基于网格或基于 NeRF 的方法相比,保真度较低
  • 对于许多下游应用来说,点云需要额外的处理

Shap-E(OpenAI):

在 Point-E 的基础上,OpenAI 推出了p -E,它生成 3D 网格而不是点云。这解决了 Point-E 的一些局限性,同时保持了计算效率。

Shap-E的主要特点:

a)隐式表示:Shap-E 学习生成 3D 对象的隐式表示(有符号距离函数)。

b)网格提取:该模型使用行进立方体算法的可微分实现将隐式表示转换为多边形网格。

c)纹理生成:Shap-E 还可以为 3D 网格生成纹理,从而产生更具视觉吸引力的输出。

优点:

  • 生成时间快(几秒到几分钟)
  • 适合渲染和下游应用程序的直接网格输出
  • 能够生成几何图形和纹理

GET3D(NVIDIA):

GET3D由 NVIDIA 研究人员开发,是另一个强大的文本到 3D 生成模型,专注于生成高质量的纹理 3D 网格。

GET3D的主要特点:

a)显式表面表示:与 DreamFusion 或 Shap-E 不同,GET3D 直接生成显式表面表示(网格),而无需中间隐式表示。

b)纹理生成:该模型包括可区分的渲染技术,用于学习和生成 3D 网格的高质量纹理。

c)基于GAN的架构:GET3D使用生成对抗网络(GAN)方法,模型训练完成后可快速生成。

优点:

  • 高品质的几何形状和纹理
  • 推理时间快
  • 与 3D 渲染引擎直接集成

限制:

  • 需要 3D 训练数据,而对于某些对象类别而言,此类数据可能比较稀缺

结论

文本转 3D AI 生成代表了我们创建 3D 内容和与 3D 内容交互方式的根本性转变。通过利用先进的深度学习技术,这些模型可以根据简单的文本描述生成复杂、高质量的 3D 资产。随着技术的不断发展,我们可以期待看到越来越复杂、功能越来越强大的文本转 3D 系统,这些系统将彻底改变从游戏和电影到产品设计和建筑等行业。
原文地址:https://www.unite.ai/how-text-to-3d-ai-generation-works-meta-3d-gen-openai-shap-e-and-more/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】(StemGNN)多元时间序列预测的谱时间图神经网络

(StemGNN)Spectral Temporal Graph Neural Network for Multivariate Time-series Forecasting 引用: Cao D , Wang Y , Duan J ,et al.Spectral Temporal Graph Neural Network for Multivariate Time-series Forecasting[J]. 2021.DOI:10.…

揭秘“循环乐购”:消费赠礼,每日返利

大家好,我是吴军,今天作为您的电商策略顾问,将带您深入探索一种前所未有的商业模式——“循环乐购”。在这个模式中,消费不再是单向支出,而是成为了开启财富增值的钥匙。您是否好奇,为何有人能在享受购物乐…

ESP32部署TensorFlow Lite

本来是想找一篇中文教程,不过只看到一个英文官方的,也行吧,虽然效率会慢丢丢。 GitHub - espressif/esp-tflite-micro: TensorFlow Lite Micro for Espressif Chipsets 看了一圈,有个中文的: esp-dl/README_cn.md a…

C语言之大小端理解

目录 1前言2 大小端理解与区分3 大小端的识别和基本切换操作4 总结 1前言 在汽车CAN通讯报文中往往会接触到Intel类型和motorola类型,实际项目中涉及到多机通讯也会接触到大小端问题 2 大小端理解与区分 大端(Big_Endian) :低字节放在高地址小端(Little_Endian):…

STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示

STM32 Customer BootLoader 刷新项目 (三) 程序框架搭建 文章目录 STM32 Customer BootLoader 刷新项目 (三) 程序框架搭建典型工作流程 1. 硬件原理图介绍1.1 USART硬件介绍1.2 LED和按键介绍 2. STM32 CubeMX工程搭建2.1 创建工程2.2 系统配置2.3 USART串口配置2.4 配置按键G…

SSE(Server Sent Event)实战(2)- Spring MVC 实现

一、服务端实现 使用 RestController 注解创建一个控制器类(Controller) 创建一个方法来创建一个客户端连接,它返回一个 SseEmitter,处理 GET 请求并产生(produces)文本/事件流 (text/event-stream) 创建…

QT小细节

QT小细节 1 QTextToSpeech1.1 cmake1.2 qmake QT6 6.7.2 1 QTextToSpeech 从下图可以看到,分别使用qmake或者cmake编译情况下的,QTextToSpeech的使用方法 QTextToSpeech官方链接,也可以直接在QT Creator的帮助中搜索 1.1 cmake 将上图中的…

无人机之机型区别与应用领域

一、多旋翼无人机 特点:多旋翼无人机依靠产生升力以平衡飞行器的重力,通过改变每个旋翼的转速来控制飞行姿态,能够悬停和垂直起降。他们具备体积小、重量轻、噪音小、隐蔽性好的特点,操作灵活且易于维护。 应用:多旋…

django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出

使用crontab执行python脚本时,有时会遇到脚本无法执行的问题。这是因为crontab在执行任务时使用的环境变量与我们在终端中使用的环境变量不同。具体来说,crontab使用的环境变量是非交互式(non-interactive)环境变量,而终端则使用交互式(inter…

补充.IDEA的使用

首先我们要了解在idea中Java工程由项目(project)、模块(module)包(package)、类(class)组成。 他们之间的关系是project包含module包含package包含class。 所以我们要按照先建一个pr…

启智畅想火车类集装箱号码识别技术,软硬件解决方案

集装箱号码识别需求: 实时检测车皮号、火车底盘号码、集装箱号码,根据火车类型分为以下三种情况: 1、纯车皮,只检测车皮号; 2、火车拉货箱(半车皮),检测车皮号集装箱号码&#xff1b…

巧用通义灵码助力护网面试

前言 前几年护网还算是一个比较敏感的话题,但是随着近段时间的常态化开始,护网行动也是逐渐走进了大众的视野,成为了社会各界共同关注的安全盛事。本篇也是受通义灵码备战求职季活动的启发,结合近期要开始的护网行动&#xff0c…

监控系统怎样做?

监控类型自底向上分为资源监控、服务监控和业务监控。希望打造公司级的监控系统最好的时机是系统规划时,如果把监控设计往后放,将会面临一个巨大的难题:推行和现有不兼容的规范。 三种监控类型 资源监控 这个相对简单,随着k8s的兴…

Python 如何使用列表推导式(list comprehensions)?

列表推导式(List Comprehensions)是 Python 中一种简洁且强大的创建列表的方式。通过使用列表推导式,可以用一行代码来生成列表,而不是通过多行代码的循环或其他方法。 一、列表推导式的基本语法 列表推导式的基本语法如下&…

QT开发笔记:信号和槽

乱码问题: 出现乱码问题原因只有一个:就是编码方式不匹配!!! 中文常见汉字4K,算上各种生僻字差不多六万字 仍然使用一个大表格,给每个汉字,分配一个整数即可。 字符集~~表示汉字的字符集&#…

基于若依的ruoyi-nbcio流程管理系统修正自定义业务表单的回写bug

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

差异分析的结果各种热图,火山图,箱式图可视化作图教程

1. 基因表达的热图绘制 1.1 根据所有差异基因绘制基因表达的聚类热图 视频教程: https://www.bilibili.com/video/BV13m421g7wv/ 1.2 绘制top差异基因表达的聚类热图 视频教程: https://www.bilibili.com/video/BV1jZ42147KP/ 1.3 绘制感兴趣基因的聚类热图 视频教程: http…

一招教你选出独立站爆品

独立站选品其实是让很多卖家感到头大的问题,明明选了一个在其他平台是爆款的品,放到独立站上就是卖不起量,有自己想卖的产品却找不到好的供应商。对于这些问题,主要还是因为在选品时照搬电商平台的选品思路,没有认清自…

2024年中级消防设施操作员(考前冲刺)证考试题库及中级消防设施操作员(考前冲刺)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年中级消防设施操作员(考前冲刺)证考试题库及中级消防设施操作员(考前冲刺)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作…

5个超牛的Java开源OA项目(强烈推荐)

1. O2OA ——开源地址:https://gitee.com/o2oa/O2OA 概述: O2OA 是一款真正全代码(包含服务器、安卓以及IOS客户端)开源的企业应用定制化开发平台,适用于企业OA、协同办公类信息化系统的建设和开发。技术:…