虽然最近关于根据文本提示生成 3D点云的工作已经显示出可喜的结果,但最先进的方法通常需要多个 GPU 小时来生成单个样本。这与最先进的生成图像模型形成鲜明对比,后者在几秒或几分钟内生成样本。在本文中,我们探索了一种用于生成 3D 对象的替代方法,该方法仅需 1-2 分钟即可在单个 GPU 上生成 3D 模型。我们的方法首先使用文本到图像的扩散模型生成单个合成视图,然后使用以生成的图像为条件的第二个扩散模型生成 3D 点云。虽然我们的方法在样本质量方面仍未达到最先进的水平,但它的采样速度要快一到两个数量级,为某些用例提供了实际的权衡。我们在 https://github.com/openai/point-e 上发布了我们预训练的点云扩散模型,以及评估代码和模型。
关于扩散模型,有越来越多的相关工作在研究这块,文中提到的方法就是基于这个模型展开的。我们的目标是使用神经网络类似 从某个分布 中采样。在高斯扩散下,我们定义了一个噪声过程:
直观而言,这个过程将高斯噪声逐渐添加到信号中,每个时间步长添加的噪声量由某个噪声时间表β 决定。我们采用噪声时间表,使得到最终时间步长 时,样本 几乎不包含任何信息(即它看起来像高斯噪声)。Ho等人注意到可以直接跳到噪声过程的给定时间步,而无需运行整个过程:
为了训练得到扩散模型,我们我们将 近似为神经网络 θ,然后我们可以通过从随机高斯噪声 开始并逐渐反转噪声过程直到到达无噪声样本 来生成样本。通过足够小的步长,θ 可以参数化为对角高斯分布,Ho 等人(2020年) 提出通过预测 ,将添加到样本 的有效噪声来参数化该分布的均值。然而 Ho 等人(2020) 修改 θ 的方差到一个合理的启发式时间步,Nichol & Dhariwal(2021) 通过预测方差获得更好的结果以及平均值。
(Song 等人,2020 年)剔除可以通过微分方程进行扩散采样,从而允许使用各种 SDE 和 ODE 求解器从这些模型中采样。卡拉斯等人 (2022) 发现精心设计的二阶 ODE 求解器在质量和采样效率之间提供了良好的权衡,我们将此采样器用于我们的点云扩散模型。
为了在扩散模型中权衡样本多样性,可以使用几种指导策略。Dhariwal & Nichol (2021) 介绍了分类器指导,其中来自噪声感知分类器θ 的梯度用于扰动每个采样步骤。他们发现,增加扰动的规模会提高生成保真度,同时会降低样本多样性。Ho & Salimans (2021) 引入无分类器指导,其中条件扩散模型 使用类别标签进行训练。在采样期间,模型的输出从无条件预测线性外推到条件预测:
这种方法实施起来很简单,只需要在训练期间随机丢弃条件信息。我们在整个模型中采用这种技术,使用丢弃概率 为0.1。
我们不是训练单个生成模型直接生成以文本为条件的点云,而是将生成过程分为三个步骤。首先,我们生成一个以文本标题为条件的综合视图。接下来,我们生成一个基于合成视图的粗略点云(1,024 个点)。最后,我们生成了一个以低分辨率点云和合成视图为条件的精细点云(4,096 个点)。在实践中,我们假设图像包含来自文本的相关信息,并且不明确地以文本为条件点云。
我们在数百万个 3D 模型上训练我们的模型。我们发现数据集的数据格式和质量差异很大,促使我们开发各种后处理步骤以确保更高的数据质量。
为了将我们所有的数据转换为一种通用格式,我们使用 Blender(Community,2018)从 20 个随机摄像机角度将每个 3D 模型渲染为 RGBAD 图像,Blender 支持多种 3D 格式并带有优化的渲染引擎。对于每个模型,我们的 Blender 脚本将模型标准化为边界立方体,配置标准照明设置,最后使用 Blender 的内置实时渲染引擎导出 RGBAD 图像。
然后,我们使用渲染将每个对象转换为彩色点云。特别地,我们首先通过计算每个 RGBAD 图像中每个像素的点来为每个对象构建一个稠密点云。这些点云通常包含数十万个不均匀分布的点,因此我们还使用最远点采样来创建均匀的 4K 点云。通过直接从渲染构建点云,我们能够避免尝试直接从 3D 网格采样点时可能出现的各种问题,例如模型中包含的采样点或处理以不寻常文件格式存储的 3D 模型 。
最后,我们采用各种启发式方法来减少数据集中低质量模型的出现频率。首先,我们通过计算每个点云的 SVD 来消除平面对象,只保留那些最小奇异值高于某个阈值的对象。接下来,我们通过 CLIP 特征对数据集进行聚类(对于每个对象,我们对所有渲染的特征进行平均)。我们发现一些集群包含许多低质量的模型类别,而其他集群则显得更加多样化或可解释。我们将这些集群分到几个不同质量的容器中,并使用所得容器的加权混合作为我们的最终数据集。
本文的点云模型以文中数据集的渲染视图为条件,这些视图都是使用相同的渲染器和照明设置生成的。因此,为了确保这些模型正确处理生成的合成视图,我们的目标是显式生成与数据集分布相匹配的 3D 渲染。
为此,我们微调了 GLIDE,混合了其原始的数据集和我们的 3D 渲染数据集。由于我们的 3D 数据集与原始 GLIDE 训练集相比较小,因此我们仅在 5% 的时间内从 3D 数据集中采样图像,其余 95% 使用原始数据集。我们对 100K 次迭代进行了微调,这意味着该模型已经在 3D 数据集上进行了多次迭代(但从未两次看到完全相同的渲染视点)。
为了确保我们始终对分布渲染进行采样(而不是仅在 5% 的时间内对其进行采样),我们在每个 3D 渲染的文本提示中添加了一个特殊标记,表明它是 3D 渲染;然后我们在测试时使用此标记进行采样。
为了生成具有扩散的点云,我们扩展了 Zhou 等人(2021a) 使用的框架,为点云中的每个点包含 RGB 颜色。特别地,我们将点云表示为形状为 的张量,其中 是点的数量,内部维度包含 坐标以及 颜色。所有坐标和颜色都归一化到 [-1,1]。然后我们直接通过扩散生成这些张量,从形状为 的随机噪声开始,并逐渐对其进行去噪。
为了以图像为条件,我们将其输入预训练的 ViT-L/14 CLIP 模型,从该 CLIP 模型(形状为 )中获取最后一层嵌入,并将其线性投影到另一个形状为 的张量之前 将其添加到 Transformer 上下文中。我们发现这优于使用单个 CLIP 图像或文本嵌入。
我们模型的最终输入上下文的形状为 。为了获得长度为 的最终输出序列,我们采用输出的最终 K 个标记并将其投影以获得 个输入点的预测。
值得注意的是,我们没有为这个模型使用位置编码。因此,模型本身对于输入点云是排列不变的(尽管输出顺序与输入顺序相关)。
对于图像扩散模型,最好的质量通常是通过使用某种形式的层级结构来实现的,其中低分辨率基础模型产生输出,然后由另一个模型进行上采样。我们采用这种方法来生成点云,首先使用大型基础模型生成 1K 点,然后使用较小的上采样模型上采样到 4K 点。值得注意的是,我们模型的计算需求随点数的增加而增加,因此对于固定模型大小,生成 4K 点的成本是生成 1K 点的四倍。
我们的上采样器使用与我们的基本模型相同的架构,为低分辨率点云提供额外的条件标记。为了达到 4K 点,上采样器以 1K 点为条件并生成额外的 3K 点,这些点被添加到低分辨率点云中。我们通过一个单独的线性嵌入层传递条件点,而不是用于 的线性嵌入层,从而允许模型将条件信息与新点区分开来,而无需使用位置嵌入。
对于基于渲染的评估,我们不直接渲染生成的点云。相反,我们将点云转换为带纹理的网格并使用 Blender 渲染这些网格。从点云生成网格是一个经过充分研究的问题,有时甚至是一个难题。我们的模型生成的点云通常有裂缝、异常值或其他类型的噪声,使问题特别具有挑战性。为此,我们简要尝试使用预训练的 SAP 模型(Peng 等人,2021 年),但发现生成的网格有时会丢失点云中存在的大部分形状或重要的形状细节。我们没有训练新的 SAP 模型,而是选择了一种更简单的方法。
为了将点云转换为网格,我们使用基于回归的模型来预测给定点云的对象的符号距离场,然后将行进立方体 (Lorensen & Cline, 1987) 应用于生成的 SDF 以提取网格。然后,我们使用距离原始点云最近的点的颜色为网格的每个顶点分配颜色。
由于通过文本条件合成3D是一个相当新的研究领域,因此还没有针对此任务的标准基准集。然而,其他几项工作使用 CLIP R-Precision 评估 3D 生成,我们在表 1 中与这些方法进行了比较。除了 CLIP R-Precision 之外,我们还注意到报告的每种方法的采样计算要求。
虽然我们的方法比当前最先进的方法表现要差些,但我们注意到此评估的两个微妙之处,它们可以解释部分(但可能不是全部)这种差异:
本文介绍了 Point E,一个用于从文本生成点云的方法,它首先生成合成视图,然后生成以这些视图为条件的彩色点云。我们发现 Point E 能够根据文本提示有效地生成多样化和复杂的 3D 形状。希望我们的方法可以作为文本到 3D这一块研究领域进一步工作的起点。
本文仅做学术分享,如有侵权,请联系删文。