摘要
基于Transformer提出了用操作序列表示3D生成模型。
1 引言
现有3D模型
-
3D 点云:大量离散的 3D 点组成的数据表示形式;
-
多边形网格:一系列相连的多边形组成的 3D 模型;
-
水平集场:使用数值函数来表示物体的边界,并根据函数值的正负来确定物体内部和外部的区域;
局限性:仅能创建 3D 形状的离散表示,都缺少生成 3D 形状设计本质的能力 — 绘制过程。
作者提出了一个(基于Transform)深度生成网络 DeepCAD,能够输出 CAD 工具(如 AutoCAD)中用于构建 3D 形状的操作序列,这是 CAD 模型的 “绘制” 过程。
挑战在于:CAD 设计的顺序和参数化性质,(例如,曲线草图、拉伸、圆角、布尔、倒角)组成,每个操作由某些不规则的参数(离散或连续)控制。故以前开发的 3D 生成模型不适合 CAD 模型生成。
作者只考虑最常用操作,把它们统一在一个公共结构中,对命令类型、参数、序列顺序进行编码,类比CAD命令和自然语言生成基于Transformer的自编码器。该自编码器也是本篇文章的核心,如何将除本文外的常用CAD操作(圆角、布尔、倒角)按照作者思路编码。
为了训练这个自编码器,作者还创建了一个新的 CAD 命令序列数据集,以促进未来基于学习的 CAD 设计的研究
2 相关工作
参数化形状推断
3D形状生成模型
基于Transform模型
3 方法
3.1神经网络的CAD表示
CAD模型提供两种方式的表示,其一为用户的操作序列,如在一个二维平面上的画闭合轮廓草图,再通过拉伸成三维实心形状,再进行布尔操作等;另一种是CAD模型的内核表示,如B-rep,给定一个命令序列,其 B-rep 会自动计算出来,通常通过行业标准库 Parasolid。它由拓扑组件及其连接组成,以形成一个实心形状。
作者目的在于生成CAD命令序列的模型,而不是B-rep。B-rep只是CAD命令序列的抽象表示。
3.1.1 CAD指令的规范
作者仅考虑sketch and extrusion
sketch用于在三维空间的二维平面上指定闭合曲线。每个闭合曲线被成为loop(环),多个环形成一个闭合区域,称为profile(轮廓)。一个环总是以SOL开始,按逆时针顺序排列,以最左下角曲线开始,仅考虑三种常见:直线、曲线和圆。其中直线用结束点,曲线用结束点、弧度角和逆时针标示,圆用圆心和半径表示。
Table 1
每个曲线命令由其曲线类型(L,A,R)和参数(Table 1)描述,曲线参数指定了曲线在草图平面的局部参考框架中的二维位置。由于每个环中的曲线是一个接一个连接的,为了简洁,我们从参数列表中排除了曲线的起始位置;第一条曲线从草图平面的原点开始,原点的空间坐标通常在拉伸命令中指定。草图轮廓由一个环列表表示,每个环
由一系列从指示命令开始的曲线组成,例如
,每个曲线命令
指定曲线类型
以及形状参数
拉伸命令有两个目的:
将二维草图拉伸成三维实体,可以是单向、对称或者双向,由u确定
指定布尔运算将新拉伸的三维实体与先前形状合并,包括创建新实体、与现有实体连接、切割和相交,由b确定
拉伸命令还需要定义草图平面的三维方向和其二维局部参考框架,这是通过旋转矩阵(Table 1 中 参数确定)定义。命令参数包括一个拉伸轮廓的比例因子 s
通过这些命令,我们将一个 CAD 模型 M描述为交替出现的曲线命令和拉伸命令序列。换句话说 M=,其中每个
指定命令类型和参数。
3.1.2 网络友好的表示
类别自然语言,词汇表由一系列CAD命令组成,形成句子。其中草图轮廓是主语,拉伸是谓语。
每个命令有有不同数量的参数,且参数是离散和连续的混合,因此对这些参数进行正则化。
首先,对于每个命令,其参数堆叠成一个 16×1 的向量,其元素对应于 Table 1 中所有命令的集合参数,将未使用参数记作-1.
在此基础上固定每个模型的命令总数,通过添加空命令填充命令序列长度到达最大命令长度60.
此外,我们通过量化连续参数来统一连续和离散参数。为此,我们将每个 CAD 模型规范化到一个 2×2×2的立方体内;我们还将每个草图轮廓规范化到其边界框内,并在拉伸命令中包括一个比例因子 s来恢复规范化轮廓到其原始大小。这种规范化限制了连续参数的范围,使我们能够将其值量化为 256 个级别,并使用 8 位整数表示。结果是,所有命令参数都只有离散值集合。参数量化不仅是训练基于 Transformer 网络的常见实践,对于 CAD 模型来说,它对于提高生成质量尤为重要。在 CAD 设计中,必须遵循某些几何关系,例如平行和垂直的草图线条。然而,如果生成模型直接生成连续参数,通过参数回归获得的值容易产生错误,破坏这些严格的关系。相反,参数量化使网络能够将参数 “分类” 到特定级别,从而更好地遵循学习到的几何关系。
3.2 CAD模型的自编码器
输入为一个CAD命令序列,
为固定数量
首先,每个命令 被分别投射到维度为
的连续嵌入空间。然后,将所有嵌入组合起来输入编码器 ,输出一个潜在向量
。解码器以潜在向量 z作为输入,输出生成的 CAD 命令序列
。
一个CAD命令中包含两部分:命令类型和命令参数。
嵌入部分:
编码器:
四层 Transformer 块组成,每层有八个注意力头和512的前馈维度
解码器:
解码器 DDD 也建立在 Transformer 块上,具有与编码器相同的超参数设置。它以学习到的常量嵌入为输入,同时关注潜在向量 zzz。最后一个 Transformer 块的输出被送入线性层,以预测 CAD 命令序列
3.3 CAD数据集创建
新数据集构建过程始于 ABC 数据集:
-
利用其中每个 CAD 模型链接至 Onshape 的原始设计。
-
接着,通过 Onshape 的 FeatureScript 语言(一种专门用于解析 CAD 操作与参数的领域特定语言),作者筛选出仅使用 “草图” 和 “拉伸” 操作的模型,舍弃了那些采用更复杂操作的模型。
-
对于符合条件的模型,作者编写了一段 FeatureScript 程序来提取其草图轮廓和拉伸操作,并将其转化为 Table 1 中列出的命令格式。
3.4 模型训练和生成
训练时优化目标为交叉熵函数,使用 Adam 优化器,初始学习率为 0.001,并设置线性预热期为前 2000 步。所有 Transformer 模块的 Dropout 率设定为 0.1,并在反向传播中应用梯度裁剪值为 1.0。我们以批处理大小 512 对网络进行 1000 轮的训练。
当自编码器训练完成后,我们可以使用一个 256 维的潜在向量 z 来表示一个 CAD 模型。为了自动生成 CAD 模型,我们运用 latent-GAN 技术于已学得的潜在空间上。生成器和判别器都是简单的多层感知机(MLP)网络,各自包含四层隐藏层,它们的训练采用带有梯度惩罚的 Wasserstein-GAN 策略。最后,生成 CAD 模型时,我们从多元高斯分布中采样一个随机向量,并将其输入 GAN 的生成器中。GAN 的输出是一个潜在向量 z,随后将其输入基于 Transformer 的解码器,从而生成 CAD 模型。
4 实验
评估自编码器的两个维度:自编码性能(用于指示生成模型表达目标数据分布的程度)和形状生成
5 总结
-
曲线命令类型有限:目前,作者仅考虑了三种最常用的曲线命令类型(直线、弧线和圆)。然而,其他曲线命令也可以轻松添加,例如可以通过三个控制点以及起点来指定的三次贝塞尔曲线,其参数结构可以按照 3.1 中描述的方式进行。
-
操作命令的局限性:虽然像旋转草图这样的操作可以类似于拉伸命令进行编码,但某些 CAD 操作(如倒角)作用于形状边界的部分,因此需要参考模型的 B-rep(边界表示),而不仅仅是其他命令。将这些命令纳入生成模型仍需进一步研究。
-
拓扑有效性无法保证:并非每个 CAD 命令序列都能生成拓扑上有效的形状。作者的生成网络不能保证其输出的 CAD 序列的拓扑一致性。在实践中,生成的 CAD 命令序列很少失败,但随着命令序列变长,失败的可能性增加。