微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 CADFather:一个会自己拿主意的CAD逆向工程助手

CADFather:一个会自己拿主意的CAD逆向工程助手

2026-11-05 19:55
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-11-05 19:55 • 科技行者

你有没有想过,一个扫描出来的3D模型,或者一个只有网格数据、没有任何设计记录的老零件,要怎么变回可以编辑的工程图纸?

这听起来像是个无关紧要的小问题,但在制造业和工业设计里,这是一个每天都在发生的真实麻烦。你拿到一个零件的3D扫描,想改一下某个孔的直径,或者调整一下壁厚,却发现自己手里只有一堆三角面片,没有任何参数、没有任何建模历史。你知道这个零件是什么样子,但你不知道它是怎么"做出来"的。

这个问题在学术圈有个专门的名字,叫CAD逆向工程。简单说,就是给你一个3D网格模型,让你反推出一套可执行的CAD建模程序,这套程序执行完之后能长出跟原模型一样的形状,而且每一步操作、每一个参数都是透明可编辑的。

过去几年,研究者们试过不少办法来解决这件事,但读完这篇论文你会发现一个挺有意思的事实:没有一种方法是全能的。有的方法擅长快速生成一整套程序,但容易漏掉细节特征;有的方法擅长逐步修正,但在面对复杂机械零件时经常卡壳;还有的方法靠纯几何算法硬算,精度不错,但也经常算出一个"开着口子"的壳子而不是实心体。这篇论文的作者们没有选择再造一个"更强"的单一模型,而是琢磨出了一个完全不同的思路:让一个AI助手自己去协调、调度这些已有的工具,像一个项目经理一样,根据现场情况随时决定下一步该找谁来干活。

这个系统叫CADFather。

当单打独斗不够用的时候

在CADFather出现之前,CAD逆向重建大致分成两条路子。

一条路子是靠训练好的语言模型或视觉语言模型直接"猜"出CAD代码,这类工作里有CAD-Recode、cadrille、CADEvolve这些,它们都是一次性生成完整程序。另一条路子是迭代式的,比如CADReasoner会反复修改一整套程序,CADENA则是一步一步地往程序里加操作,每加一步就渲染出来看看效果再决定下一步。还有一条相对小众但很扎实的路线叫CADFit,它完全不依赖学习模型,靠几何拟合和优化搜索来一步步逼近目标形状。

这几条路子各有各的强项,但问题在于,它们都是"单一工具打天下"。

学习模型生成的操作可能漏掉一个细节特征,或者参数估得不准;纯算法构造的操作精度不错,但表达能力有限,碰到形状复杂的零件会束手无策;数值优化能微调参数,但没法凑出一个全新的操作序列。你会发现,这三种能力其实是互补的,但没有哪个工具能同时具备这三种能力。

CADFather的作者们想明白了一件事:既然每个工具都有自己的"舒适区",那不如养一个会判断局势的助手,让它根据当前重建到哪一步、形状差了什么、还剩多少预算,自己决定该召唤哪个工具来干活。

这就像一个装修项目的总包。

水电工擅长布线,瓦工擅长贴砖,木工擅长做柜子,但没有一个工人能同时精通这三件事。如果你把所有活儂指派给同一个水电工去干,他贴砖的手艺肯定不如专业瓦工,结果就是房子整体质量打折扣。真正高效的做法是,找一个懂行的总包,他不需要自己会贴砖砌墙,但他知道现在这个阶段该叫谁来、要干多久、干完了要不要验收。如果没有这个总包角色,每个工人各自为战,互相不知道对方干到哪一步了,最后拼出来的房子很可能某个房间漏了插座,某个墙角瓦片没对齐。

CADFather里的这个"总包",就是一个视觉语言模型扮演的助手。

助手怎么看、怎么决定

这个助手每一步要看什么、决定什么,是整篇论文设计的核心。

每一轮决策,助手会收到四类信息。第一类是固定不变的规则说明,也就是任务目标、工具清单和回答格式,这部分每一步都一样,相当于给助手定了行为准则。第二类是到目前为止所有历史步骤的简要记录,记录的是实际执行过的动作,而不是助手当时想要做但预算不够没做成的动作。

第三类是渲染图像。

这里有个细节值得说一下:助手看到的不是候选池里所有的候选程序,而是目标形状的渲染图、当前最好的候选渲染图,以及上一步新产生的候选渲染图。

视觉语言模型*:一类同时能理解图像和文字的AI模型,能看懂渲染出来的3D形状长什么样,也能读懂文字描述的任务要求。

CadQuery*:一种用Python代码描述CAD建模操作的工具库,比如"画一个圆再拉伸成圆柱"这类操作都能用几行代码表达。

