资讯动态

多模态大模型+RAG在工业质检缺陷检测中的实战应用

发布时间:2026/10/17 12:24:11 来源:尧图企业网站定制
去年接了一条汽车零部件产线的质检改造项目代号就叫模拟项目X。产线上要检的是焊接后的表面缺陷划伤、凹坑、焊渣挂瘤、氧化色偶尔还有意想不到的拉伤纹路。甲方一开始提了个很常见的要求把人工质检换成自动检测节拍不能低于每分钟30件。我按老路子走了两周——经典目标检测加分类头损伤识别率倒是做到了结果第三周就崩了现场出现了一种之前完全没见过的高温摩擦纹模型直接漏检被下游客户退了一整批货。就在那个节点上我把方案整体推翻换成了多模态大模型RAG的组合多模态模型负责“看”和“描述”RAG负责把老师傅脑子里的经验档案变成可检索的知识库。整套系统从架构到落地前后改了三个版本目前已经在两条产线上稳定跑了大半年。今天这篇文章就是把整个实战过程拆开讲清楚为什么传统方案会栽在新增缺陷上、系统的模块怎么划分、知识库怎么建、核心链路怎么实现、实测结果如何以及那些只有真正上线后才会遇到的坑。1. 传统视觉方案为什么会在“新增缺陷”上栽跟头先复盘一下旧方案的死法。最初用的是“目标检测分类头”的标准范式先用检测框把缺陷位置框出来再让分类网络判断它是划伤、凹坑还是焊渣。在产线刚起步、缺陷类型完全可控的时候这套打法很稳准确率能到97%以上。但问题出在“可控”这两个字上——现实产线从不按你定义的类别表出牌。1.1 缺陷识别不只是“找出来”还要“讲清楚”甲方产线的质检工位一直有个特殊要求缺陷不是报个“有/无”就行质检员得上报缺陷属于轻微、明显还是严重还得给出可能成因和处置建议。比如“焊接气孔”这种缺陷若是电流偏大导致的建议是调整焊接参数若是母材本身有油污导致的处置方向就变成清洗工艺。传统模型输出的类别和坐标帮不上这种忙它只会告诉你“这里有个东西”。这就是工业质检里“感知”和“知识”的割裂。人工质检员之所以强是因为脑子里装着一套经验档案看一眼图像就知道大概是哪个工序哪个参数出了问题。而传统深度学习模型把所有经验都固化在了权重里你没法把一条新的经验“塞进去”。多模态大模型天然具备文字输出能力可以把视觉特征转成自然语言描述RAG则负责把零散的经验档案组织成可检索的知识库。两者一结合“看”和“懂”才真正打通。1.2 固定分类器的三个天花板用“分类头”做缺陷识别在实际项目中至少会撞上三堵墙第一堵是类别封闭。分类头决定了模型只能输出训练时见过的类别。产线出现新缺陷时你没办法靠改配置去适配必须重新标数据、重新训练。第二堵是类内差异大。同一种划伤在不同光照、不同角度、不同材质底色下视觉表现天差地别想用一个固定类别把所有这些形态都收进来需要海量样本。第三堵是迭代周期长。哪怕样本凑够了从标注、训练、测评到灰度上线最快也要两三周而产线一般等不了这么久。我当时算过一笔账整个零部件产线有上百道工序每道工序都可能引入新缺陷形态靠“收集样本—重新训练”的循环来跟进人力根本跟不上。意识到这一点之后我才彻底转向“开放词表知识检索”的思路。2. 系统架构多模态理解负责“看”RAG负责“懂”很多人以为多模态大模型RAG就是把图片丢给模型、再塞几段检索文本进去实际工程化之后完全不是这么简单。系统的核心是让每条数据有一个明确的流向每个模块只干一件事出了问题才好定位、才好优化。2.1 五个模块与数据流向整套系统分成五个模块采集触发、图像预处理、多模态推理、知识检索、业务对接。每个模块职责都尽量单一方便单独调优。模块核心职责关键输出采集触发接PLC信号拍照触发相机和光源原始图像附带工序号、时间戳图像预处理ROI裁剪、光照校正、去噪、多尺度切分标准化后的图像块多模态推理对图像进行视觉语言理解生成基础描述缺陷描述、疑似类别、置信度知识检索根据图像特征和文字描述召回相关缺陷档案TopK知识卡片及相似度业务对接融合模型输出与业务规则推送MES/告警判定结果、处置建议、复核工单数据流向是一条直线相机采集到图像后先做预处理然后多模态推理生成“初步描述”用这个描述去知识库检索拿到结果后再把“图像检索到的知识卡片”一起交给模型做二次判定最终输出结构化结果。这里有个容易被忽略的点同一张图会被模型看两次。第一次是为了生成检索用的描述第二次是为了结合知识库做最终判断。这样做看似浪费算力却能显著降低误判。2.2 为什么选多模态大模型而不是继续堆数据集选择模型时我对比了两条路线一是继续沿用小模型方案在原有检测网络上不断加数据和类别二是换用视觉语言模型。前者的诱人之处是推理快、部署成熟但它在长尾缺陷面前毫无还手之力。后者虽然单次推理成本高却具备两个本质优势。第一个优势是开放词表。视觉语言模型的输出空间是自然语言而不是固定类别模型可以描述从未见过的缺陷形态比如“呈放射状的灰白色摩擦痕迹”而不是只能回答“划伤”或“不是划伤”。第二个优势是指令跟随。你可以直接要求它以某种格式输出结果、说明判断依据这让后续的业务规则对接变得非常顺滑。2.3 RAG真正的价值让知识层独立更新RAG在工业场景里解决的不是“搜索”问题而是“知识更新”问题。大模型的权重一旦训练完成就很难改动但工业现场的知识是高频变动的每个月可能有新的缺陷形态、新的工艺标准、新的客户反馈。如果用微调去跟进每一次更新都是一轮大工程。RAG把知识从模型权重里抽了出来放进外部知识库。产线出现新缺陷时只需要新增一条知识卡片向量化之后入库模型下次检索就能命中全程不用碰模型权重。这一点是选型RAG的决定性理由。另外检索出来的知识卡片可以进行溯源展示质检员能看到模型参考了哪条档案、为什么给出这个结论这种可解释性对一线人员建立信任极其重要。3. 缺陷知识库先建档案再谈检索RAG系统的上限是由知识库决定的这句话在我这个项目里体现得淋漓尽致。最开始我犯了个典型错误到处找通用缺陷数据集想把库做得“大而全”。后来发现通用数据在自家产线上根本没用——每一条产线的材料、工艺、光源环境都不一样别人家的缺陷图和你现场的缺陷图在纹理和光照上差异巨大。正确的做法是从自己现场的数据里长知识库。3.1 现场数据的三种状态与分层策略我把现场数据分成ABC三档分别对应不同的标注成本和入库用途。档位数据来源标注内容入库用途A档质量工程师人工确认过的缺陷类别、位置框、成因、处置建议高质量知识卡片直接作为检索答案B档日常巡检记录的疑似缺陷类别一句话描述扩展类别形态丰富检索召回C档客户退回、复检发现的缺陷只有图片和关键词仅用于辅助检索不单独作为处置依据A档数据最珍贵哪怕数量少每种缺陷十几张图就够也要保证信息完整。B档数据量大标注成本低主要价值是让检索模块在召回阶段“想起”更多相似案例。C档数据则是长尾缺陷的来源虽然信息不全但能防止全新的缺陷形态在检索阶段被直接过滤掉。入库之前还要做两件清洗动作一是去除重复和高度相似的图像避免检索结果被某一种形态“刷屏”二是统一图像方向、校正色偏保证不同批次的数据在向量空间里是可比的。负样本也要建库这里的“负”指的是容易误判的类缺陷区域比如焊缝的正常鱼鳞纹、零件表面的机加工纹理它们的存在能显著降低误报。3.2 知识卡片的结构与入库流程知识库的最小单元是一张“知识卡片”它的字段设计决定了后续检索和判定的质量。我经过三轮迭代最终固定下来的结构是字段说明示例缺陷ID唯一编号KBC-1042缺陷类别顶层分类名气孔形态描述视觉特征的文字化描述圆形或椭圆形凹坑边缘较亮内部暗色可能成因列举常见成因焊接电流过大、气体保护不足、母材油污涉及工序定位到工序环节焊接-第二工位判定准则轻度/明显的量化标准直径小于0.5mm为轻度大于1mm需返修处理建议可直接执行的动作调整电流参数检查保护气体流量示例图现场实拍图或裁剪图附件路径参考标准内部或行业标准号某内部外观检验规范每张卡片不是一个人拍脑袋写出来的而是由产线质检员起草、质量主管审核后生效。我自己定的流程是质检员在修正系统的“待入库区”填写草稿卡片主管确认后就进入向量化管线。入库管线相对简单读取卡片文本用文本嵌入模型生成向量读取示例图用图嵌入模型生成图像向量再把这些向量连同结构化字段写入向量库。不少人在这一步会犯一个错——只做文本向量忽略图像向量。实际检索时现场来的是一张图如果只拿文本描述去检索图里的视觉细节纹理、对比度、颜色都会丢失召回效果会大打折扣。3.3 向量检索与混合重排知识库建好之后检索模块就成了门面。数据量在万级卡片以内时选型不用纠结一个单机版开源向量库就够用。实测下来对1000余条知识卡片做检索向量查询耗时在10毫秒级别真正的耗时大头反而在图像和文本的嵌入生成上。我采用的是混合检索倒排融合的思路一路用图像向量做相似检索另一路用模型生成的文本描述做关键词检索两路结果用RRF公式融合重排。score 1 / (60 rank_vector) 1 / (60 rank_keyword)RRF的好处是不需要调权重直接把两路排序的名次融合就行实测比简单加权相加更稳。融合后再设置一个相似度门槛低于门槛的知识卡片直接丢弃避免把不相关的档案强行塞给大模型。门槛设在0.75左右时效果最好——太高容易丢有用信息太低会把噪声当知识。4. 核心识别链路实现视觉理解、知识注入与业务规则怎么粘合整个系统最核心的一段逻辑是“图像进来之后到底怎么走一遍”。很多人把RAG理解成简单的“先检索再拼接”但实际操作中有很多细节决定成败预处理的尺度、提示词的结构、检索结果如何被约束、最终输出怎么对接业务规则。4.1 模型接入与预处理细节模型我选的是参数量适中、支持图像输入的开源视觉语言模型。这类模型的常规结构是一个CLIP式的图像编码器作为“视觉塔”把图像转成视觉特征再和文本特征一起送入语言模型生成描述。选型时重点关注三点视觉输入分辨率、推理框架兼容性、以及中文场景下的表现。先看预处理部分这一块直接影响模型能否“看见”小缺陷。以一块正方形焊缝区域为例原始图像分辨率是2048x2048直接缩放到模型要求的448x448一个原本只有20像素大小的气孔就会缩小成约4像素模型基本不可能识别出来。我的做法是“多尺度裁剪”先把整图缩放输入一次得到整体上下文再对中心区域、四角区域各裁一块放大输入一次。大缺陷靠整体图捕捉小缺陷靠局部放大图捕捉最后让模型结合两个尺度的输出做综合判断。def process_image(raw_img): patches [] # 整体视图 patches.append(resize(raw_img, (448, 448))) h, w raw_img.shape[:2] # 中心放大区域 center raw_img[h//4:h*3//4, w//4:w*3//4] patches.append(resize(center, (448, 448))) # 四角区域 for y, x in [(0,0),(0,w*3//4),(h*3//4,0),(h*3//4,w*3//4)]: crop raw_img[y:yh//2, x:xw//2] patches.append(resize(crop, (448, 448))) return patches整张图切成三到五块之后再送入后续推理。代价是单件图像的推理次数增加了换来的是小缺陷召回率明显提升。这个取舍在产线上是值得的。4.2 提示词工程先让模型“查档案”再让模型“下结论”提示词是整个链路里最便宜却最有效的一环。我迭代了很多版本发现一个关键原则必须向模型明示“你是先看了档案再下结论的”。如果不提知识库模型只会按自己的固有能力回答检索结果根本起不到约束作用。实际使用的系统提示词模板大致是这样的你是一名具备十年经验的焊接件外观质检专家。 请完成以下任务 1. 分析输入图像判断是否存在表面缺陷 2. 如果存在缺陷请输出缺陷类别、位置描述和置信度分数 3. 下方是系统根据图像检索到的历史知识卡片请结合卡片内容判断缺陷严重程度并给出处理建议 4. 如果检索到的知识卡片与图像明显不符请忽略该卡片并在结论中注明“参考内容不可用” 5. 严禁臆造成因无法判断时输出“原因未知”。 知识卡片如下 {retrieved_cards} 请严格按照JSON格式输出 {has_defect: bool, category: str, location: str, confidence: float, severity: str, probable_cause: str, suggestion: str, reference_available: bool}一点经验细说要求模型按“类别位置置信度严重等级成因建议”的JSON结构输出是为了让下游业务联动逻辑能稳定解析。置信度和参考标志这两个字段尤其重要后半段会讲它们怎么参与规则判定。4.3 检索结果的后处理与业务规则融合大模型输出的原始JSON不能直接作为产线判定结果必须和业务规则做一层融合。融合规则放在代码层实现而不是让模型自己拿主意这是整个系统稳妥运行的关键。我在项目里定了一套分级规则自动放行模型判定“无缺陷”且置信度大于等于0.9直接通过不发送人工复核自动拦截检出裂纹、贯穿性气孔等高危缺陷时无论置信度高低一律拦截并推送告警因为这类缺陷一旦流出后果严重人工复核置信度在0.6到0.9之间或检索结果相似度低于阈值或模型自身输出了“参考内容不可用”标志则进入人工复核队列。这套规则的本质是模型负责出判断规则负责出决定。大模型擅长的是感知和理解业务系统擅长的是确定性执行两者各司其职才能既保证效率又控制风险。5. 实测结果与踩坑记录检索增强也有副作用系统上线前我们在两批次产品上做了对比测试结果既让我兴奋也让我冷静。兴奋的是长尾缺陷的识别率确实上来了冷静的是RAG并不是银弹它引入了新的失败模式有几个坑如果不踩一遍根本想不到。5.1 两批产品的效果对比与指标解读先给一组测试数据。测试对象是同一产线的1628件样品其中包含四类已知缺陷和一类新出现的摩擦纹缺陷。指标传统CNN方案多模态大模型RAG已知四类缺陷识别准确率96.8%96.2%新增摩擦纹缺陷准确率61.5%87.9%过杀率4.2%5.6%漏检率2.1%1.7%单件平均决策时延80ms1.4s两组对比解读起来很有意思。传统方案在“已知四类”上略微领先原因是它针对每个类别专门调过参、堆过数据这个优势依旧存在。但多模态方案在“新增缺陷”上领先了二十多个百分点说明RAG开放词表的路线在长尾场景下的确有效。过杀率略有上升主要原因是模型对不确定的缺陷倾向于“宁杀错不放过”这个需要在业务规则层做抑制。时延从80毫秒涨到1.4秒是最明显的代价但产线节拍是30件/分钟意味着单件只要在2秒内出结果就来得及因此并不构成瓶颈。5.2 三个典型检索陷阱第一个坑是相似外观但不同成因。有一类“磨痕”和“划伤”在图像上非常相似检索时模型把磨痕图像召回成了划伤的知识卡片随后判定建议也跟着偏向划伤处理流程差点误导工艺调整。根因是向量相似度只衡量了视觉外观没考虑工序上下文。解决办法是在检索时加入元数据过滤知识卡片按工序字段分层索引检索时先过滤掉非当前工序的卡片再算相似度。这个改动让检索准确率明显提升。第二个坑是背景噪声导致检索被带偏。焊缝区域的飞溅颗粒、反光、油污会让图像向量在特征空间里偏向“脏污”类卡片。有一次模型把正常焊缝的高光区域描述成了氧化色检索回来一堆氧化知识卡。解决办法分两层预处理阶段增加去反光和光照归一化检索阶段遇到模型自述低置信度时改用纯文本描述检索兜底不让图像噪声直接主导召回方向。第三个坑是微小缺陷在降采样后消失。有些起始于0.3毫米级的针孔缺陷在整体图上根本看不出来模型给出的描述里完全没有“缺陷”字样。这就是前面提到的多尺度裁剪要解决的问题——把图像裁成局部小块再推理。一个小技巧是裁块的大小跟着缺陷目标尺寸走先统计已知最小缺陷的像素尺寸再反推裁块比例。5.3 人工复核闭环让系统越用越准整套系统里最不起眼但也最值钱的设计是人工复核闭环。当模型判定结果不确定时界面上会同时展示三样东西原始图像、模型输出的描述、以及检索到的知识卡片。质检员可以直接点选“误报”“漏报”“类别错误”按钮修正结果。质检员修正后的样本不会白白流失而会进入一个“待入库区”。每天会自动生成知识卡片草稿包括修正后的类别、关联的图片、模型生成的理由质量主管审核后就能入库。这样一个周而复始的闭环让系统每个月都在变强。我个人的经验是上线初期不要指望自动准确率一步到位先把人工修正流程做得足够顺滑让一线人员愿意用数据才会回流系统才能进化。6. 部署上线与长期维护算力、版本与数据回流最后聊聊从Demo到产线的最后一公里。许多项目在实验室的测试集上表现很好一到产线就崩问题往往不在模型而在部署策略、更新机制和运维体系。6.1 算力估算与推理加速先把硬性账算清楚。一个70亿参数的开源视觉语言模型用半精度推理权重本身约占14GB显存加上视觉特征、KV Cache和batch内多张图的中间状态单卡24GB基本是门槛。如果产线节拍要求更紧需要动态batch把多件产品凑在一起推理显存占用会进一步上涨。如果预算受限有两条优化路径一是量化把权重从FP16压到INT4显存占用降到8到10GB单卡12GB就能跑代价是准确率会有小幅下降二是拆分部署视觉塔和语言模型放在不同服务里视觉塔的结果缓存复用语言模型只承担最终判定可以降低单次峰值显存。我实测的优化组合是半精度动态batch固定前缀预计算。提示词里的系统指令部分是固定不变的可以提前把对应的KV Cache计算好并缓存推理时直接复用这样能将单件时延再压缩掉约20%。6.2 知识库版本管理与模型更新节奏知识库不是“只增不改”就能高枕无忧的。我把知识卡片当成代码来管理每一张卡片都有版本号和生效时间修改卡片内容时要走审核流程保证已上线车间的判定口径不会突然变化。向量库的同步策略是“增量插入定时全量重建”增量插入适合日常更新全量重建放在凌晨低峰时段执行重建后要跑一遍抽样检索测试确认没有索引异常。模型本身的更新更要加强约束。新模型发布时绝不直接替换线上版本而是在离线环境用历史图片库做一次完整回放跑前面提到的四类指标回归全部达标后才灰度上线。这个历史图片库要在系统上线第一天就开始积累哪怕每天只存几十张修正样本半年后就是一个很有价值的回归集。最后再分享一个经验不要追求“完全自动化”的漂亮指标先把能解释、能修正、能被人工干预的流程跑顺。我见过太多项目死在“想让系统一步到位”的执念上。工业质检的本质不是替代老师傅而是把老师傅的经验沉淀下来让系统替他们干掉大部分重复劳动把他们的精力释放到真正需要人工判断的疑难杂症上。想清楚这一点多模态大模型RAG这套组合才真正找到了它的位置。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