从混沌到代码: 利用 ArcPro 将稀疏点云转化为结构化 3D 建筑
想象一下,你正操控无人机飞越一座城市进行测绘。无人机拍摄了数千张图像,通过摄影测量技术,你生成了场景的 3D 表示。然而,你得到的通常不是一个原始、完美的、CAD 就绪的模型。相反,你得到的是一个“点云”——由数百万个悬浮点组成的混乱集合。
如果扫描质量很高,点会很密集,你可以清晰地看到表面。但在现实世界中,数据往往是杂乱的。航空扫描可能是稀疏的 (包含极少的点) 、嘈杂的 (点的位置不对) 或不完整的 (由于遮挡,整面墙可能会缺失) 。
对于城市规划者、游戏开发者和创建数字孪生的工程师来说,将这些杂乱、稀疏的点转化为干净、结构化的 3D 网格是一件非常头疼的事。当点与点之间距离太远时,传统算法很难“连点成线”。神经网络通常会产生“团块状”的形状,缺乏建筑特有的锐利边缘。
ArcPro 登场。

如图 1 所示,研究人员开发了一个新框架,采用了一种截然不同的方法。 ArcPro 不是尝试直接对点进行网格化,而是将 3D 重建问题视为一个语言翻译问题。它观察点云,然后编写一段描述该建筑的计算机程序。当该程序执行时,就会生成一个干净、结构化的 3D 模型。
在本文的深度解析中,我们将探讨 ArcPro 如何弥合非结构化数据与结构化代码之间的鸿沟,从而实现仅用少至 200 个点就能重建复杂的建筑。
挑战: 为什么“连点成线”如此困难?
要理解 ArcPro 为何是一项突破,我们需要先看看现有方法为何会失败。
图元的问题
传统的重建方法 (如 RANSAC 或 PolyFit) 在点云中寻找数学模式。它们试图将平面、圆柱体或盒子拟合到数据上。当你有密集数据时,这非常有效——如果你在一面墙上有 10,000 个点,从数学上拟合一个平面很容易。
但是,如果同一面墙上只有分散的 50 个点呢?或者如果点包含噪声呢?传统算法就会崩溃。它们开始检测到不存在的平面,或者无法检测到存在的平面。
深度学习的问题
最近的深度学习方法 (如 BSP-Net) 试图学习建筑的形状。然而,它们通常在拓扑结构 (建筑的连接性) 上表现挣扎。它们可能会生成一个远看还可以的网格,但实际上是一堆不连接的面或“水密”团块,不尊重人类建筑特有的锐利、层级逻辑。
建筑场景不是随机的有机形状;它们遵循规则。楼层是堆叠的。墙壁是垂直的。二楼的轮廓通常与一楼的轮廓有关。ArcPro 的成功在于它通过设计强制执行了这些规则。
核心概念: 逆向过程建模
ArcPro 的核心洞察是,建筑可以用建筑程序 (Architectural Programs) 来描述。
不要把建筑看作是三角形列表 (网格) ,而应看作是一个食谱:
- 从地面高度 Z 开始。
- 创建一个矩形的底层。
- 在底层之上,创建一个稍小的第二层。
- 在那之上,创建一个塔楼。
如果你能从点云中预测出这个“食谱”,你就不需要担心表面噪声。你只需运行食谱 (程序) ,就能得到一个几何上完美的建筑。
这个过程被称为逆向过程建模 。 标准的过程建模流程是 程序 \(\rightarrow\) 网格。ArcPro 学习的流程是 点云 \(\rightarrow\) 程序。

图 2 展示了整个流程。这是一个合成与推理的闭环:
- DSL 定义: 研究人员定义了一种描述建筑的语言。
- 数据合成: 他们使用这种语言生成了成千上万个随机的建筑“食谱”及其对应的 3D 网格/点云。
- 训练: 神经网络学习观察点云并预测原始食谱。
- 推理: 在新的真实世界数据上,网络预测一个程序,然后将其编译成 3D 网格。
建筑的语言: 领域特定语言 (DSL)
为了教计算机编写建筑食谱,研究人员创建了一种名为 ArcPro 的领域特定语言 (DSL) 。
该 DSL 将建筑视为一棵建筑树 (Architectural Tree) 。 树的根是地面。子节点是层 (建筑的块) 。一层可以是其他层的父节点 (例如,坐落在裙楼上的塔楼) 。
关键命令
这种语言出奇地简单,主要依赖于两个语句:
1. SetGround
这确立了建筑在世界中的位置。
这里,\(\Phi\) 代表位于特定高度 \(z\) 的地平面。
2. CreateLayer
这是该语言的核心主力。它创建一个 3D 体积 (棱柱体) 。