第四类信息是一张候选程序表,表里列出当前排名靠前的候选程序,每一行写明这个程序是用什么工具生成的、已经包含几个操作、综合得分是多少、还能继续用哪些工具处理它。

助手看完这些信息后,先用一句话写下这一步打算做什么,然后发出最多四条行动指令,每条指令指定一个候选程序、一个要调用的工具,如果是调用学习模型还要指定生成几个候选方案。它也可以选择结束整个零件的重建,理由只有两种:一种是"形状已经对了,剩下的只是数值上的小偏差",另一种是"卡住了,最近几步都没有进步,先交卷"。

这个设计有个很聪明的地方。它不是让AI每一步只能对一个候选程序做一个动作,而是允许它在一轮决策里同时操作好几个候选、调用好几种工具。这就像一个会下棋的人,不是只盯着一个棋子想下一步,而是能同时在棋盘上多条线同时布局,保留几条可能的路线,等看清局势再决定走哪条。

如果这套系统不允许保留多个候选分支,会发生什么?

论文里的消融实验给出了答案。有一类失败案例是"错误的初始拓扑结构",意思是如果第一步操作就选错了方向,比如把一个实心块错当成空心框架来重建,后面所有操作都是在错误的基础上修修补补,永远救不回来。保留多个候选分支的意义就在这里,万一某条分支走进死胡同,系统手里还有别的分支可以接着往下走,而不是把所有希望都押在一条路径上。

三个工具,各管一段

CADFather给助手配了三种工具,每种工具解决的问题不太一样。

第一种是学习模型生成,它用的是一个叫CADENA-RL的预训练模型,给定一个已有的程序片段,它会提议接下来可能要做的一个新操作,而且可以一次生成多个备选方案供助手挑选。这个工具的优势是见过大量真实CAD数据,比较"懂"常见的建模套路,但它偶尔会漏掉某个细节特征,或者给出的尺寸不够准。

第二种是算法化生成,这个工具完全不依赖学习模型,而是直接从目标网格的几何形状里硬算出可能的操作。

举个例子,它会用一系列平面去切目标形状,每切一刀就得到一个横截面,然后看这个横截面沿着哪个方向、延伸多远能跟目标表面贴合,由此反推出一个拉伸操作。如果已经有一个候选程序了,这个工具还能对比候选和目标之间差在哪里,哪里多了材料、哪里少了材料,分别生成"要切掉的"和"要加上的"操作提议。

这个工具最大的用处,是在学习模型生成的第一步操作总是产出一个"开着口子的壳子"而不是实心体的时候,给系统兜底。

这里要多说一句,为什么开口的壳子是个大问题。

CAD程序的后续操作,是建立在前一步结果是一个完整实心体的基础上进行加工的。如果第一刀下去,形状不是封闭的,那后面不管怎么加操作,这个分支就是废的,没法继续往下盖楼。算法化生成的拉伸操作,是直接从目标网格切出来的,天然就是封闭实心的,相当于给系统提供了一个靠得住的地基。

消融实验*:指去掉系统里某个组件后重新做实验,看少了这个组件之后整体表现下降多少,用来验证这个组件到底有没有用、有多重要。

实验数据证实了这一点。在MCB数据集上,一旦去掉算法化生成这个工具,整个系统的无效预测率,也就是最终没能生成一个可用实心体的比例,从0直接跳到了0.123,相当于每8个零件里就有1个彻底失败。而去掉数值优化工具带来的损失要小得多,综合得分只掉了0.006。这组数字清楚地说明了算法化生成工具不是锦上添花的配置,而是整个搜索能顺利推进下去的地基。

第三种工具是参数优化,它不新增任何操作,只是在已有程序的框架内微调数字,比如把某个草图的坐标、半径,或者拉伸的深度调得更准。

它的工作方式是把候选程序的几何形状和目标网格都转换成"有符号距离",也就是空间中每个点到物体表面的距离,物体内部记为负值。然后计算候选和目标在很多采样点上的距离差异,这个差异的均方值就是误差,再用数值方法估算每个参数该往哪个方向调一点,反复迭代,直到调不动为止。

这个工具就像给一件已经做好的衣服改尺寸。

版型(也就是操作结构)已经定了,但袖长可能长了两厘米、腰围松了一圈,裁缝不会把整件衣服拆了重做,只是在原有版型上微调尺寸。如果没有这个工具,系统就只能靠重新生成一整个新的操作序列来碰运气,撞上更合适的尺寸,效率会低很多。实验里,去掉这个工具之后,DeepCAD和Fusion360数据集上的得分依然掉了0.004到0.006,说明即便是看起来不起眼的微调,也在实实在在地往上拉分。

