CAD-Llama: Leveraging Large Language Models for Computer-Aided Design Parametric 3D Model Generation¶
会议: CVPR 2025
arXiv: 2505.04481
代码: 无
领域: 对齐RLHF / CAD生成
关键词: 参数化CAD生成, 大语言模型, 结构化CAD代码, 层次化标注, 指令微调
一句话总结¶
本文提出 CAD-Llama 框架,通过层次化标注管线将 3D CAD 模型转化为富含语义描述的 Python 风格代码(SPCC),再用自适应预训练和指令微调将 LLaMA3-8B 转化为参数化 CAD 模型生成器,在 text-to-CAD 任务上精度超出先前方法约 14%,并支持补全、添加、删除等多种 CAD 编辑任务。
研究背景与动机¶
领域现状:计算机辅助设计(CAD)生成建模是研究和工业界的热门方向。近年来大语言模型(LLM)在文本生成、代码生成等任务上展现了强大的泛化能力,自然引发了将 LLM 用于参数化 CAD 序列生成的探索兴趣。
现有痛点:现有方法面临多重挑战。首先,参数化 CAD 序列与 LLM 预训练中的自然语言/代码存在巨大鸿沟——LLM 在预训练阶段从未接触过 CAD 参数序列,也缺乏对 3D 结构的直接感知。其次,之前尝试用 LLM 生成 CAD 的工作(如 CAD-LLM、LLM4CAD)大多只能处理简单模型,泛化能力弱,无法根据复杂文本指令生成精确的 CAD 模型。第三,基于 encoder-decoder 的方法(如 Text2CAD、CAD-Translator)受限于有限的模型容量,在分布外样本上泛化性不佳。
核心矛盾:LLM 强大的生成先验与 CAD 数据的专业性之间存在语义鸿沟——CAD 参数序列本身缺乏设计意图和几何形状的文本描述,LLM 无法理解那些纯数字化的操作序列的含义。
本文目标 1)如何让 LLM 理解和生成参数化 CAD 操作序列?2)如何构建连接自然语言与 CAD 数据的桥梁?3)如何支持从文本生成到编辑的多种 CAD 下游任务?
切入角度:作者洞察到 LLM 特别擅长代码生成,而代码之所以被 LLM 理解得好,是因为代码通常伴随丰富的注释和功能描述。因此,关键在于为 CAD 数据添加结构化的语义标注,将其转化为"带注释的代码"形式。通过 VLM(如 GPT-4o)对 CAD 模型的 3D 渲染图和 2D 草图进行层次化描述,生成详尽的文本注释。
核心 idea:将 CAD 参数序列转化为附带层次化语义描述的 Python 风格代码(SPCC),然后通过自适应预训练和指令微调让 LLM 掌握 CAD 生成和编辑能力。
方法详解¶
整体框架¶
CAD-Llama 框架分为两大部分:(1)SPCC 数据合成——通过层次化标注管线将 CAD 序列转化为 SPCC 表示;(2)模型训练——先在 SPCC 语料上进行自适应预训练,再在多任务指令数据上进行指令微调。最终得到的模型 CAD-Llama-INS 支持 text-to-CAD、补全、caption、添加、删除等多种任务。
关键设计¶
-
层次化标注管线(Hierarchical Annotation Pipeline):
- 功能:为 CAD 模型生成多层次、结构化的文本描述
- 核心思路:分两阶段进行。第一阶段——组件描述:对 CAD 模型的每个组件分别渲染 3D 投影图和 2D 草图,输入 VLM(GPT-4o)生成该组件的详细几何描述(形状、尺寸、拉伸方向等)。第二阶段——全局描述:渲染各组件的轮廓图(目标组件高亮、其他组件半透明),连同第一阶段的组件描述一起输入 GPT-4o,生成两部分全局描述:(a)抽象概述 \(\mathcal{A}\)(一句话说明模型是什么),(b)详细描述 \(\mathcal{T}\)(组件间的空间关系和装配过程),以及每个组件的简短命名 \(\mathcal{S}\)(链接全局和局部描述)。为提升输出稳定性,按 CAD 复杂度分 5 级,每级提供 50 个高质量示例,使用 two-shot 提示
- 设计动机:单次 VLM 调用无法同时捕获细粒度几何属性和组件间的组合关系。分层标注使每层聚焦不同粒度的信息,确保描述的全面性和准确性
-
结构化参数 CAD 代码(SPCC):
- 功能:创建 LLM 友好的 CAD 数据表示
- 核心思路:受 LLM 代码生成能力的启发,将 CAD 参数序列转为 Python 风格代码。每个草图表示为循环列表(如
sketch_i.append(loop1)),循环中调用Line、Arc、Circle等方法绘制。拉伸操作引用对应草图完成。坐标使用 8 位量化参数(起点重定到 (0,0)),角度使用 0-360 的离散值。然后将层次化描述嵌入代码中:组件描述作为代码注释附在对应组件代码前,全局描述作为整体前缀。最终的 SPCC 语料包含详细描述版(\(\tilde{\mathcal{D}}\))和仅含抽象描述版(\(\dot{\mathcal{D}}\)),使 LLM 能处理不同详细程度的输入 - 设计动机:代码格式利用了 LLM 在代码数据上的已有能力;层次化描述弥补了 CAD 序列缺乏语义标注的核心缺陷
-
自适应预训练和指令微调:
- 功能:将通用 LLM 转化为 CAD 领域专家
- 核心思路:预训练阶段:在 SPCC 语料上用标准自回归语言建模目标进行全参数微调。创新点在于将相似 CAD 模型分组到同一上下文中——使用 CLIP 编码 CAD 渲染图、按余弦相似度构建文档图、通过遍历图构建训练上下文。这使 LLM 能在上下文中对比相似模型的差异,更高效地学习。上下文窗口 2048,得到 CAD-Llama。指令微调阶段:构建包含 6 种 CAD 任务的指令数据集(text-to-CAD、caption、补全、添加、删除及其 SPCC 增强版),每个任务 12K 条数据,共 48K 条。使用 LoRA(rank=256, α=128)进行参数高效微调,上下文窗口 4096,得到 CAD-Llama-INS
- 设计动机:相似模型分组受启发于课程学习,让模型先看到相似的样本来学习细粒度差异。指令微调的多任务设计使模型能统一处理 CAD 相关的多种下游任务
损失函数 / 训练策略¶
预训练阶段使用标准的 next-token prediction 损失:\(\mathcal{L}(\mathcal{X}) = \sum_{i=1}^{n} \log P(x_i | x_{i-1}, ..., x_0; \Phi)\),对所有 token 计算。指令微调阶段同样使用 next-token prediction 但只对输出部分计算损失:\(\mathcal{L}(D) = \sum_{i=1}^{N} \log P(Y_i | X_i; \Theta)\)。基座模型为 LLaMA3-8B-HF,优化器为 AdamW(lr=2e-5),使用 DeepSpeed 和 FlashAttention 加速训练。
实验关键数据¶
无条件生成¶
| 方法 | COV ↑ | MMD ↓ | JSD ↓ | SR ↑ | Novel ↑ |
|---|---|---|---|---|---|
| DeepCAD | 66.68 | 1.19 | 2.59 | 61.84 | 91.7 |
| SkexGen | 77.42 | 1.07 | 0.93 | 72.26 | 99.1 |
| HNC-CAD | 80.46 | 0.98 | 0.74 | 79.11 | 93.9 |
| CAD-Llama | 79.93 | 0.96 | 0.66 | 99.90 | 97.1 |
Text-to-CAD¶
| 方法 | ACC_T ↑ | MCD ↓ | MMD ↓ | JSD ↓ |
|---|---|---|---|---|
| GPT-4 | 20.03 | 25.62 | 3.33 | 18.09 |
| LLaMA3 | 17.26 | 17.33 | 4.10 | 12.36 |
| Text2CAD | 69.91 | 20.64 | 3.02 | 9.98 |
| CAD-Translator | 70.36 | 21.29 | 2.94 | 10.92 |
| CAD-Llama-INS | 84.72 | 10.53 | 1.54 | 3.59 |
消融实验(CAD 表示方式)¶
| 表示方式 | ACC_cmd ↑ | ACC_param ↑ | SR ↑ |
|---|---|---|---|
| SDCS (单描述+序列) | 39.17 | 25.56 | 18.14 |
| SDCC (单描述+代码) | 42.62 | 27.13 | 21.46 |
| SPCS (层次描述+序列) | 73.13 | 47.32 | 98.71 |
| SPCC (层次描述+代码) | 80.41 | 59.09 | 99.30 |
关键发现¶
- CAD-Llama-INS 在 text-to-CAD 上精度(ACC_T=84.72)超出先前最佳 CAD-Translator 约 14 个百分点
- 层次化描述是性能提升的最大贡献者——SPCC vs SDCC 的 ACC_cmd 差距达 38 个百分点
- 代码格式也有贡献,但次于层次描述——SPCC vs SPCS 的 ACC_cmd 差距约 7 个百分点
- 无条件生成的 SR 达到 99.90%,远高于所有基线,说明生成稳定性极高
- 在 CAD 编辑任务中,使用 SPCC 格式(deletion / addition)显著优于纯 CAD 代码格式,GPT-4 在 deletion* 上的 EM 也从 66.20 提升到 90.41,证明 SPCC 的结构化信息对所有 LLM 都有帮助
亮点与洞察¶
- 将 CAD 类比为"带注释的代码"是核心洞察:利用 LLM 已有的代码生成能力,通过添加语义标注来桥接 CAD 与自然语言的鸿沟
- 层次化标注管线设计精巧:从组件到整体的两阶段标注、复杂度分级的 few-shot 策略,确保了 VLM 输出的质量和一致性
- 99.90% 的生成成功率令人印象深刻:说明 SPCC 格式确实让 LLM "理解"了 CAD 模型的结构约束
- 多任务指令微调的实用性:一个模型同时支持生成、补全、编辑、描述等多种操作,符合实际 CAD 工作流程
局限与展望¶
- 基于 DeepCAD 数据集(178K 模型),规模和复杂度有限——主要是机械零件,缺乏建筑、有机形状等更复杂的 CAD 类型
- 标注管线依赖 GPT-4o,成本较高且存在幻觉风险
- 8 位量化的坐标精度(256 级)可能不满足工业级 CAD 的精度要求
- 仅使用 2D 渲染图进行标注,3D 信息的保留可能不够完整
- 与多模态输入(点云、图像 → CAD)的方法未做对比
- 未做人类评估,模型生成的 CAD 在实际设计可用性方面缺乏定性验证
相关工作与启发¶
- DeepCAD (Wu et al., 2021):参数化 CAD 生成的基础工作,使用 Transformer 自回归生成 CAD 序列
- Text2CAD / CAD-Translator:基于 encoder-decoder 的文本到 CAD 方法,但泛化能力受限
- OpenECAD:使用 VLM 配合 PythonOCC CAD 内核进行 CAD 生成
- CAD-GPT / CAD-MLLM:使用多模态 LLM 生成 CAD 序列,支持图像/点云等多种输入
- 本文的 SPCC 思路可推广到其他专业领域——为专业数据添加层次化语义描述,将其转化为 LLM 友好的格式,是释放 LLM 领域能力的通用策略
评分¶
- 新颖性: ⭐⭐⭐⭐
- 实验充分度: ⭐⭐⭐⭐⭐
- 实用性: ⭐⭐⭐⭐