- parent: 这一层坐落在哪里?
- h: 这一层有多高?
- c: 这一层的 2D 轮廓 (占地面积) 是什么?
从树到代码
为了将树结构输入神经网络 (网络更喜欢线性序列) ,使用广度优先搜索将树展平。

这创建了一串线性的命令字符串,神经网络可以逐一输出。
可视化编译过程
代码是如何变成建筑的?图 3 完美地展示了这个“编译”过程。

- 面板 (a): 显示伪代码。你可以看到 \(L_1\) 到 \(L_4\) 层被定义,并带有父子关系。
- 面板 (b): 显示这些层的 2D “轮廓”。
- 面板 (c): 显示最终的 3D 结果。
注意几何形状是多么干净。因为输出是由代码生成的,所以墙壁绝对垂直,楼层绝对平行。没有任何表面噪声。
处理复杂性: 子轮廓
真实的建筑不仅仅是堆叠的盒子;它们有复杂的退台和多座塔楼。DSL 通过定义子层的形状 (\(c_{L'}\)) 如何与其父层的形状 (\(c_L\)) 相关联来处理这个问题。

如图 4 所示,子层是通过修改父层的轮廓生成的。这可能涉及收缩边缘 (上排) 或将父轮廓分割成网格并选择特定单元向上拉伸 (下排) 。这种层级依赖性确保了生成的建筑在结构上是合理的——你很少会看到第 10 层悬浮在空中,与第 9 层完全断开。
神经架构: 读取点云,编写 Token
既然我们有了一种语言,我们如何训练机器去说这种语言?研究人员采用了一种编码器-解码器架构,类似于用于语言翻译的系统 (如 Google 翻译) ,但针对 3D 数据进行了调整。
1. 编码器: 3D 稀疏卷积
输入是稀疏点云。用于图像的标准卷积神经网络 (CNN) 在 3D 数据上效果不佳,因为 3D 空间大部分是空的空气。
ArcPro 使用稀疏 3D 卷积网络 。 该网络只在实际有点的地方进行计算,因此效率极高。它处理体素化的点云并提取密集的特征向量——本质上是对建筑形状的数学总结。
2. 解码器: Transformer
特征向量被传递给一个 Transformer 解码器 。 Transformer 是像 GPT 这样的大型语言模型 (LLM) 背后的架构。在这种情况下,Transformer 不是预测句子中的下一个单词,而是预测建筑程序中的下一个 Token 。
3. Token 化
就像英文文本被分解成 Token 一样,ArcPro DSL 也被分解成离散的单元。

如表 1 所示,系统对命令 (<CreateLayer>、<SetGround>) 和参数括号使用特定的 Token。至关重要的是,像坐标和高度这样的连续值被离散化 (分箱) 为数字 Token。这将回归问题 (预测像 12.45m 这样的浮点值) 变成了分类问题 (预测 Token ID #45) ,这是 Transformers 非常擅长处理的。
4. 语法约束采样
用 AI 生成代码的一个常见问题是语法错误。模型可能会预测一个 CreateLayer 命令,但忘记指定高度。
为了防止这种情况,ArcPro 在推理过程中使用了有限状态机 (FSM) 。 FSM 充当“语法警察”。如果模型刚刚预测了一个 SetGround Token,FSM 知道下一个 Token 必须是一个数字 (Z 高度) 。它会屏蔽所有非数字 Token,强制网络选择一个有效选项。这确保了 ArcPro 生成的每个程序在语法上都是有效的,并且可以编译成网格。
训练数据引擎
深度学习需要大量数据。目前根本没有包含数百万个建筑及其对应“源代码”的数据集。因此,研究人员建立了自己的数据工厂。
他们创建了一个前馈过程生成器 。 通过随机化 DSL 的参数 (高度、分割数、退台距离) ,他们可以生成无限数量独特的“建筑树”。

图 10 展示了生成的形状的多样性。从简单的塔楼到复杂的多层结构,生成器创造了“真值 (Ground Truth)”程序。这些程序被编译成网格,然后从表面采样点以创建输入点云。
为了使网络具有鲁棒性,他们特意降低了这些输入的质量:
- 下采样: 减少点的数量。
- 噪声: 抖动点的位置。
- 裁剪: 移除建筑的大块区域以模拟遮挡。
这迫使网络学习基于建筑逻辑“构想”出缺失的结构。
实验结果
那么,它有效吗?与最先进方法的比较结果令人震惊。
视觉比较

在图 5 中,请看“SfM Point Cloud”列。输入是嘈杂且混乱的。
- PolyFit (一种传统优化方法) 经常无法封闭网格或产生锯齿状、混乱的几何形状。
- BSP-Net (一种学习方法) 创建了一个网格,但它看起来通常像是“融化了”或过于简化,缺失了建筑明显的阶梯状特征。
- ArcPro (Ours) 完美地捕捉到了明显的层级结构 (“婚礼蛋糕”形状) 。它在几何准确性和结构简洁性之间取得了平衡。
极端稀疏性
ArcPro 真正的考验是低质量数据。图 11 展示了该方法的韧性。

看图 11 右下角的例子。输入只有 200 个点 。 在人眼看来,它几乎不像一座建筑。然而,ArcPro 恢复出了一个合理的多层结构。因为模型已经 (通过 DSL 先验) “学会”了建筑的样子,它知道那几个悬浮的点很可能对应于矩形层的特定角落。
为什么传统方法会失败
论文具体分析了像 RANSAC (平面拟合) 这样的方法为何在这些数据上失败。

如图 12 所示,RANSAC (第 2 行) 试图寻找平面,但被稀疏性搞糊涂了,经常漏掉整面墙或检测到不存在的对角平面。相比之下,ArcPro (第 3 行) 施加了 DSL 的“类曼哈顿”约束,产生了一个与参考模型 (第 4 行) 相匹配的干净模型。
超越重建: 语言与速度
ArcPro 不仅仅是为了制造漂亮的网格。“程序”表示法开启了令人着迷的新能力。
1. 语义检索
因为输出是代码,所以你可以查询它。你不能问一个标准的 3D 网格: “给我看所有塔楼比底座高的建筑。”但你可以问 ArcPro 程序这个问题。

图 14 展示了大型语言模型 (如 ChatGPT) 如何根据 DSL 定义的提示,将自然语言查询 (例如,“具有两个分支结构的建筑”) 转换为 Python 代码,以检查 ArcPro 程序。这将城市规模的 3D 模型数据库变成了一个可搜索的文本数据库。
2. 极速处理
ArcPro 的效率极其惊人。

在图 13 中,作者将 ArcPro 与传统的多视图立体视觉 (MVS) 流程进行了比较。
- MVS: 耗时 739 秒。生成包含 450,000 个面的沉重网格。
- ArcPro: 耗时 0.034 秒 。 生成包含 46 个面的轻量级网格。
虽然 MVS 网格具有纹理和精细细节,但 ArcPro 网格即时提供了结构抽象。对于实时导航或城市规划模拟等应用,这种速度和低数据占用是颠覆性的。
结论
ArcPro 代表了我们对 3D 深度学习思考方式的转变。它不再将 3D 重建视为信号处理任务 (过滤噪声以寻找表面) ,而是将其视为认知任务——理解生成数据的逻辑结构。
通过为建筑定义一种领域特定语言并训练模型去“说”它,ArcPro 实现了三件事:
- 鲁棒性: 它在其他算法失效的数据上也能工作。
- 结构: 它保证了干净、水密、层级的模型。
- 可解释性: 输出不是一个黑盒网格;它是可读、可编辑的代码。
随着我们迈向更大的数字孪生和更自主的空间计算,像 ArcPro 这样弥合混乱现实与结构化逻辑之间鸿沟的方法,将成为计算机视觉工具箱中不可或缺的工具。
](https://deep-paper.org/en/paper/2503.02745/images/cover.png)