Contents

ShapeAssembly: Learning to Generate Programs for 3D Shape Structure Synthesis


作者R. Kenny Jones, Theresa Barton, Xianghao Xu, Kai Wang, Ellen Jiang, Paul Guerrero, Niloy J. Mitra, Daniel Ritchie
机构Brown University  ·  Adobe Research  ·  University College London
会议SIGGRAPH Asia 2020  ·  ACM TOG Vol.39 No.6 Article 234
链接arXiv:2009.08026  ·  GitHub  ·  Project Page

通过训练神经网络"书写"可执行的领域特定语言程序,将过程化建模的可编辑性与深度生成模型的多样性结合,生成物理上合法、结构可编辑的三维零件组装形状。

Teaser Figure
Fig 1. 生成模型在潜在空间中插值产生一系列 ShapeAssembly 程序,每个程序执行后产生一把椅子的层级零件组装结构。最右列展示手动修改连续参数以创造新拓扑变体。

研究动机

问题:两类现有方法各有致命缺陷

三维人工智能需要大量高质量形状,但手工建模耗时极高。两种主流生成路线形成鲜明对比:

过程化建模

程序执行产生几何,结果高质量且可编辑,但程序难以从头编写,且单个程序捕获的形状变化有限。

深度生成模型

从数据中学习,能捕获广泛的形状变化,但输出含噪声伪影(浮空零件、不相交几何),且表示不可解读。

本文方案

训练神经网络写程序:程序捕获可解读、可编辑的结构变化;神经网络捕获过程化难以表达的跨形状相关性。

核心 insight

一个 ShapeAssembly 程序 = 一族形状。连续参数的连续变化产生连续的几何变化,离散结构跳变由程序结构本身编码。深度模型在离散程序空间中学习分布,而非直接在三维几何空间中学习。

为什么以程序为中间表示会更好?

ShapeAssembly 语言

ShapeAssembly 是一种命令式汇编语言,形状通过逐行执行语句来增量构建。语言中唯一的数据类型是长方体(Cuboid),代表零件的代理几何体。所有位置和朝向通过 attach 操作隐式确定,无显式坐标赋值。

Program Example
Fig 3. 一个带层级的 ShapeAssembly 程序及其执行结果。颜色对应实例化该零件的程序行。上图为扁平化执行结果,下图展示层级展开后的子程序(椅背展开为背板和横条)。

1. 四大代码块

一个 ShapeAssembly 程序由四类块顺序组成:

# BBlock — 声明整体形状的不可见包围体 bbox = Cuboid(l, h, w, True) # CBlock — 声明所有零件长方体代理 seat = Cuboid(l, w, h, aligned) leg = Cuboid(l, w, h, aligned) # ABlock — 通过 attach / squeeze 连接零件 attach(leg, bbox, x1,y1,z1, x2,y2,z2) squeeze(bar, leg_L, leg_R, face, u, v) # SBlock — 对称宏:生成对称副本 reflect(leg, X) translate(rung, Y, 2, 0.8)

2. Attach 语义(核心操作)

attach(c₁, c₂, x₁,y₁,z₁, x₂,y₂,z₂):将 c₁ 在其局部坐标 \((x_1,y_1,z_1)\) 处的点与 c₂ 在其局部坐标 \((x_2,y_2,z_2)\) 处的点对齐,同时可能平移、旋转或缩放 c₁ 以满足约束。参数均归一化至 \([0,1]\) 区间对应长方体各面。

Execution Steps
Fig 4. ShapeAssembly 解释器增量构建形状的过程。长方体从原点实例化,通过 attach 操作移动到目标位置。第 6 行的 reflect 宏展开为新长方体声明和两条 attach 语句。

3. 宏函数(高层次抽象)

4. 层级结构

非叶节点长方体可作为另一个子程序的包围体(BBlock)。程序递归展开形成树状层级,叶级长方体对应原子零件。这一设计使同一层级内的程序共享更多结构,提升生成模型的学习效率。

5. 可微分执行

由于 ShapeAssembly 使用命令式语义(每行立即生效),整个执行过程端到端可微:输出几何相对于程序中连续参数(长方体尺寸、attach 坐标)的梯度可以直接计算,支持通过梯度下降优化程序参数拟合目标点云。

程序提取流程

为获得训练数据,需从 PartNet 数据集中的层级零件图提取规范化的 ShapeAssembly 程序,分三步:

Overall Pipeline
Fig 2. 整体流程:(1) 定义 ShapeAssembly DSL;(2) 从 PartNet 层级零件图提取程序;(3) 以程序为训练数据训练层级序列 VAE。

步骤一:信息提取与数据正则化

步骤二:生成规范化程序

attach 和 squeeze 语句的执行顺序影响最终几何,因此引入接地附着顺序(Grounded Attachment Order)

  1. 初始时只有包围体 bbox 是"已接地"的。
  2. 只允许将新长方体连接到已接地的长方体。
  3. 执行 attach 后,新连接的长方体变为已接地。

