Conference

FaçAID: A Transformer Model for Neuro-Symbolic Facade Reconstruction

Aleksander Plocharski, Jan Swidzinski, Joanna Porter-Sobieraj, Przemyslaw Musialski

Warsaw University of Technology; IDEAS NCBR; New Jersey Institute of Technology

一句话总结

用一个编码器-解码器 Transformer(双 GPT-2)把”扁平、已分割的建筑立面”逆向翻译成基于分割文法(split grammar)的可编辑过程化程序,再用可微分的尺寸优化器把生成结构对齐到目标立面,从而让静态立面变成可自由变体的过程化定义。

研究背景

过程化建模(procedural modeling)能高效生成大规模复杂的城市结构,但手工编写文法规则及其参数既耗时又需要专业知识,对非专家是一道门槛。为降低门槛,学界提出了逆过程化建模(inverse procedural modeling),从已有模型或图像中反推文法规则。然而这类逆向方法本身也带来新问题:复杂、易出错、变体和灵活性有限,而且往往需要为每个立面精心构造一次性的专用语言。

本文提出一个神经-符号(neuro-symbolic)的思路:把神经网络的学习能力与过程化模型的符号推理结合起来。核心目标是让 Transformer 学会一个”黑盒”数据生成器(文法 + 启发式规则)的逆操作,使得所有立面都映射到同一个由黑盒定义的统一程序空间中,而不是为每个立面单独设计语言。这样得到的过程化表示既能精确重建输入立面,又能被用户方便地修改以生成新的设计变体。

方法

整体框架由三个模块组成:(1) 用于神经-符号学习的 Transformer 模型;(2) 过程化引擎(procedural engine);(3) 用于尺寸调整的优化模块。

推理与建模流程:用户提供一张已分割的立面 → 预处理与词元化 → Transformer 逆向预测生成该立面的过程 → 过程化引擎执行得到结构(尺寸为默认值)→ 可微分尺寸优化器把结果对齐到目标 → 得到可交互编辑、可生成变体的过程化立面。

flowchart LR
    A[分割立面输入] --> B[词元化 Tokenizer]
    B --> C[GPT-2 编码器 g_theta]
    C --> D[GPT-2 解码器 h_phi<br/>自回归生成过程序列]
    D --> E[过程化引擎<br/>可微分过程树]
    E --> F[尺寸优化器<br/>最小化像素 MSE]
    F --> G[重建/可编辑过程化立面]

1. 过程化数据生成(自造数据集)

由于不存在公开的”立面 + 过程化定义”数据集,作者自建了一套分割文法系统。纯随机推导文法规则在绝大多数情况下会生成不合理的立面,因此设计了一个受建筑规则和启发式约束的生成器:先选取风格相关的建筑参数子集 \(S\),再由启发式模块 \(H_p(S)\) 选择下一条要应用的产生式、\(H_a(S)\) 选择该产生式的参数,两者协同保证结构合理与整体协调。整个推导过程输出一棵产生式派生树(derivation tree),执行后即可重建立面。这些产生式树就是模型要学习生成的”过程语言”,类似着色器图(shader graph),但每个节点做的是对输入空间的划分而非数学计算。

2. 词元化(输入与输出序列)

  • 输入序列 \(S_I\):分割立面由互不重叠的矩形组成,每个矩形 \(r_i\) 用 5 个词元表示 \((t_i, o^x_i, o^y_i, w_i, h_i)\),即终结符类别、左下角坐标、宽和高。矩形按左下角位置排序(先 \(Y\) 后 \(X\)),以减少同一立面对应输入序列的多样性。
  • 输出序列 \(S_O\):过程是有根树,采用广度优先遍历(BFS)展开成节点序列,每个节点用其类别 \(c_i\) 与结构参数集合 \((p^1_i, ..., p^j_i)\) 表示,节点间以分隔符拼接。连续值(位置、尺寸)按给定分辨率离散化。
  • 位置编码:除全局位置外,输入按 5 个一组分配 0–4 的局部索引;输出按”一条产生式及其参数”为一组分配动态长度的局部索引。

3. 神经-符号推理与”无效状态置零”

