BrickNet: Graph-Backed Generative Brick Assembly¶
会议: CVPR 2026
arXiv: 2604.22984
代码: https://kulits.github.io/BrickNet (项目主页,数据集与模型公开)
领域: 3D视觉 / 程序化生成 / LLM 序列建模
关键词: LEGO 积木装配, 图参数化, 自回归生成, LDraw 数据集, 连接器语义
一句话总结¶
本文把 LEGO 积木的搭建序列当作"程序"让 LLM 自回归生成,关键是放弃直接回归每块砖的 6-DoF 坐标、改用一种以"连接关系"为一等公民的图支撑参数化(生成树),配合首次构建的 32 万样本大规模人工设计 LDraw 数据集 BrickNet,使生成序列的连通有效步数从 < 50 步提升到 94+ 步。
研究背景与动机¶
领域现状:很多物体天然是"部件 + 部件如何配置"的产物,3D 生成领域近年开始显式建模这种关系——部件图、可执行 shape program 等。LEGO 积木的顺序装配是这个大问题的一个紧凑实例:一个砖块结构不仅由部件的排布定义,还由它的"搭建过程"定义,每加一块都要满足离散的连接规则。
现有痛点:已有的生成式积木装配工作都被限制在"玩具子集"里——假设一个离散网格、只用少数几种砖型(如 BrickGPT 只用 8 种砖、限制在 \(20\times20\times20\) 体素网格),把三角网格体素化来造训练样本。这种设定丢掉了 LEGO 真正吸引人的表达力:上千种部件、丰富的连接多样性与语义。
核心矛盾:一旦从网格扩展到真实样本,就出现表示困境。在简单网格里"上就是上"、旋转坐标系恒定,预测坐标很自然;但真实样本不遵守这些假设。以论文里的蜻蜓为例(Fig.2b),要从部件 1 自回归装到部件 5,模型必须在中间一直追踪每块砖的 6-DoF pose、沿着不断偏移的旋转坐标系累积变换——这变成一个数值精度问题,直接预测 pose 时搭几步序列就失效了。
本文目标:(1) 解决缺少合适训练数据的问题;(2) 找到一种能处理任意连接性、又不会精度爆炸的结构表示;(3) 在此之上训练能生成物理有效序列的自回归模型。
切入角度:作者的洞察是——虽然部件被放在 3D 空间里,但定义整体的是部件之间的空间关系。所以应该让"连接性"成为一等公民,而不是去预测绝对坐标。
核心 idea:用"类型化连接器 + 连接图的生成树"来参数化结构,把每条边变成一个可执行的、决定两个部件间局部 \(SE(3)\) 变换的指令,从而把"精度累积"问题转化为"离散连接选择"问题。
方法详解¶
整体框架¶
BrickNet 的管线是:先给 LDraw 标准部件库的每个部件标注类型化连接器(5 类连接语义),再把一个无序部件集合按配对语义连成连通图,从图里采样生成树得到一条搭建序列(每条边是一个离散放置 action),最后把序列文本化、用它微调 LLM 做自回归生成。推理时模型一步步吐出"加哪个部件 + 怎么连",执行这段"程序"即可恢复每块砖的 6-DoF pose。关键在于:坐标从不被直接预测,而是由连接关系执行后算出来。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["LDraw 部件库<br/>(2.4 万 CAD 部件)"] --> B["类型化连接器语义<br/>5 类连接 + 标注"]
B --> C["图支撑的参数化<br/>连通图→生成树搭建序列"]
C --> D["BrickNet 数据集<br/>PT 32 万 / SFT 6.7 万"]
D --> E["自回归 LLM 生成<br/>Qwen3 微调 + 核采样"]
E -->|执行程序| F["物理有效结构<br/>(6-DoF pose)"]
关键设计¶
1. 类型化连接器语义:把 6-DoF 连接压成几个离散/低维参数
直接预测 pose 之所以崩,是因为要在浮点空间里精确累积旋转平移。本文的应对是给每个部件标注带类型的连接器,并把砖与砖的连接归纳成 5 个家族,每类只需极少参数就能确定两部件间的 \(SE(3)\) 变换:Stud(凸点-孔)最常见,确定哪个 stud 插哪个孔后,只剩 1 个偏航角 yaw 参数;Hinge(铰链)在 1 个旋转自由度之外再加一个布尔"flip"(相当于拆开转 180° 再接回);Axle(轴)在铰链基础上再加沿轴的"滑移"标量;Ball(球)有 3 个旋转自由度;Fixed(固定,如轮毂插轮胎)无任何自由度,知道谁配谁就够了。每个家族下还细分子类(如 stud 又分 standard/open/hole/tube/post),并规定配对规则(如 pin 只配 pin socket、axle 可配 pin 与 axle socket)。
标注靠"程序化 + 人工"混合完成:LDraw 部件由分层子部件定义,通过在原语层级里识别 stud.dat 并核对组合旋转矩阵里的尺度,就能推断出精确的连接器位置。难点在碰撞检测——真实砖必须靠塑性形变才能咬合,所以"良好连接"本身就带一定碰撞;而砖的连接高度非凸(tube 紧套 stud 时四面都碰),且部件多为非水密(non-watertight),VHACD 这类凸分解用不了。作者为此设计了一条多阶段管线把部件网格"补成水密",再用改良版 PFPOffset 把所有面内缩 0.25 LDU(0.1mm),得到可用于标准碰撞检测的网格。
2. 图支撑的参数化:用生成树把结构序列化成可执行程序
有了类型化连接器,本设计回答"怎么把整个结构紧凑地表示成一条序列"。给定一个无序部件实例集合,按配对语义把连接器两两配对、形成边,每条边恰好定义两个配对部件之间完整的局部 \(SE(3)\) 变换;所有边一起构成连接图。由于单条边就足以确定相对变换,整个结构可以被这张图的生成树紧凑且可解释地表示。从任意根部件出发采样一串搭建步骤——每步指定"加哪个部件 + 它如何连到已有结构上"——这串步骤就是一个程序,执行后产出带 6-DoF pose 的部件集合。序列化时把旋转参数四舍五入到最近的度、滑移标量到最近的 LDU。
这正是它优于直接预测 pose 的根本原因:连通性被直接编码进表示里,模型不需要在浮点空间累积变换、维持长程数值精度,只需做离散的"选连接器、选配对、选少量低维参数"。生成的概率被写作标准链式分解 \(p(x)=\prod_{i=1}^{n}p(s_i\mid s_1,\ldots,s_{i-1})\)。代价是表示要求模型预先知道这个领域——每个部件上连接器的位置必须靠预训练学到,因此换到新部件词表的泛化是个挑战。
3. BrickNet 大规模人工设计数据集:补上"真实积木"训练数据的空白
这套表示要落地,必须有真实、复杂、人工设计的积木结构来训练,而这正是过去稀缺、无法像体素那样轻松 bootstrap 的部分。作者从公开在线来源整理出 BrickNet:320,808 个样本、9,743 种独特部件、累计 40,549,969 块放置的砖。它被划成两个重叠子集:BrickNet-PT(预训练)保留长尾、可含上千块砖的超大结构;BrickNet-SFT(微调)含 67,185 个样本,每个 4–100 块、满足部件-颜色-类型多样性、且整体零碰撞,并用 8 视角渲染 + Gemini 2.5 生成文字描述。另留 512 个同标准样本作评测集。相比之下 BrickGPT 只有 8 种砖、OMR 仅 1,814 样本,BrickNet 在规模与表达力上都大一个量级。
4. 自回归 LLM 微调与核采样:让通用 LLM 学会"搭积木程序",并绕开全温度采样的崩塌
最后把上述序列喂给 LLM。作者微调 Qwen3 的 0.6b/1.7b/4b/8b/14b instruct 模型,序列长度上限 4096 token,只用标准的 next-token 交叉熵。一个关键工程发现是:在 4096 长度下用真·全温度祖先采样(AS),哪怕只有 0.1% 概率质量落在非法续写上,采到一条完整有效序列的概率也 < 1.7%,所以大多数生成都被"垃圾 token"毁掉。改用核采样(NS,top-k=20、top-p=0.95)后连通有效性直接翻倍,作者后续实验都采用 NS。文本条件生成则是在 PT 模型上用 BrickNet-SFT 继续微调、目标函数不变。
损失函数 / 训练策略¶
训练目标全程是标准自回归 next-token-prediction 交叉熵(公式 1),无额外结构/物理约束损失。两阶段:先在 BrickNet-PT 上做无条件预训练,再在 BrickNet-SFT 上做文本条件微调;采样阶段统一用核采样(top-k=20、top-p=0.95)并在无条件实验里抑制 EOS 强制生成满 100 步。
实验关键数据¶
主实验¶
无条件生成(Tab.2):每个模型采 \(2^{16}\) 条满长度(100 块)序列,报告"直到出现失效步前的平均成功搭建步数"。图参数化(Graph)相比直接 pose 预测(Pose)在连通性上优势巨大;碰撞维度两者相近。
| 模型规模 | 连通性 Graph (NS) | 连通性 Pose (NS) | 碰撞 Graph (NS) | 碰撞 Pose (NS) |
|---|---|---|---|---|
| 0.6b | 94.1 | 31.8 | 16.0 | 14.5 |
| 1.7b | 95.1 | 35.5 | 16.6 | 16.1 |
| 4b | 96.9 | 45.1 | 18.0 | 20.3 |
| 8b | 97.0 | 44.9 | 18.7 | 20.1 |
| 14b | 96.9 | 49.9 | 19.1 | 22.4 |
文本条件生成(Tab.3,512 评测样本):\(P_{\text{inv}}\) 为非法放置比例,VQAScore/PE/SigLIP 2 为图文相似度。相比 BrickGPT 的图文相似度有数量级提升,但模型规模与感知质量的关系并不单调。
| 模型 | \(P_{\text{inv}}\)↓ | VQAScore↑ | PE↑ | SigLIP 2↑ |
|---|---|---|---|---|
| BrickGPT | 0.063 | 0.050 | 0.157 | 0.052 |
| 0.6b | 0.256 | 0.557 | 0.279 | 0.603 |
| 1.7b | 0.260 | 0.593 | 0.282 | 0.631 |
| 4b | 0.239 | 0.615 | 0.283 | 0.639 |
| 8b | 0.233 | 0.608 | 0.284 | 0.647 |
| 14b | 0.231 | 0.602 | 0.283 | 0.625 |
消融实验¶
训练阶段消融(Tab.4a,困惑度,越低越好):PT→SFT 两阶段始终优于"无 PT 直接 SFT",证明无条件预训练学到的先验可迁移。
| 模型 | PT (无条件) | PT + SFT (条件) | No-PT + SFT |
|---|---|---|---|
| 0.6b | 1.331 | 1.298 | 1.343 |
| 4b | 1.307 | 1.274 | 1.311 |
| 14b | 1.300 | 1.266 | 1.298 |
数据量消融(Tab.4b,14b,困惑度):PT 与 SFT 数据越多越好,呈一致单调趋势。
| PT\SFT | Full | Half | Quarter | None |
|---|---|---|---|---|
| Full | 1.266 | 1.279 | 1.288 | 1.300 |
| Half | 1.273 | 1.284 | 1.296 | 1.318 |
| Quarter | 1.276 | 1.292 | 1.305 | 1.361 |
关键发现¶
- 图参数化是胜负手:在连通有效性上 Graph (94+ 步) 几乎是 Pose (< 50 步) 的两倍,且 Pose 的有效性随步数陡峭衰减(Fig.7),而 Graph 不出现这种悬崖——因为连通性被直接写进表示。
- 碰撞仍是瓶颈:一旦把无碰撞也算进有效性,两种表示都只到约 20 步,说明长序列避碰是公认未解难题。
- 规模收益递减且不单调:0.6b 始终最差,但更大模型对有效性的提升边际递减;文本条件下感知质量甚至非单调(1.7b 在某指标上超过 14b)。作者据此推测瓶颈不在模型容量,而可能是训练目标(被正确最小化的 next-token)与采样任务之间的错配——困惑度随规模/数据单调下降,但感知质量没跟上。
- 采样策略至关重要:全温度祖先采样几乎必崩,核采样让平均连通有效性翻倍,是让这套方法可用的关键工程点。
亮点与洞察¶
- "让连接性成为一等公民"是核心洞察:把绝对坐标回归换成离散连接选择,把"长程数值精度"难题转成"离散组合"难题——这是整篇论文最让人"啊哈"的地方,也是 Graph 对 Pose 碾压的根因。
- 生成树序列化既紧凑又可执行:每条边自带完整局部 \(SE(3)\),所以一棵生成树就能无损还原任意结构,且天然可被 LLM 当作 token 序列吃下,把 3D 装配问题优雅地转成语言建模问题。
- 把工程细节(水密化 + PFPOffset 内缩 0.25 LDU)讲透:积木碰撞的非凸 + 非水密特性让常规碰撞检测失效,作者老老实实给出补救管线,这类"脏活"经验对做物理可行性约束的生成任务很可复用。
- 训练-采样目标错配的诚实诊断:用困惑度单调 vs 感知质量非单调的对照,指出"正确最小化的损失"未必对齐"采样任务",这个观察对所有"自回归生成 + 感知评测"的工作都有启发。
局限与展望¶
- 作者承认:模型难以在不引入部件间碰撞的情况下生成长序列(无碰撞有效步数仅约 20);表示要求模型预先知道部件连接器位置,闭集词表里能靠预训练学到,但换新领域/新部件的泛化是硬伤;为控制算力,搭建序列被限制在 100 块,而真实套装无此上限。
- SFT 评测被刻意做得简单(聚焦数据与表示),作者自承用更强 post-training 技术很可能大幅提升。
- 自己发现的局限:文本条件下规模与感知质量非单调,说明现有评测/目标可能还抓不住"搭得像不像"的关键;困惑度本身是参数化相关的,无法直接用来比较 Pose 与 Graph 两种表示的优劣,跨表示比较需谨慎。⚠️ 部分指标解读以原文为准。
- 改进思路:作者建议引入推理时(inference-time)解码引导来主动避碰、提升模型本身的空间理解;探索给定部件集合或额外约束下的生成;以及把学到的先验迁移到重建、编辑等下游任务。
相关工作与启发¶
- vs BrickGPT: 同样把砖块放置序列化成文本微调 LLM,但 BrickGPT 预测体素坐标、限制在 8 种砖与 \(20^3\) 网格;本文用图支撑参数化 + 上千种真实部件,图文相似度有数量级提升、有效序列长得多。
- vs Peysakhov & Regli / Thompson et al.: 前者也用图参数化但只建模矩形块的卡扣连接、且用遗传算法演化而非学习组合;后者用图自回归 GNN 但限制在单一砖型、网格对齐位置。本文把连接器扩展到 5 大类型化家族、覆盖任意连接性。
- vs Walsman et al. (LDCad snap 系统): 同样用更广部件集且非生成任务,靠视觉选点定位连接位置,但连接器覆盖不全;本文针对生成、且给出系统化的类型化连接器标注。
- vs ShapeAssembly / StructureNet / CSGNet (程序合成 3D): 都用可执行程序/图建模 3D 结构,本文把积木结构序列化为"类型化连接图上的生成树",每条边是可实现局部 \(SE(3)\) 变换的指令,是这条思路在 LEGO 顺序装配上的具体实例。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ "连接性为一等公民 + 生成树序列化"把 3D 精度难题转成离散组合,思路干净且首次覆盖任意连接性
- 实验充分度: ⭐⭐⭐⭐ 覆盖 5 个模型规模 × 无条件/文本条件 × 训练阶段与数据量消融,但避碰长序列与下游任务尚未充分验证
- 写作质量: ⭐⭐⭐⭐ 动机推导清晰、工程细节诚实,连接器语义与图参数化讲得透
- 价值: ⭐⭐⭐⭐⭐ 公开 32 万样本数据集 + 标注 + 模型,为生成式积木装配/部件级 3D 生成奠定数据与表示基础