系统怎么知道哪个候选是真的好

光有多个工具还不够,系统还得有一套客观标准,来判断每个候选程序到底值不值得保留。

论文用了两个核心指标。第一个是IoU,交并比,衡量的是候选形状和目标形状在体积上重叠了多少。两个形状完全重合IoU就是1,完全不沾边就是0。第二个指标叫GMS,广义匹配分数,它看的不是体积重叠,而是两个表面及其法线方向吻合得怎么样,专门用来捕捉那些体积差不多但表面细节不对的情况。

IoU*:交并比,是衡量两个三维形状重叠程度的指标,数值越接近1说明两个形状越一致。

GMS*:广义匹配分数,衡量两个物体表面形态和法线方向的匹配程度,专门用来发现"体积像但细节不像"的问题。

为什么要同时用这两个指标,而不是只看IoU?

论文里有一个很直观的反例。在MCB数据集的一个零件上,系统重建出来的候选IoU高达0.909,看起来几乎完美,但GMS只有0.164,低得吓人。打开渲染图一看,原来目标零件表面有一圈滚花,也就是那种常见于螺母、把手上的防滑纹理,而重建结果把整体轮廓做对了,但滚花纹理完全没有做出来。体积算出来是对的,因为滚花本身占的体积很小,但表面结构完全不对。这就是为什么只看IoU会出现"看着分数很高,实际细节全丢了"的假象。

系统最终给每个候选打一个综合分,这个分数是IoU和GMS的平均值(如果目标形状不是单一的封闭实心体,就只用GMS)。整个重建过程中,系统会一直保留历史上出现过的最高分候选,哪怕助手当下正在尝试别的分支,这个"历史最佳"也不会被扔掉,最终输出的就是它。

这个设计思路很像写论文时的版本管理习惯。

你可能会先改一个大改动,发现效果没有预想中好,这时候如果没有保存之前的版本,你就只能凄凄惨惨地从头再改一次。而如果你有一个"自动保存历史最佳版本"的习惯,哪怕你现在在尝试一个风险更高的改动,手里始终握着一份保底的好结果。CADFather的"保留历史最佳"机制,本质上就是给整个探索过程上了一道保险,不管助手这一步的决策是不是明智,最终交出去的答案永远是过程中出现过的最优解,而不是停下来那一刻正好手里的那份。

跑分结果:全线超越,而且没有一个失败件

论文在DeepCAD、Fusion360和MCB三个完整测试集上做了对比,这三个数据集总共覆盖了近1.5万个零件。

| 数据集 | 方法 | 无效率 | 平均IoU | 平均GMS |

|---|---|---|---|---|

| DeepCAD | CADENA-RL(采样) | 0.0007 | 0.966 | 0.974 |

| DeepCAD | **CADFather** | **0.0000** | **0.987** | **0.983** |

| Fusion360 | CADENA-RL(采样) | 0.0023 | 0.952 | 0.942 |

| Fusion360 | **CADFather** | **0.0000** | **0.976** | **0.960** |

| MCB | CADENA-RL(采样) | 0.0006 | 0.895 | 0.751 |

| MCB | **CADFather** | **0.0000** | **0.913** | **0.766** |

这里最打眼的一行是无效率,CADFather在三个数据集上全是0,也就是说,没有一个零件最终输出的是一个破损、不封闭、算不出体积的失败结果。要知道,CADFather用的验证规则比CADENA自己的规则还要严格,这个零无效率的成绩是在更苛刻的标准下拿到的。

而且这个提升不是靠换了一个更强的生成模型取得的。CADFather调用的学习生成工具,用的还是那个一模一样的CADENA-RL模型,没有做任何额外训练。所有的提升都来自于"怎么协调调度"这件事本身。

在专门针对机械零件设计的CADENA-Bench基准上,CADFather的平均IoU达到0.909,GMS为0.721,相比当时报告最强的CADENA-RL贪心解码方法的0.876和0.670,有明显提升。这个基准里有六类零件家族,比如轴和衬套、齿轮和轴承、外壳和框架等,其中轴衬套和杠杆轮廓类零件重建效果最好,齿轮轴承和弹簧紧固件类是难度最大的两类。

论文还在两个更新的基准CADBench和BenchCAD上做了测试。在BenchCAD上,系统用自己评测流程得到的无效率是0,用BenchCAD官方评测代码算出来的体素IoU是0.968,这个成绩甚至超过了部分带工具调用能力的顶级商业大模型(比如某些版本的Claude和GPT系列,这些模型在图像加沙盒工具的配置下报告的体素IoU在0.834到0.963之间)。

