想象你拿到一个3D扫描出来的零件模型,老板说:把它变成可以在CAD软件里打开、能随意修改尺寸的工程图纸。
这件事现在大部分靠人工。一个熟练的CAD工程师可能要花几个小时,对着扫描点云一点点猜测这个零件当初是怎么画出来的:先挖了一个圆孔,还是先切了一刀再倒角?这个过程业内叫"逆向工程",枯燥又耗时。
AI能不能替你干这活?过去两年确实有不少团队在尝试,但结果普遍不太理想。问题不是AI不会画图,而是AI的画图方式有一个根本缺陷:它只会"一口气画完",画错了也不回头看。
一口气生成的代价
目前主流的方法,比如CAD-Recode、Cadrille,工作流程大致是这样的:把目标点云扔给一个大语言模型,模型像背课文一样,把整段构造代码一次性吐出来。从第一行到最后一行,中间不执行、不检查、不回头。
这就好比让一个人闭着眼睛写一篇作文,中途不能停下来读一读自己写的东西对不对题,只能写到最后一个字才睁眼看结果。如果开头第三句就偏题了,后面所有内容都会在错误的方向上越走越远,而写作者自己完全不知情。
反映在数据上相当残酷。论文里提到,在ABC Hard这个高难度基准测试集上,几个主流方法(CAD-Recode、Cadrille、CADEvolve)的IoU(交并比,衡量生成形状和目标形状重叠程度的指标,1代表完全重合)只有0.31到0.39之间。这意味着,生成的模型和真实目标的体积重叠不到四成,剩下六成要么是多出来的,要么是缺失的。
这还不是最糟的。这些方法几乎清一色依赖"草图+拉伸"(sketch-extrude,先画一个2D轮廓,再把它拉伸成3D实体,是最基础也最单一的建模方式)这一种操作方式。现实中的零件往往需要旋转、放样、扫描这类更复杂的造型手法才能准确还原,这些方法学不会,也就只能用拉伸硬凑,凑出来的形状自然和真实零件差距很大。
研究者面对的困境很清楚:模型要么一次性生成、速度快但容易整体跑偏,要么靠人工反复修改、精度高但没法规模化。有没有办法让AI像人类工程师那样,边建边看边调?
StepCAD团队给出的答案是:把生成拆成两步,先让模型一步步地"摸着石头过河"地建模,再用一套专门的搜索算法去修正细节误差。
状态条件策略:让AI边画边看
StepCAD的第一个核心设计,叫状态条件策略(State-Conditioned Policy),指的是模型在生成下一步操作时,不仅要看目标形状长什么样,还要看自己已经画出来的中间结果长什么样。
具体流程是这样的:模型先生成一个操作(比如"挖一个圆孔"),然后这段CadQuery代码(CadQuery是一种用Python描述CAD建模步骤的编程库,相当于给计算机下达"画图指令"的语言)会被真的执行一遍,生成实际的三维几何体。接着系统会从这个几何体上采样出一个新的点云,重新喂给模型,告诉它:"这是你现在画出来的东西,接下来该怎么办?"
这就像学徒跟着师傅学木工。闭眼睛按图纸死记硬背下来的做法,每一步都不知道自己做得对不对,等木料全部切完才能发现这块板子长短不对。而真正的师傅教徒弟,是让他每锯一刀就停下来比一比,对照着成品看一眼进度,再决定下一刀往哪儿下。少了这一步回看,错误会在十几道工序里越滚越大,最后拆了重做。
目标几何和中间几何的编码,用的是同一个模块,叫Point-MAE编码器(一种点云自监督学习模型,通过遮盖部分点云再重建的方式学习三维形状的表示)。语言模型骨干选用的是Qwen2.5-Coder-1.5B(阿里云开源的代码生成大语言模型,1.5B代表15亿参数规模),这个规模经过实验验证是性价比最优的——论文附录里对比了0.5B、1.5B、3B三种规模,3B的提升幅度微乎其微,不值得多花那份算力。
仅靠这个状态条件策略(论文里简称Π-StepCAD),不加后续优化,就已经在ABC Hard上把IoU从0.31-0.39提升到0.52,相对提升接近四成。这说明光是"让模型看见自己画了什么"这一件事,就已经带来了实质性改善。
几何感知树搜索:生成之后的精修
但光靠策略生成,离完美还有距离。论文给出的数字是,策略单独生成后IoU大约0.68,加上第二阶段的搜索优化后能冲到0.82,这中间0.14的差距,靠的是StepCAD的第二个核心模块:几何感知程序优化(Geometry-Aware Program Optimization)。
这个模块的思路是,把生成好的CAD程序当作一个可以修改的"草稿",对草稿逐步做局部编辑,每改一次就执行一次、算一次IoU,看是改好了还是改坏了。整个过程用的是束搜索(Beam Search,一种启发式搜索算法,每一步只保留若干个最优候选,避免穷举所有可能性导致的组合爆炸)框架,束宽(Beam Width,每一步保留的候选数量)设为2,每一步会尝试4种局部编辑手法,从中挑出表现最好的两个继续往下走。
这套局部编辑一共有四种武器。
第一种叫连续参数优化,专门调整拉伸深度、圆角半径、草图尺寸这类数值型参数。方法是贝叶斯优化(Bayesian Optimization,一种利用概率模型高效搜索最优参数的算法,常用于参数空间大、每次评估代价高的场景),先随机采样6个点,再做10轮迭代,每轮尝试4个候选值。这就像你在拧一个水龙头找合适水温,不是瞎拧,而是每次调一点,根据上一次冷热的反馈决定下一次往哪边调,比盲目试错要高效得多。
第二种叫草图替换,直接从目标网格上截取真实的轮廓曲线,替换掉模型生成的草图。做法是用一个平面去切目标网格,提取出截面轮廓,再拟合成圆、直线、圆弧的组合。这相当于与其让学徒凭记忆临摹一张图纸,不如直接把原始图纸的那一页撕下来用,准确度自然高得多。如果不做这一步,模型靠"脑补"画出来的草图往往和真实轮廓有微妙偏差,这种偏差会在后续拉伸、切割等操作里被不断放大。
第三种叫补集切除,用来处理"多画了"的部分。系统计算生成几何体和目标几何体的差集(也就是多出来的那块区域),把这块区域拟合成一个切除操作补进程序里。论文里给出的消融实验显示,这一招单独贡献了IoU提升的30.3%,是四种编辑里收益第二高的。
第四种叫操作跳过,专治"画蛇添足"。如果删掉某个操作反而让IoU变高,说明这个操作本身是多余甚至是有害的,直接从程序里剔除。这种情况在倒角、圆角这类装饰性操作上尤其常见,模型有时会加一个参数不对的圆角,删掉比留着强。
论文的消融表格显示,四种编辑里贡献最大的是草图替换,占总提升的41.5%,其次是补集切除占30.3%,连续参数优化占16.2%,操作跳过占12%。这个排序其实很直观:形状的大轮廓错了,参数调得再细也没用,先把轮廓对上,才有继续精修的意义。
整个搜索过程平均耗时大约一分钟一个样本,听起来不算快,但相比人工逆向建模动辄几小时的工作量,这个代价完全可以接受。
ARCADE-1.5M:喂饱模型的训练燃料
一个模型想学会"边画边看边改",前提是得有数据教它怎么分步骤构造复杂形状。但现有的CAD数据集几乎都有一个共同短板:操作种类太单一。
论文里做了一张对比表格,数据相当扎实。DeepCAD、Fusion 360这些经典数据集,100%的程序只用拉伸操作,旋转、放样、扫描的覆盖率全是0。就连比较新的CADEvolve数据集,旋转操作的覆盖率也只有4.8%,扫描操作更是5.75%。
这就是说,这些数据集教给模型的,基本等同于"只会用乐高积木里的长方体",而现实零件里经常出现的圆柱体、曲面过渡、螺旋结构,模型压根没见过几个真实例子,自然学不会怎么用。
StepCAD团队因此自己动手造了一个新数据集,叫ARCADE-1.5M(Artificial Repository of CAD Examples,人工CAD样例库,包含150万条可执行CAD程序)。这个数据集的核心亮点有三块。
第一是操作多样性大幅提升。拉伸覆盖率95.42%,但同时旋转达到12.13%,扫描25.37%,放样13.10%,圆角34.77%,倒角33.66%。横向对比,扫描操作的覆盖率是CADEvolve的4倍还多。
第二是构造序列够长。平均每个程序包含40.3个计数操作(算上草图图元、布尔组合在内的细粒度步骤),最长的序列超过150步。对应到实际的实体建模操作上,平均是8.5个。这个密度远超DeepCAD的15步、Fusion 360的18步。
第三,也是最关键的一点,是提供了密集的中间状态监督。每执行完一次实体操作,系统就记录一次当时的几何快照,总共积累了1250万个构造状态转移对。这些中间快照正是训练StepCAD状态条件策略的核心养料,没有这些快照,模型压根学不会"看中间结果决定下一步"这件事。
数据的生成过程本身也挺有意思,用的是一套叫"策略库"的系统,里面预设了94种启发式生成策略,模拟真实工程师的建模习惯,比如先打孔再倒角、先做基座再加凸台这类常见套路,而不是完全随机拼接操作,这样生成出来的构造序列才有工程上的合理性。每个生成的模型还要经过双重验证:内存中的实体必须有效,导出成Python脚本后重新执行一遍,结果还得一致,这才算合格入库。
结果拿出来放在五大基准测试上
团队在一个叫CADBench的综合评测集上测试了StepCAD,这个评测集整合了DeepCAD、Fusion 360、ABC、MCB、Objaverse五个来源,覆盖从简单机械件到复杂有机形状的各种场景,算是目前比较全面的评测标准。
结果汇总如下:
| 数据集 | 最强基线IoU | StepCAD IoU | 相对提升 |
|---|---|---|---|
| ABC Hard | 0.39 | **0.73** | 87.2% |
| ABC Medium | 0.43 | **0.74** | 72.1% |
| Organic(有机形状) | 0.42 | **0.71** | 69.0% |
| Mechanical(机械件) | 0.67 | **0.89** | 32.8% |
| DeepCAD | 0.86 | **0.89** | 3.5% |
有一个规律特别值得注意:形状越复杂,StepCAD的优势越明显。在相对简单的DeepCAD数据集上,提升只有3.5个百分点;但在最难的ABC Hard数据集上,提升接近90%。这背后的逻辑其实很好理解,简单形状几步拉伸就能搞定,模型闭着眼睛画也不太会出大错;但复杂形状需要十几步甚至几十步连续正确的判断,任何一步走偏都会在后续步骤里被放大,这正是StepCAD的"边画边看"机制能发挥最大价值的地方。
有效性可以精确到每一个零件
除了IoU这种整体重叠度指标,团队还做了更细粒度的验证。
高精度重建比例上,StepCAD做到IoU≥0.95的样本占39.9%,IoU≥0.99的占15.3%,相比最强基线CADReasoner的27.2%和7.4%,几乎翻了一倍。
实体级别的几何准确率上(顶点、边、面的精确匹配情况),StepCAD达到顶点20.8、边12.6、面8.1,相比CADEvolve的15.7、9.7、6.4都有明显提升。
还有一个挺有说服力的迁移实验:团队把StepCAD的搜索模块直接套用在CAD-Recode生成的程序上,不重新训练任何东西,仅仅做后处理优化,平均IoU就从0.597提升到0.745。这说明这套搜索逻辑不是和特定模型绑死的专属补丁,而是一种通用的程序精修手段,谁生成的程序都能拿来改善。
一对多的构造逻辑
一个挺有意思的附加发现是,同一个目标形状,StepCAD有时会生成完全不同的构造路径,但得到几乎相同的最终几何体。论文里举了个例子:同一个零件,模型既可能用"放样+壳体+倒角"的组合来构造,也可能用"旋转+壳体+倒角",两条路径殊途同归。
这说明模型学到的不是死记硬背某一种固定套路,而是真正理解了"有多种合理的方式能造出这个形状",这和真实的CAD工程师群体现象其实一致,十个工程师画同一个零件,往往会画出十种不同但都正确的构造历史。
局限和诚实的边界
团队没有回避这套方法的短板。
搜索阶段每个样本大概耗时一分钟,而且局部编辑的参数搜索范围是有界的,如果最优解恰好在搜索边界之外,系统就找不到。策略生成阶段设了一个12步的动作上限(注意这不等于12个底层操作,因为一个动作可能打包多个操作),这意味着特别复杂、需要超出这个预算的形状,重建会受限。
另外一点特别坦诚的地方是,论文明确指出IoU和倒角距离这类几何指标,衡量的是形状匹配程度,不代表恢复了原始设计者的真实意图、约束关系或者参数语义。打个比方,如果原始零件上有一个半径5毫米的工艺圆角,模型错误地去掉了它反而让IoU变高,系统也会接受这个"改进",但这其实偏离了设计初衷。这提醒我们,几何重建的成功和设计还原的成功是两回事,不能简单画等号。
写在后面
读完这篇论文,最触动我的不是IoU数字涨了多少,而是它把一个看起来应该一次性解决的问题,拆成了"生成"和"修正"两个独立阶段来处理。
这种拆分思路其实在很多领域都见过影子。写代码的人知道,先写一个能跑的版本,再去重构优化,往往比试图一次写出完美代码更现实。这篇论文等于是把这个经验移植到了AI生成CAD程序这件事上,而且给出了量化证据:仅靠生成策略提升约40%,加上搜索优化再提升约20%,两者缺一不可。
还有一个细节值得单独说一说。团队发现,四种局部编辑手法里,贡献最大的不是花哨的贝叶斯参数优化,而是朴素的"把草图直接从真实网格上抠出来替换掉"。这给人一个提醒:很多时候,复杂的优化算法未必比"直接从真实数据里取答案"这种笨办法更有效,尤其是当你能拿到目标本身的时候。
这篇论文还留了一个没完全回答的问题,一个形状对应多种有效的构造历史,那到底哪种历史才是"对"的?如果未来要评估一个AI生成的CAD程序是否真正"懂"了设计意图,而不只是碰巧拼出了相似的形状,这个判断标准该怎么建立,可能是下一个需要啃的硬骨头。
Q&A
Q1:StepCAD是什么?
A:StepCAD是MIT团队提出的一种将3D网格转换为可编辑CAD程序的AI方法,核心是先用状态条件策略边生成边观察中间结果,再用几何感知树搜索对生成的程序做局部精修,在多个基准测试上比现有方法最高提升87.2%的IoU。
Q2:ARCADE-1.5M数据集和之前的CAD数据集有什么不同?
A:ARCADE-1.5M包含150万条可执行CAD程序,覆盖拉伸、旋转、放样、扫描等多种操作类型,而不像DeepCAD等旧数据集几乎100%只用拉伸操作,同时提供1250万个中间构造状态,专门用于训练模型学会分步骤建模。
Q3:StepCAD为什么在复杂形状上提升特别明显?
A:复杂形状需要连续多步正确判断,一步出错会在后续步骤被不断放大,而StepCAD的边生成边看机制加上后续的几何感知搜索能及时纠正中间错误,所以在ABC Hard这类高难度数据集上相对提升达到87.2%,远高于简单数据集上的提升幅度。