解码器把序列概率分解为逐词元的条件概率乘积:

\[p(S \mid \phi) = \prod_i p(s_i \mid s_{<i}, \phi)\]

并通过交叉注意力用编码器输出 \(E\) 作为条件,整体模型为:

\[f_{\theta,\phi}(S_I, s_{<i}) = h_\phi(g_\theta(S_I), s_{<i})\]

推理时逐词元生成,并在每一步做无效状态置零(invalid state nullification):把语法上非法的候选概率手动置零后重新归一化,从而保证生成的过程语法合法、可执行。该步骤对损失有显著改善(见实验表)。

4. 可微分尺寸优化

模型推理只给出结构正确、但尺寸为默认值的过程。所有产生式都实现为对尺寸参数可微,因此执行过程后所有矩形的位置与大小都是参数的可微函数。把输入分割当作图像,对过程执行结果做”软光栅化”(在矩形边缘用 sigmoid 函数组合),计算与目标之间的均方误差 \(\text{MSE}\),用 Adam 做梯度优化直到收敛,最终得到能精确匹配输入的过程,同时保留生成相似变体的能力。

实验结果

无效状态置零对测试集(10k 立面)平均负对数似然(NLL)损失的影响,模型分别在 50k/100k/200k 数据上训练:

设置 50k 100k 200k
不做无效状态置零 0.61404 0.34671 0.21412
做无效状态置零 0.06301 0.04868 0.02519

其它关键结论:结构重建的树编辑距离(tree edit distance)显示大多数重建无需任何编辑,绝大多数不超过 5 步编辑(通常意味着改动不到整棵树的 10%);尺寸优化后,绝大多数立面与真值有至少 80% 的逐像素匹配;对输入噪声鲁棒,噪声水平在 10% 以内时重建质量良好(少于约 6 次编辑即可达到真值)。消融实验表明:词元化分辨率(50×50 到 1000×1000)对学习几乎无影响;平衡的编码器/解码器深度最佳;嵌入维度(宽度)远大于层数(深度)时表现最好;输入按坐标排序比随机或按类别排序更利于泛化;数据量越大效果越好;学习率取 0.00001、批大小 32 较优。

亮点与局限

亮点:

  • 用统一的”黑盒逆操作”视角,把立面逆过程化建模转化为序列到序列的代码生成,避免为每个立面构造一次性语言。
  • 无效状态置零保证输出程序始终语法合法可执行,大幅降低损失。
  • 产生式对尺寸参数可微 + 软光栅化,使尺寸优化可用梯度方法精确对齐目标。
  • 自建带过程化标注的立面数据集与生成器并公开,填补了该类数据的空白。

局限:

  • 表达能力受分割文法语言限制,若文法无法推导出某个立面(如极不规则的阳台布局),模型就无法正确重建;扩展文法需要建筑设计方面的专业洞察。
  • Transformer 显存随序列长度平方增长,限制了可处理的立面尺寸与细节层次。
  • 存在”雪球效应”失败模式:主结构生成中一处错误(如漏掉某层的一个分段)可能导致后续生成整体错乱;有时需手动修正后从该点做局部再推理。
  • 结果高度依赖输入分割的质量与标注方式(如阳台是否显式分割),而分割本身可能是模糊的。

延伸思考

  • 论文提出可把文法做得更”通用”——只用少数几个多用途的空间划分产生式,让模型自己组合出更复杂的抽象函数,这与”学习更底层的原语再自举出高层结构”的思路一致,值得关注其对泛化与可解释性的权衡。
  • 序列长度是可扩展性的主要瓶颈,把立面切分成小块分别生成再拼接,是缓解平方级复杂度的自然路线,也与近年长序列/分块注意力的工程实践相通。
  • 训练数据完全由自建生成器合成,模型学到的是生成器分布的逆;这意味着对真实世界中超出文法覆盖的立面,泛化能力有天然上界,如何把真实立面分布引入训练(或让文法自适应扩展)是关键。
  • 从 2D 立面重建走向 3D 建筑过程化重建是自然的下一步,届时序列表示、可微执行与优化的设计都需要重新考量。