更值得说的是成本对比。论文做了一张图,横轴是每个零件的估算API调用花费,纵轴是体素IoU。CADFather只用大约4步决策,花费0.016美元,就能达到0.943的IoU,用完整预算也只要0.046美元就能到0.968。而对比的商业大模型,花费从1.75美元到5.94美元才能达到接近的分数,差距是一到两个数量级。

这组数字让人想起一个常见的误区:很多人以为"更贵的模型一定更好用",但这篇论文说明,一个精心设计的协调系统,用相对小的模型加上合理的任务拆解,可以在成本上碾压那些堆算力硬刚的大模型方案。

哪个工具贡献最大,消融实验告诉你答案

论文做了三组对照实验,分别是只用学习模型生成(去掉算法化工具和参数优化)、去掉算法化生成工具、去掉参数优化工具,拿这三组和完整配置做对比。

结果非常一致:在MCB这种机械零件为主的数据集上,去掉算法化生成工具的损失最大,综合得分掉了0.110,无效率从0窜到0.124。去掉参数优化的损失要小得多,只掉0.006。在DeepCAD和Fusion360上,排序是一样的,但差距的绝对值小一些。

这说明了什么?

机械零件往往形状复杂、有很多孤立的突出结构(比如论文举例的链条环节,有两个柱子撑着两块板),学习模型第一次尝试生成操作时,很容易得到一个开口的、非封闭的结果,这时候算法化生成的硬算拉伸操作,就成了救命稻草,直接给出一个保底的、一定封闭的起点。而DeepCAD之类相对简单规整的零件(螺栓、垫片这类标准件居多),学习模型自己就能较顺利地生成合理的封闭体,所以算法化工具的边际价值就没那么夸张。

论文里专门展示了一个具体案例,是MCB里的一个链条环节零件。重建轨迹是这样的:第一步,算法化工具从空程序出发,直接拉伸出一个柱子(候选c5,IoU只有0.197);第二步,算法化工具针对c5的"缺失部分"又补了一块下板(候选c13,IoU提升到0.486);第三步,学习模型接着c13往上添加第二个柱子(候选c15,IoU跳到0.710);第四步,学习模型再补上第二块板(候选c20,IoU到0.957);再往后两步,提升已经很小了,助手判断"已经卡住",于是收尾。

这个过程完整展示了三种工具是怎么接力配合的。算法化生成负责搭骨架、补地基,学习模型负责填充那些符合常见设计规律的细节结构,参数优化负责最后的精修。谁也替代不了谁。

这套系统也有自己的软肋

论文很坦诚地指出了几类典型失败情况。

第一类是初始拓扑选错了方向,一旦第一步操作走错路,比如实心块被当成空心框架重建,后面的操作没法纠正这个根本性的错误,所有分支都会继承这个最初的失误。

第二类是前面提到的"体积对了,表面细节丢了"的情况,比如滚花纹理、浅凹槽这类细微特征,容易在体积匹配已经不错的时候被系统误判为"已经可以收尾了"。

第三类是资源耗尽导致的中断,比如一个螺旋弹簧零件,因为几何形状太复杂,在耗尽预设的墙钟时间之前都没能找到一个合适的起点,最后只能输出一个简化的圆管近似。

这些失败案例提醒我们一个朴素的道理:再聪明的调度系统,也调度不出工具本身没有的能力。参数优化改不了操作结构,算法化生成算不出极度复杂的曲面,学习模型没见过的设计模式它也编不出来。CADFather解决的是"怎么组合已有能力"的问题,而不是"怎么创造新能力"的问题。这个边界划得挺清楚,也挺重要。

Q&A

Q1:CADFather是什么?

A:CADFather是一个自主的CAD逆向工程智能体,它用一个视觉语言助手来协调学习模型生成、算法化几何拟合、数值参数优化三种工具,从3D网格模型自动重建出可编辑的CAD程序,而且不需要额外训练任何模型。

Q2:CADFather相比之前的CADENA方法有什么提升?

A:在DeepCAD、Fusion360、MCB三个完整测试集上,CADFather的平均IoU和GMS指标全面超过CADENA-RL采样方法,而且无效预测率全部降到0,意味着每个零件都能得到一个结构完整的实心体结果,所用的学习模型本身没有任何改动。

Q3:CADFather为什么要同时用学习模型和算法化生成两种工具?

A:因为学习模型生成第一步操作时经常得到不封闭的开口壳体,无法继续建模,而算法化生成直接从目标网格的横截面硬算出拉伸操作,天然封闭可靠,能给系统提供一个靠得住的起点,消融实验显示去掉这个工具会让失败率从0跳升到12%以上。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-