ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI审图系统架构解析:从图纸解析到规则引擎的流水线落地指南

AI审图系统架构解析:从图纸解析到规则引擎的流水线落地指南 我经常在项目交流中被问到AI审图系统到底是怎么搭起来的问这句话的人有设计院的信息化负责人有工程公司的技术总监也有刚入行的算法工程师。大家看多了“大模型读图找错”的演示视频总以为把图纸扔给某个多模态大模型加一句提示词就能输出问题清单。实际做过一期工程审图项目之后我可以负责任地说AI审图系统更像一条流水线而不是一个万能模型。它由图纸解析、目标检测、OCR、视觉语言模型、规则引擎和人工复核闭环组成任何一个环节掉链子整体效果都会被打回原形。这篇文章把我踩过的坑和可以复用的架构思路完整写出来适合想自建审图能力的设计院、施工单位和做AI工程化的团队参考。1. 需求拆解与总体架构1.1 审图到底审什么先分清任务边界审图不是“让AI看图说话”。设计院传统的校对审核流程是审核工程师逐张图纸去看重点查三件事合规性、一致性、完整性。合规性就是图纸内容有没有违反工程建设强制性条文和设计规范。比如防火门净宽够不够、疏散门是不是朝疏散方向开启、无障碍坡道坡度是否超标。这类问题最敏感也是AI审图最想自动拦截的。一致性是图纸与图纸之间、图纸与设计说明之间有没有矛盾。典型场景是平面图开窗位置和立面图对不上、门窗表数量和平面图不符、大样图比例和详图索引不一致。这种问题需要跨区域对比不能只看单张图。完整性是图纸本身有没有缺漏。比如尺寸标注缺失、图框信息不完整、会签栏没有签字、版本号写错、图纸编号重复。看起来很基础但在大量出图压力下反而是最常出错的。做需求拆解时不要一上来就追求“全自动审图”而是先把审查项整理成清单。每个审查项都要回答三个问题输入是什么、用什么规则判、输出给谁复核。然后在清单上按可自动化程度打分。像“防火门净宽不小于1.0米”这种有明确数值的规则引擎就能做。“楼梯间是否直通室外”这种需要空间语义理解的就交给视觉大模型。把任务边界划清楚后面所有技术选型才有依据。1.2 总体架构多模块流水线别指望单模型全干我见过不少团队一上来就调多模态大模型的API拿一张总平面图问“有没有问题”。结果模型东一句西一句看起来能聊实际没法落地。工程图纸是一套严格的符号语言一张A0图分辨率可以到上亿像素任何单模型都消化不了同时图纸里的数值、标注、图层关系又极其精确大模型天生容易幻觉。所以我的架构思路是用多模块流水线每个模块只干自己最擅长的事。整体流程分六层输入层接收DWG、PDF、扫描件做格式校验和版本登记。解析层把源文件转成高分辨率图像做倾斜校正、图像切分。感知层用目标检测模型找图框、标题栏、标注区、表格用OCR抽文字和数值。理解层用视觉语言模型对重点区域做语义判断比如空间关系、功能布置、做法一致性。规则层把抽出来的数值和强条参数做精确比对输出确定性问题。输出层汇总问题生成带坐标和截图的问题清单进入人工复核闭环。用这么一套系统而不是一个模型全干本质原因是“分工”让每个环节的错误可控。检测模型漏检了可以针对性加数据。OCR把数值读错了可以换模型或加后处理。规则引擎判断错了改一条规则就行。如果全塞给一个大模型出了问题你都不知道该调数据还是调提示词。2. 图纸数据解析与预处理2.1 图纸从哪来怎么变成模型能看的格式审图系统上游拿到的文件一般有三种CAD源文件DWG/DXF、PDF成品图、扫描件。这三种格式的处理路径完全不同。DWG文件建议用ODA File Converter转成PDF或DXF。这个工具免费支持命令行批量调用是很多CAD平台的底层转换器。不过我提醒一句转换前先和设计院确认字体库。很多工程图用了天正、探索者或特殊SHX字体转PDF后直接显示成问号后面的OCR根本无从下手。PDF转图像我用PyMuPDF也就是fitz渲染参数直接决定后续模型效果。import fitz doc fitz.open(drawing.pdf) page doc[0] dpi 300 mat fitz.Matrix(dpi / 72, dpi / 72) pix page.get_pixmap(matrixmat, alphaFalse) pix.save(page_0.png)A0图纸按300 DPI渲染输出大约2480x3508像素。再往上加分辨率意义不大反而会把模型推理时间拖垮。正常处理是先用低倍率找图框再对局部区域用高倍率裁图。扫描件是最麻烦的。有些扫描件倾斜、偏色、有折痕直接送模型准出错。我会先做一轮OpenCV预处理转灰度、去噪、检测长直线算倾斜角然后仿射变换校正。import cv2 import numpy as np img cv2.imread(scan.png) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges cv2.Canny(gray, 50, 150) lines cv2.HoughLinesP(edges, 1, np.pi / 180, threshold100) angles [] for line in lines: x1, y1, x2, y2 line[0] angle np.degrees(np.arctan2(y2 - y1, x2 - x1)) angles.append(angle) # 取中位数作为主角度做旋转校正 median_angle np.median(angles) h, w gray.shape matrix cv2.getRotationMatrix2D((w / 2, h / 2), median_angle, 1.0) corrected cv2.warpAffine(gray, matrix, (w, h))图纸方向不统一是行业常态有些图倒着画有些图旋转90度出图。这个坑我后面还会详细说但预处理阶段强制校正方向能提升下游检测模型至少二十个百分点的召回。2.2 图框、标题栏、图号怎么提取图纸解析阶段的目标是从一张大图里把结构化信息抠出来。先用目标检测模型找几类关键区域包括图框、标题栏、图签、尺寸标注簇、表格、指北针。目标检测我用YOLOv8系列。工程图纸的检测目标边界清晰YOLO足够用而且部署轻量。类别设计上要注意尺寸标注不要按单个箭头去标而是把一段完整的尺寸线作为一个“标注组”目标否则标注数量爆炸训练也学不到语境。训练配置参考如下# drawing_dataset.yaml task: detect mode: train model: yolov8m.pt data: drawing_dataset.yaml epochs: 200 imgsz: 1280 batch: 16 device: 0数据集至少要2000张标注过的图纸最好来自不同设计院否则泛化很差。检测出标题栏之后再对标题栏区域做OCR抽取图号、版本号、设计人、日期。这一步非常关键因为审图必须锁定“审的是哪一版”。有一次我们的系统就是没抽版本号AI辛辛苦苦审完一张旧版图纸发现问题全部返工。2.3 数据管线与版本比对预处理环节不是一次性的我会在服务层里做成一条任务管线。上传文件后任务状态依次流转待渲染、渲染中、检测中、OCR中、审核中、完成、失败。任一环节挂了要做重试和幂等任务ID不能被重复消费。版本比对是很多团队忽略但收益很高的功能。同一个图号设计院可能出了RevA、RevB、RevC好几版。如果每次都把整张A0图从头审一遍算力浪费严重。我的做法是先做图像层diff用ORB特征匹配把两版图对齐然后按像素差找出变化区域只对这些区域重新做深度审图。这样单版增量审图时间能缩短一半以上。这里还有一条重要的边界条件图纸是核心资产。整个系统默认应该私有化部署不要图省事直接把原始图纸传到公网API。如果确实要用外部大模型做理解层必须先在本地做脱敏处理比如过滤图框、替换项目名称、模糊标识再输出给外部接口。3. 核心引擎检测模型视觉大模型的分工3.1 目标检测先找到“要看哪里”很多做AI的朋友有个错觉认为多模态大模型可以直接看懂整张图纸。其实对A0这种尺幅的图纸模型压根做不到全局高精度。必须先用目标检测雷达一样扫一遍把该看的区域定位出来再做小图理解。目标检测模型在审图系统里承担三类任务。第一是找结构区域包括图框、标题栏、指北针、剖切符号。第二是找信息密集区包括尺寸标注组、文字段落、材料表、门窗表。第三是找专项区域比如局部大样、节点详图。我训练检测模型时一开始直接拿原图缩放到1280分辨率训练结果A0上的细微标注全被缩没了。正确做法是先对原图做切块按滑窗方式把大图切成1024或1280的子图我们切块重叠率通常设为10%到15%。为什么要留重叠因为一个尺寸标注组如果刚好被切在边界上模型会只检出半截下游OCR读到残缺数据就会误判。重叠区域虽然会增加一点计算量但能换来明显的召回提升。检测模型输出的是切块内坐标要还原到原图坐标时记得加上切块的偏移量。这一步看似简单但最容易出bug我见过团队因为坐标没还原AI报出的问题位置和实际图面差了半个版幅。3.2 视觉大模型负责语义判断检测模型告诉我们“图框在哪、标注在哪”但“这个防火门开启方向对不对”“这条疏散走道是不是被堵住了”这类语义判断需要一个会看图的模型。视觉语言模型VLM非常合适。选型时我的优先级是私有化优先。如果方案允许私有云或者专线我会优先考虑Qwen2.5-VL-7B、InternVL、MiniCPM-V这一档单卡能跑效果在线。如果数据不出域这个条件卡得死还可以考虑更轻量的模型做量化部署如果团队算力紧张再用商业API作为备选项。VLM不能直接丢整张CAD图。我们喂给它的是检测模型裁剪出来的重点区域比如“楼梯间局部”“门厅疏散方向区”“图纸左下角详图”。配合固定提示词模板要求输出结构化JSON。举个例子SYSTEM: 你是建筑专业审图工程师。只基于输入的图纸区域做判断禁止猜测。 如果判断所需信息不足请明确输出uncertain: true。 审查清单 1. 防火门净宽是否满足规范 2. 门开启方向是否指向疏散方向 3. 疏散走道是否存在明显遮挡 USER: 图纸区域裁剪图 本层功能高层办公标准层耐火等级一级 输出JSON格式 {uncertain: false, issues: [{type: ..., severity: high|medium|low, reason: ..., bbox: [x1, y1, x2, y2]}]}有些朋友问为什么不直接用VLM替代检测模型一步到位输出问题我在项目里试过一塌糊涂。VLM对空间位置的输出不够精确它说“左上方有个门”但你没法落回到CAD坐标而且它会脑补图里没有的构件它也能编一个出来。检测模型负责“锚定位置”VLM负责“描述语义”两者是互补关系。3.3 规则引擎精确数值校准视觉大模型处理语义很强处理精确数值很弱。比如规范规定疏散门净宽不应小于1.0米模型看图后告诉你“这个门看起来约1米”但实际是0.98米还是1.02米模型根本无法给出稳定答案。这时候必须上规则引擎。规则引擎做的事情是从OCR提取图纸上的具体数值例如门宽、坡道坡度、防火间距、消防通道宽度然后和规则库里的强条做比较判断。我会把规则写成YAML便于非算法同事维护rules: - id: GB55037-2022-7.1.4 name: 疏散门净宽 object: door attribute: clear_width min: 1.0 unit: m severity: high - id: GB55037-2022-7.4.2 name: 无障碍坡道坡度 object: ramp attribute: slope max: 0.083 severity: high规则引擎的好处是稳定、可解释、可追踪。每个判断都能落到某条规范条款人工复核时也容易确认。规则引擎和模型互补模型发现“疑似问题”规则引擎再抽取精确值校验确定超出阈值的直接报出不确定的转人工。一句话总结数值精确问题绝不能让大模型拍板规则引擎才是兜底。4. 提示词与审核策略设计4.1 提示词模板不要让模型自由发挥大模型要用好提示词工程避不开。给VLM的提示词不能是聊天式的“你帮我看看这图哪里有问题”越开放越容易得到一堆废话。我的提示词模板固定包含五个要素角色定义、图纸背景、审查清单、输出格式、不确定处理。其中“不确定处理”特别重要它告诉模型信息不足时可以如实说不要硬编。上节给的模板是简版。完整版还会加入当前图纸的图层类型、图幅比例、审查阶段、历史问题列表让模型能在给定上下文里做判断。比如平面图和立面图对比时我会同时把两张裁剪图放进同一个用户消息明确告诉模型“对比这两个区域的开窗位置是否一致”。提示词模板要版本化管理。它跟代码一样每次修改都要记录原因并跑回归样例集。我见过团队改了一个措辞结果所有审核结果风格大变所以建议维护一个200到300条的样例集每次改模板后全量跑一遍对比输出格式和关键问题召回。4.2 示例选择用few-shot调“倾向”纯提示词模板模型的判断倾向是不稳定的。不加正反例的时候模型很容易“当老好人”给出“未发现明显问题”或者反过来把图纸上所有元素都当成可疑点报出一堆噪声。解决方法是给少量示例few-shot。每个审查项配两个示例一个是有问题的正例一个是没问题的反例。让模型先看到“问题长这样”和“正常长这样”再让它判断新图。示例不要随便选从历史审图记录里筛。我们当时从一千条人工审核记录里挑出专家共识度高的样本剔除被复核推翻的按项目类型分类住宅、办公、商业、工业建筑各建一个示例池。理由是不同项目类型的图纸差异很大用住宅的示例去审工业厂房模型容易困惑。动态选择示例也能提升效果。代码里实现一个简单检索根据当前图纸类型和审查项从示例池里取最相关的几条拼进提示词。这个做法比固定示例效果稳定不少。4.3 置信度与转人工策略大模型给置信度这件事别太当真。VLM输出“confidence: 0.9”通常是模型自己感觉良好并不是校准过的概率。我建议用多次采样一致性的方式替代同一张裁剪图用不同温度采样三次两次以上输出同一类型问题才记为高置信。审核策略上我们按问题等级设置不同阈值高风险问题比如疏散门方向错误、防火分区超面积只要检出就必须进人工复核哪怕置信度只有0.7也不能放。中低风险问题置信度大于0.8自动出问题单0.5到0.8暂存低于0.5直接丢弃。对低风险的“提示性意见”宁缺毋滥。因为审图员时间有限AI每多报10条无用信息消耗的信任就多一分。这套策略的本质是分层复检模型和规则各自输出汇总后先按严重程度分流再决定是自动生成审核意见还是转人工。审图这个场景精度永远比数量重要。5. 工程落地与性能优化5.1 模型部署和推理加速算法验证完成后工程落地就是另一场仗。模型部署方面YOLO用TensorRT导出为engine格式推理速度提升明显。yolo export modelyolov8m.pt formatengine device0 halfTrueVLM部署我用vLLM兼容OpenAI的接口格式业务侧调用方便。python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-VL-7B-Instruct \ --dtype float16 \ --max-model-len 8192 \ --gpu-memory-utilization 0.9 \ --port 8000显存估算有个粗公式7B模型FP16权重约占14GB加上KV cache和输入图像编码开销24GB的A10单卡可以跑但并发不高。预算允许就上40GB A100或L40S想省钱就用4bit量化权重能压到6GB附近但视觉编码部分仍有额外开销务必压测后再定。推理优化还有一个小技巧不要把切块图一股脑塞进模型而是把多个裁剪区域拼成一张大图统一推理。这样会省很多重复的视觉编码耗时。注意padding部分要做mask并把输出坐标映射到原图。5.2 任务调度一堆GPU任务怎么排队一张A0图会被切成几十到上百个子区域不可能同步等请求返回。工程上我用Redis Stream做任务队列每个Worker绑定一块GPU消费队列任务。任务状态机至少要有待处理、渲染中、检测中、OCR中、理解中、规则校验中、完成、失败。失败要区分可重试和不可重试。文件损坏这类不可重试GPU进程OOM这类可重试可以设置最多重试三次。幂等性必须做。客户端可能因为网络超时重复提交同一ID后端要支持按任务ID去重。我见过没做幂等的团队同一张图被审了三遍问题单重复率高得吓人。性能目标上我们单张A0整图全流程目标控制在30到40秒。其中渲染3秒、检测5秒、OCR 5秒、VLM理解15秒、规则校验1秒。如果切块太多超时要把更多区域交给低分辨率快速推理只有检测出来的重点区域才走高清VLM。5.3 结果回写和人机协同AI审图系统要真正在生产环境用起来不能只输出一份报表必须回到审图员熟悉的CAD环境里。我们当时做了AutoCAD插件导出每个问题时带两个关键信息原图截图和坐标。问题清单是JSON格式{ drawing_id: C2-建施-01_RevB, issues: [ { id: ISS-2024-0012, type: 疏散门方向, severity: high, rule_id: GB55037-2022-7.1.4, position: {x: 1024, y: 768, page: 0}, crop_image: /screenshots/iss_0012.png, confidence: 0.92, status: pending } ] }审图员在AutoCAD里双击问题行插件通过坐标反查直接跳转到对应图元。这样AI不是“替代”审图员而是“辅助”审图员把重复性的对图工作先做一遍人负责最终决策。复核结果不要浪费。审图员点击“同意”或“驳回”的每条记录都回流到数据库。三个月后这批“AI初判人工修正”的数据就是微调模型最珍贵的语料。这也是我见过最有效的AI审图系统运营方式构建一个数据飞轮越用越准。6. 效果评估与踩坑记录6.1 评估指标怎么定普通图像识别项目看mAP就够了但审图系统必须看问题级指标。我每次做项目汇报只讲四个数问题级召回率AI报出的真问题数量除以专家标定的全部真问题数量。审图场景里漏报是态度问题所以召回率必须优先保证。误报率AI报出但被人工否定的数量除以AI总报出数量。误报太高审图员会失去耐心。定位偏差AI给出的问题坐标与专家标注坐标的中心点误差通常控制在50像素以内才算合格。单图处理时长决定算力成本和用户等待体验。我们当时构造测试集的方式是找三位资深审图员双盲标注同一批50张图纸不一致的地方请专家仲裁形成Ground Truth。三位专家完全一致的比例其实不高这种“标注噪声”本身就是AI审图项目要面对的现实。一位项目实测数据大概是这样的指标目标实测问题级召回率不低于85%87.6%误报率不高于20%22.4%问题定位偏差不大于50像素43.7像素单图平均处理时长不超过60秒38.2秒这个结果可以直接用说明在“AI辅助审图”这个定位下系统已经具备上线价值但离全自动审图还有距离。6.2 我踩过的坑第一坑图纸方向不统一。早期我们直接把扫描图送进检测模型训练到后期召回率卡在50%左右上不去。后来排查发现是图纸方向和训练样本不一致有的图旋转了90度有的上下颠倒。解决方式是预处理阶段用图框直线检测强制把主方向校正到水平再进检测模型。仅这一个改动召回率直接拉了二十多个点。第二坑A0大图切块后目标跨块。尺寸标注、引出线、文字说明经常横跨两个切块模型只看一半无从判断。后来统一用重叠切块重叠区域是切块边长度的10%至15%问题大幅缓解。第三坑CAD字体乱码。DWG转PDF时设计院如果用了自定义SHX字体转换后文字变成“”或者丢字。这个阶段查不出问题直到下游OCR阶段才暴露。解决起来很费劲先让设计院提供字体库转换服务器统一安装实在不行就用TrueType字体替代渲染。这个坑一定要在项目进场时就和设计院说清楚。第四坑VLM幻觉。模型有时会把图里不存在的构件说得有模有样。比如一张剖面图里明明没有无障碍坡道模型却报“坡道坡度不足”。我们在提示词里加“禁止猜测”、强制要求输出定位框、增设多次采样一致性校验后幻觉才被压下去。6.3 常见问题排查速查表现象可能原因排查方向解决建议检测模型漏检大量标注图纸方向不统一检查预处理是否做方向校正图框直线角校正统一旋转到水平OCR读到的数值乱序标注文字压盖、跨切块检查OCR前后处理逻辑增加切块重叠按图层过滤噪声文字VLM重复报同一问题多切块重复覆盖同一区域检查结果去重逻辑按坐标IoU做去重同一问题只保留最高置信度问题坐标点不在图面切块坐标未还原原图检查坐标偏移量计算统一坐标系用图框角点做对齐单图处理时间过长切块太多、串行推理查看任务队列监控并行推理、低分辨率快速预筛这套排查表是我们项目组内部从零散问题逐渐沉淀出来的新同学接手时按表排查能省掉大量试错时间。项目做了大半年我最深的体会是AI审图系统最难的不是模型而是把过去藏在老师傅脑子里的审图经验拆成可执行的规则、可标注的数据和可闭环的流程。模型部分只要投入时间和算力总能解决真正锁死天花板的是图纸数据的结构化程度和人工复核反馈是否跑得起来。如果你准备启动类似项目我建议第一周不要碰任何大模型先带着审图员把审查项清单、问题分类、坐标记录格式定下来。最后分享一个亲测有效的小技巧从第一天开始所有AI检出结果无论对错都保存问题截图和坐标。三个月后你会得到一批“算法猜错但专家改对”的珍贵样本这比任何公开数据集都值钱。
返回列表