多个合法顺序之间通过语义标签、对齐标志、面中心偏好依次打破平局,确保每个形状只对应一个规范程序。

步骤三:程序验证与过滤

F-score ≥ 75几何重建精度
≤ 12叶级长方体上限
3835Chair 训练程序
6536Table 训练程序
1551Storage 训练程序

生成模型架构

生成模型是一个层级序列 VAE(Hierarchical Sequence VAE)。编码器将层级 ShapeAssembly 程序嵌入潜在空间;解码器从潜在向量生成新程序。

Architecture
Fig 6. 层级序列 VAE 架构。编码器自叶到根逐层编码子程序;解码器递归解码层级程序,每个节点内用 GRU 逐行生成程序文本。

1. 单节点解码器(GRU + 行解码器)

解码器接收父节点潜在码 \(z_{\text{par}}\) 初始化 GRU 隐藏状态,然后逐行预测 63 维向量,各子网络职责如下:

子网络输出维度功能
f_cmd7命令类型 one-hot:<start>、<stop>、Cuboid、attach、squeeze、translate、reflect
f_cube4长方体 l/w/h/aligned 参数(以包围体尺寸为条件)
f_idx11×3命令涉及的 3 个长方体索引(11 选 1:10 个零件 + bbox)
f_att3×2attach 的两个 (x,y,z) 坐标,以涉及长方体为条件
f_sqz8squeeze 的面(6 选 1)和 (u,v) 坐标
f_sym5对称轴(3 选 1)、translate 的成员数和范围

2. 层级展开子模块 \(f_{\text{child}}\)

每预测一个 Cuboid 命令后,\(f_{\text{child}}\)(另一个 MLP)决定该长方体是否应递归展开为子程序,并生成子程序的初始潜在码 \(z_{\text{child}}\)。这使模型能自动学习层级分解粒度。

3. 语义约束强制(Semantic Validity)

与仅使用语法约束的 Grammar VAE 不同,ShapeAssembly 使用程序语义过滤:若预测的 attach 违反接地顺序,触发回溯寻找合法参数;若无法修复,在无条件生成时拒绝整个样本,在插值时跳过该行。

4. 训练配置

框架:PyTorch 优化器:Adam,lr=0.0001,无批次(per-sample) MLP:3 层,Leaky ReLU(α=0.2) 损失: 重建损失(one-hot 部分):交叉熵,权重 1 重建损失(连续参数部分):L1,权重 50 KL 散度损失:权重 0.1 训练模式:teacher forcing(seq2seq)

主要实验结果

在 PartNet 的 Chair、Table、Storage 三类形状上与 StructureNet(层级零件图 VAE)和 3D-PRNN(循环网络直接预测长方体序列)进行对比。

1. 形状质量(1000 个无条件生成样本)

% Rooted(物理连接根部)↑
% Stable(物理模拟稳定)↑
类别方法% Rooted ↑% Stable ↑% Fool ↑FD ↓
Chair3D-PRNN73.150.912.6039.30
StructureNet89.774.94.0464.79
Ours94.584.725.0622.34
Table3D-PRNN71.229.42.12140.07
StructureNet94.476.83.94173.35
Ours96.285.933.2149.07
Storage3D-PRNN44.820.84.6294.08
StructureNet96.275.05.0492.85
Ours95.383.713.5031.72

2. 潜在空间质量(插值平滑度)

沿随机高频插值序列测量平均步进大小(越小越平滑):

类别方法几何平滑度 (CD) ↓程序平滑度(编辑距离)↓
ChairStructureNet0.03843.90
Ours0.03841.33
TableStructureNet0.04744.75
Ours0.03892.48
StorageStructureNet0.05124.29
Ours0.04822.60

3. 消融实验(Chair 类别)

变体% Rooted ↑% Stable ↑% Fool ↑FD ↓
Flat(无层级)95.060.011.5877.45
No Order(无规范顺序)82.458.412.3664.17
No Align(无对齐标志)94.684.628.6829.32
No Macros(无对称宏)92.077.919.5636.78
No Reject(不拒绝无效样本)92.979.723.3620.63
Ours(完整)94.584.725.0622.34

关键发现:移除层级(Flat)大幅降低真实度(FD 77.45 vs 22.34);移除规范顺序(No Order)对所有指标均有损害;对称宏对 Table/Storage 类别影响更显著。

4. 程序可编辑性分析

将其他方法的输出反向解析为 ShapeAssembly 程序,比较紧凑度(行数)和宏函数使用率:

5. 点云拟合应用

利用可微分解释器对程序连续参数做梯度优化,使执行结果最小化与目标点云的 Chamfer 距离。与仅用前向解码器推断的结果相比,梯度优化进一步减小拟合误差,同时维持程序的物理合法性。

局限与展望

已知局限

研究趋势与未来方向

核心洞见(作者视角):"一个程序,多个形状;高度规律,同时高度多样。"程序作为数据表示是在规律性与多样性之间取得最佳平衡的根本途径。