国产化替代这件事,落到CAD领域远比很多人想象的复杂。换掉一个软件装一装就行,真正的难点在于过去十几年甚至二十几年积累下来的几十万张图纸,要全部无缝迁移到新平台,还能继续编辑、审阅、复用。我前后参与过几个大规模迁移项目,最大的感受是:图元识别从来不是"锦上添花的功能",而是迁移项目能否顺利落地的生死线。图纸打不开、显示乱码还能靠格式转换兜底,但如果图元类别认不准、图层语义对不上,后续的工程量统计、模型复用、BIM对接全部都会崩掉。
这篇内容我就围绕"AI图元识别"这件事,把从数据准备、模型选型、训练调优到部署集成的完整链路拆开讲。不只是讲理论,重点是我在实际项目里踩过哪些坑、哪些方案看着合理但根本跑不通、哪些环节看起来不起眼却决定了最终上线效果。适合正在做CAD国产化迁移、图纸智能化处理、或者想用AI技术解析工程图纸的工程师,不管你现在处于选型阶段还是已经跑通Demo,都应该能从里面找到一些直接能用的经验。
1. 国产化CAD迁移进程中,为什么卡在图元识别这个环节
1.1 从"能打开"到"看得懂",中间的差距有多大
很多团队在迁移初期会拿到国产CAD厂商提供的格式转换插件,把DWG批量转成自家格式。测下来发现,日常图纸确实能打开,但这时候只完成了"几何无损"这一步,离"业务可用"还差着十万八千里。怎么理解这个差距?
举个例子,一张设备布置图里有个阀门符号,在原始图纸里它可能是一个"块"(Block),块内包含若干线条、圆弧和属性文字。转换插件能把这些线条圆弧原样搬过来,图面看起来什么都没缺。但如果业务部门要在新平台上做设备清册统计,系统需要知道"这个块代表的是阀门,型号是DN50"——这层语义信息,格式转换是给不了的。更麻烦的是,很多老图纸里同类设备图块没有统一命名,有的是"VALVE-50",有的是"V50-1",甚至有的是散线没做成块。这时候AI的作用就体现出来了:它得从几何形状、尺寸比例、文字标注等信息里,反推出这个图元到底是什么。
我实际遇到的案例,某制造企业的工艺管道图,纯粹因为块命名不统一,导致迁移后设备统计表里少了将近40%的条目。后来我们用AI模型对图元做形状-语义双通道识别,先把散线组合识别成阀门符号,再通过模型预测类别标签,统计完整率终于拉回到97%以上。这个项目让我彻底意识到,图元识别解决的是"看得懂"的问题,它决定了国产CAD替代到底能不能支撑实际业务。
1.2 为什么传统几何匹配算法在这个阶段不够用了
早期业界也不是没有做图元识别,很多老系统用几何匹配和模板库就能干活。模板库里存几百种常见符号的标准几何,然后用形状匹配算法去扫描图纸,命中了就认为识别成功。
这种方案的局限在于三点。第一,模板库的构建和维护成本极高,一个行业的标准符号可能上千种,而且不同设计院画的同类符号细节都不一样;第二,图纸里图元经过缩放、旋转、镜像、部分遮挡后,纯几何匹配的鲁棒性会迅速下降;第三,遇到没有标准模板的"野路子"画法,系统完全无能为力。
我在某个项目里接过一套老的识别模块,它的符号库已经有五千多个模板,按说覆盖够广了,但切换到一个新行业的图纸后,准确率直接掉到60%以下。新增模板需要人工把每个符号的几何特征一条条录进去,一个工程师忙一天也就处理几十个。这种效率在国产化浪潮的批量迁移场景里根本扛不住——我们面对的是几十万张图纸,不可能每张都人工介入。
深度学习和大模型的介入改变了这块的效率上限。模型可以自动从标注数据里学形状特征和语义特征,新增类别只需要准备一定量的标注样本,不像模板库那样需要手工拆解几何关系。所以现在做图元识别,大家默认的技术路线都已经转向数据驱动,区别只是数据的质量和模型怎么设计。
2. 图元识别的技术全景:几何规则与深度学习的边界
2.1 图元类别这个概念,先理清楚再谈模型
做AI识别之前,有一个很容易被忽略但极其重要的问题:你到底要把图元识别成哪些类别?
在CAD数据里,图元有"底层图元"和"业务图元"两种理解角度。底层图元就是几何元素本身,线(Line)、圆(Circle)、圆弧(Arc)、多段线(Polyline)、样条曲线(Spline)、填充(Hatch)、文字(Text)、标注(Dimension)、块(Block)这些。业务图元则是指这些几何元素组合起来表达出来的业务对象,比如阀、泵、管道、墙体、门窗、桥墩、桩基等。很多做AI识别的人一开始没想清楚这个问题,拿了一份底层图元的标注数据去训练模型,做出来一个"识别效果不错"的Demo,但业务方用起来发现根本对不上需求,因为业务方要的是"这个块是泵",不是"这个对象是块引用"。
我们的经验是,先把分类体系拆成两层。第一层是基础几何类别,模型输出Line/Circle/Arc/Polyline等基本类型,用来支撑格式转换质量审计;第二层是业务对象类别,模型结合上下文识别阀、泵、仪表、设备编号等,用来支撑工程语义检索和统计。两层模型可以共用底层的特征处理流程,但标签体系和模型输出头完全独立,混在一起训练不会有任何好结果。
2.2 规则算法在哪些地方仍然好用
深度学习说了这么多优点,但也不是万能。在我负责的系统里,有几类场景坚决用传统规则算法,效果反而更稳定。
第一类是纯几何属性的筛选。比如判断一个图元是否闭合、是否互相重叠、是否共线,这类问题用向量几何算法算一遍就非常快,没必要上模型。第二类是文字和标注的解析。DWG里文字图元自带字符串属性,直接读取属性就行,不需要OCR,只有扫描后的光栅图纸才需要OCR介入。第三类是图框中标题栏信息的提取,这些信息的位置相对固定,用基于坐标格的规则提取比识别模型更可控。
实际的系统里,我用规则算法做了大量前置处理和候选项筛选,深度学习模型只需要处理规则引擎过滤后的"语义嫌疑对象"。这样既减少了模型的计算量,也显著降低了误判率。一个典型的阀门识别,前置规则先找到所有"包含文字标注的、存在孔特征的、尺寸在某个范围的闭合几何集合",再交给模型判断类别,速度和准确率都有明显提升。
2.3 深度学习介入的典型场景与价值
深度学习真正发挥价值的场景主要集中在以下几个方向。
第一个方向是散线符号的聚合识别。大量老图纸里的设备符号并不是规范的块,而是由几十根零散线条凑出来的。规则算法没办法灵活组合这些线条,但目标检测类模型可以通过"先检测几何元素、再用图神经网络聚合候选符号"这种方案来处理。第二个方向是矢量化——很多老底图只有纸质扫描件或位图,没有CAD源文件,需要把栅格图像里的图元自动提取成矢量图元(线、圆弧、圆),这几乎必须依靠深度网络。第三个方向是图元的语义分类,特别是图块的多义性问题,同一形状在不同上下文里可能是泵也可能是电机,模型可以借助周围的文字标注和管线连接关系给出更准确的语义判断。
我们把系统里的识别模块做了一个分层设计:输入层做格式解析和图形预处理,中间层拆成规则引擎和深模型两个并行通道,最后还有个语义融合层把两边的结果汇总。整个系统上线后处理一张1000个图元的复杂装配图,深度模型推理耗时约85毫秒,规则引擎耗时约35毫秒,比纯规则方案在召回率上提升了约20%,比纯端到端模型方案在准确率上提升了约8%。这个对比测试我们反复跑过多次,结论很稳定:混合架构是这个场景下的最优解。
3. 数据准备:识别效果的天花板,早就在数据工程这里焊死了
3.1 训练数据的来源与格式转换问题
很多团队一上来就找人标数据,标了两个月发现模型效果还是不行。问题通常不在模型,而在数据源头。做CAD图元识别,首先要解决"数据怎么来,来的数据长什么样"。
如果手里的原始图纸是DWG格式,第一步要把它们统一导出成我们方便解析的格式。我实际用得最多的是DXF文件,它本质上是文本化的交换格式,每个图元都有明确的类型标识和坐标参数,便于程序批量读取。这里有个很容易踩的坑:DWG版本差异很大,老的R14版本、中间的2007版本、现在的2018+版本,内部对象存储结构变了不止一次。如果你直接调用某个单一的读取库去解析所有版本,大概率会在某些图纸上解析出错或者丢掉图元属性。我们的做法是准备三套解析通道:成熟的开源解析库(比如处理DXF的库)、商业格式转换组件,以及自研的兜底解析器。三个通道互相校验,解析日志里如果发现某个文件在通道A报错、通道B正常,就自动打上标记做人工复核。
另一类重要数据源是扫描图纸。很多设计院的存量资料只保留过纸质版或扫描件,数字化的时候只是因为图纸扫描存档,并没有重建矢量CAD文件。这批数据做图元识别,走的是完全不同的链路:先对扫描图像做预处理(二值化、去噪、倾斜校正),然后做"矢量化",把像素级线条转成矢量线段和圆弧,最后再进行图元几何分类和语义识别。这个流程对数据集的要求不只是"图元类别标签",还需要"像素级分割标签",标注成本高一个量级。如果没有足够的标注预算,我的建议是别一开始就碰扫描图纸,先把原生CAD图纸的链路跑通,收益会大得多。
3.2 标注规范与质检流程怎么设计
标注环节最容易出现的问题是"标注标准不统一"。两个人标同一个阀门符号,一个人把周围的管线也圈进去了,另一个人只圈了阀门主体,这两个样本喂给同一个模型,模型就会学到互相矛盾的信息。
为了避免这种情况,我在项目里强制推行了一套标注规范,有几条核心约定可以分享。
第一,每个业务图元的标注框必须包裹整个符号的最小外接矩形,但不能包含其他无关图元。第二,一个图元只能有一个主标签,类别归属以"最核心的业务语义"为准。第三,散线组合的符号需要先用工具进行几何合并,再给合并后的对象打标签,不能让标注员对着几十根散线分别打标。第四,每批次标注完成后必须有双人复核,复核不一致的样本回到争议池,由领域专家裁定,不能简单投票解决。
标注的质检指标也不仅仅是准确率,还要看"标注边界的一致性"。我们统计过标注员之间的框交并比(IoU),如果平均IoU低于0.85,说明标注标准已经失控,必须停下来重新培训。很多团队习惯性开启"标就完了"的模式,极容易在这种细枝末节上翻车。
3.3 数据增强、样本不均衡与噪声标签这三件套
CAD图元数据和自然图像的差异非常大,共享一套增强策略会出大问题。以图块识别为例,图元的位置、旋转角度、缩放比例本身就有很强的业务含义,你不能随便旋转90度——那可能把一个阀门语义变成另一个设备的语义。所以增强策略要限制在合理范围内:平移和缩放可以适量做,旋转必须按固定角度(比如15度的倍数)且有语义审查,颜色/线型的变化不能随机,要按行业制图规范来。
样本不均衡同样是重灾区。一个完整的图纸库里,直线和圆弧这些底层图元占了绝大多数,业务符号的占比可能只有几个百分点。如果不做处理,模型会学会把绝大多数样本都预测成高频类别,准确率虚高但业务完全不能用。我们的处理方式有三板斧:对高频基础图元做降采样训练,对低频业务符号做几十倍过采样并配合轻微形变增强;同时引入Focal Loss让模型把注意力集中到难分的少数类样本上;最后,对过采样样本和真实样本混合做批次训练,避免模型过拟合到增强样本。
噪声标签问题在CAD场景里也特别突出,主要来源是老图纸本身的错误,比如设计修改后图元没删干净、重复绘制、图层命名混乱。这类噪声不会因为标注认真而消失,它们藏在数据里。我的策略是引入"标签清洗模型":先训练一个初始模型,用模型预测置信度结合标注结果做对比,把置信度极低但被标成确定类别的样本挑出来,交给专家二次判定是改标签还是删样本。这样一轮清洗下来,通常可以减少大约15%的标签错误,模型的准确率能直接提升3到5个百分点。
4. 模型选型与训练细节:不是堆大模型就能赢
4.1 图元小尺寸特征与轻量化网络的设计选择
图元识别有一个特殊的难点:很多关键符号在图纸里的尺寸很小。一个阀门符号,在整张A0图纸里可能只占据几十个像素,如果用整图缩放后直接丢给目标检测模型,小目标的特征几乎全丢了。
针对这个问题,我们做了两个关键设计。第一,不直接对整图做统一缩放,而是先按图幅分块,把图纸切成若干瓦片(tile),每个瓦片内部保持原始比例,再对瓦片做检测。第二,在模型结构上,没有盲目用ResNet-50或更深的主干网络。对CAD图纸这种干净、高对比度、几乎没有纹理噪声的图像,轻量级的CNN主干(类似ResNet-18甚至更小)配合特征金字塔结构,检测小图元的效果已经足够好。对比实验里,ResNet-50比ResNet-18在业务符号上的精确率只提升了不到1%,但推理耗时增加了将近3倍,部署成本和响应速度都吃紧。
如果是基于矢量的原生CAD数据,我会更推荐走"几何特征工程 + 轻量分类器"的路线。先把每个候选图元/图元集合的几何特征(面积、周长、顶点数、曲率均值、凸包比、各方向投影长度等)抽出来,构建成特征向量,然后丢给一个多层感知机或者梯度提升树模型做分类。这么做的好处是特征可解释、调试方便、推理极快,而且对算力几乎没有要求。只有当矢量化特征表达不了复杂语义(比如图形形状很不规则、类别极度依赖上下文)的时候,才需要把图元栅格化后交给CNN。
4.2 损失函数与训练策略,怎样避免模型原地踏步
模型训练我在项目里踩过最深的一个坑是:直接拿标准的交叉熵损失去训练多标签图元分类,损失函数一直在降,但业务准确率却始终上不去。后来分析发现,图元类别之间存在大量"互斥但不完全互斥"的关系——一个对象同时被识别为"管线"和"标注线"在损失函数里是可接受的,但对业务来说就是致命错误。
解决这个问题的思路是设计组合损失。主损失仍然是类别交叉熵,但叠加了两项辅助损失:一项是结构一致性损失,强制模型预测的图元类别分布与图元间的几何拓扑关系保持一致,比如一个符号内部不应该出现"外部是管线的起点"这种互相矛盾的组合;另一项是层级约束损失,业务对象的类别预测必须与底层几何类别预测兼容,比如业务预测是"阀门"时,底层几何不能全部预测成"文字"。加上这两项之后,模型的业务准确率提升大约6个点,误判率显著降低。
训练策略上也有一些细节。第一阶段用完全平衡的采样训练,跑基础特征;第二阶段切换为尽量贴近真实图纸分布的采样,让模型重新适应类别的先验分布;最后再做几轮困难样本挖掘,把前两阶段预测错误的样本增强后单独回喂。整个过程大约3万步后可以稳定收敛,继续加大训练量对效果影响很小,这时候就该把精力放到推理加速和数据清洗上,而不要在训练上无限加时。
4.3 后处理:用几何约束把模型的"低级错误"纠正过来
模型是概率输出,最后落库的必须是确定性的图元类别和几何关系。很多团队在做后处理时只做"取置信度最高类别"这一步,这就浪费了大量可利用的领域知识。
我在系统里加了一套"几何约束修正器",专门跑三类规则。第一类是闭合性校验:如果模型把某条圆弧预测成"非闭合曲线",但它的起点和终点距离小于阈值,就强制改成"闭合圆弧"。第二类是图层归属校验:某些行业规范要求特定图元必须在特定图层,如果模型的类别预测和图层属性冲突,标记为待人工确认。第三类是上下文语义校验:类似"剖面线和填充图案的预测结果不能出现在模型类别为文字的区域"这类规则。
这套后处理逻辑看起来不起眼,但在实际测试中它能把最终错误率再降低约30%。比如有些圆,在图纸里既是实际的螺栓孔又是标注用的辅助圆,纯模型区分不了,规则加进去之后,根据螺栓孔的阵列分布规律就能把所有等距排布的圆统一修正为"螺栓孔",而不是零散地被分类成两种。这就是"模型+规则"的典型配合方式。
5. 部署与集成:图纸识别完了,业务闭环才算数
5.1 推理引擎的部署形态与两种落地路径
训练完成后的推理引擎部署,我建议根据业务紧迫程度选择两条路径,不要一上来就上昂贵的推理服务器。
路径一是离线批量识别,适合历史图纸库的整体迁移。把引擎封装成一个批量处理服务,输入一批DWG/DXF文件,输出识别结果JSON和校验报告,跑完整个流程后人工抽查即可。路径二是在线增量识别,适合新图纸产生时的实时处理。接入CAD软件的事件回调机制,图纸保存或打开时自动触发识别,推理结果实时回写图元属性。
两种部署形态我都在实际项目里跑过。离线方式对时延不敏感,可以采用较大的模型,甚至跑多模型集成投票;在线方式就要严格控制模型大小和推理耗时。我们最后在线引擎用的是量化后的轻量模型,在国产CPU上单张图纸平均推理大约320毫秒,加上格式解析和结果回写,整个流程控制在1.5秒以内,用户基本无感知。
5.2 与国产CAD内核的数据交互要注意什么
部署环节最容易被低估的是与CAD内核之间的数据交互复杂度。识别引擎要把结果写回图纸,本质上是对图元对象的扩展属性(XData)或自定义属性字典进行操作。不同国产CAD平台对扩展属性的支持程度不一样,有的支持标准XData,有的需要走自定义字典接口,有的底层API对批量属性写入的性能极差。
我曾经在一个项目里踩过坑:推理引擎已经跑完识别了,结果写回阶段因为平台对象属性接口要逐条推送,2000个图元写回竟然耗时超过10秒。后来改成批量事务接口,并利用平台自带的"批量修改"能力,耗时降到1.8秒。这里的关键经验是:开发之前一定先做一个写回性能压测,别等全部开发完了再发现时间都耗在属性回写上。
另外一个容易被忽略的点是"识别结果与图元对象的关联稳定性"。CAD图元在图纸保存再打开后,句柄(Handle)通常保持不变,但如果图纸经过转版本、修复或者另存,句柄也可能变化。我们做结果回写时用的是句柄+几何坐标的双重关联,先按句柄精确匹配,匹配不上再用坐标最近邻匹配,并在结果里记录匹配置信度。这样即使出现句柄漂移,也能通过坐标兜住绝大多数情况。
5.3 性能优化与国产硬件适配,这几个指标必须盯住
国产化语境下,推理引擎往往要适配国产CPU、国产GPU以及国产深度学习框架。这个适配过程的工程量经常被低估。
我实际测过的几个国产平台上,通用X86上跑得很顺的模型,迁移后可能遇到算子缺失、精度下降或者内存占用翻倍的问题。所以我的建议是:在模型选型阶段就要围着一个具体的国产推理目标平台来做约束。比如目标平台只支持INT8量化,那训练时就考虑量化感知训练,而不是训练完再临时量化;目标平台支持的卷积算子有限,就避免在骨干网络里使用过于冷门的算子结构。先把算子支持列表拿到手,再定网络结构,比回头做兼容性改造省力得多。
性能监控不能只看平均推理耗时,至少还要盯三个指标:耗时P95/P99、首包时延、以及长时间运行后的显存/内存水位。CAD图纸尺寸差异极大,小图可能几十毫秒出结果,大图可能几秒甚至十几秒,只看平均值会掩盖很多实际问题。有一次我们优化后平均耗时才100毫秒,但P99高达3秒,一查发现是某些超大图块的尺寸不受控制,后续做了图块切分和超时降级策略,P99才压到500毫秒以内。
6. 我踩过的坑和几条可复用的建议
做AI图元识别项目容易犯的最大错误,是把精力过多放在模型迭代上,却忽略了整个系统的漏斗转化率。我一开始也是这么干的,模型准确率从88%调到95%,花了两周时间,但整体业务指标几乎没变化。后来把所有识别流程拆开做耗时分析才发现,卡点在格式解析环节——有个老旧的图纸格式解析库在处理某些版本时效率极低,单文件解析耗时达到了模型推理的10倍。把解析库换了之后,整个流程提速了60%,比调模型收益大得多。
还有一次,我们在上线前做最后一轮大规模测试,发现识别结果出现大面积"图元偏移"。排查了很久,最后发现是图纸在迁移过程中被某个转换组件做了1:0.99的隐式缩放,导致了坐标错位。从那以后,我要求所有原始图纸在进入识别管线前必须做两次"几何特征一致性校验",比如对比所有闭合图形的质心分布、比较图框的对角线尺寸和标注尺寸是否吻合。这种校验一小时就能跑完,但能避免整个识别批次因为坐标系统性偏移而全部作废。
关于模型结构,我的建议是别盲目追求"大而全"的模型。图元识别这张任务,大多数环节是简单的几何分类和符号检测,需要的计算总量并不高,轻量模型加规则后处理已经能覆盖绝大多数业务需求。真正复杂的场景是语义级图元理解——比如理解一个符号是由哪些基础图元构成、它的功能和关联对象是什么——这部分目前还没有统一的成熟方案,更适合用工程手段给每个行业定制语义模板,而不是指望一个通用模型解决一切。
如果你现在正打算启动这类项目,我的具体建议有三条。第一,先花两周时间把已有图纸的图元分布统计搞清楚,高频类别和低频类别分开处理,这会直接影响整个数据标注的策略;第二,一定要做规则引擎和深度模型的混合架构,纯规则方案扛不住多样性,纯模型方案又缺乏可解释性,只有混合方案能同时兼顾业务方对准确率和可控性的要求;第三,上线前必须留出至少三周做深度模型误判样本的专项分析,把错误类型分门别类整理成"识别问题清单",再逐项决定是用数据增强、规则修正还是人工复核来解决。
图元识别这套系统,本质上不是单点算法问题,而是数据、规则、模型和业务校验的整体工程。我也是在反复踩坑和拆解流程之后,才慢慢把整个链条理顺的。希望这篇分享能让你少走一些弯路,在国产化迁移的大项目里,把有限的精力花在最有杠杆的地方。