ARTICLE DETAIL

资讯详情

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

YOLO快筛+Qwen3-VL-Seg精判:产线缺陷检测两级闭环架构实践

YOLO快筛+Qwen3-VL-Seg精判:产线缺陷检测两级闭环架构实践 做过产线视觉项目的人对下面这个场景应该不陌生精度和节拍这笔账永远在打架。我去年落地的一条检测工位第一版用YOLOv8系列的小模型跑FPS能到一百多节拍绰绰有余但表面缺陷漏检率高客户直接在验收单上打回。换成大模型精判精度上来了单张图要推好几秒产线节拍完全跟不上GPU成本也压不住。折腾了半个多月最后定下来的方案就是标题里这个思路YOLO这类小模型做第一级快筛能直接判定的直接放行或拦截拿不准的再交给Qwen3-VL-Seg这类多模态大模型做第二级精判再把每次精判结果回流成小模型的增量训练数据形成闭环。这套两级架构在我这边跑了四个多月漏检率从最初的2.1%压到0.3%以内单工位节拍保在每秒20件以上送大模型的样本占比也从一开始的50%降到了10%以下。这篇文章就把这套闭环架构从设计思路、部署细节到踩坑经验完整拆一遍适合正在做产线视觉质检、缺陷检测方向或者在小模型大模型选型之间纠结的工程师参考。1. 为什么需要两级架构先搞懂小模型和大模型的边界1.1 小模型的尴尬快但不够稳YOLO家族这几年迭代很快从v5到v8再到最新的YOLO11检测速度一直很能打部署也简单一个onnx或者TensorRT就能跑到很高的帧率。我最初在产线上试的是YOLOv8s一张640x640的图在3090上推理时间能到6毫秒以内节拍这块完全没有压力。但真正跑起来才发现工业缺陷检测跟公开数据集上的目标检测完全是两码事。公开数据集里检测对象是人、车、猫、狗类别清晰形态固定。产线缺陷则恰恰相反同一个“划伤”类别在不同光照、不同角度、不同工件材质上看过去千差万别有些缺陷面积小、对比度低在整图里只占几十个像素。YOLO这类anchor-free检测模型对小目标召回本来就不算强再加上缺陷边缘模糊、特征不显著单纯靠它做全量判定要么漏检率抬上去要么误杀率暴涨。漏检和误杀在这里是双输漏一件不良品过去客户那边就是批量退货误杀太多产线良率报表没法交代还得安排大量人工复检。我后来总结了一个判断标准小模型适合处理“类别边界清晰、形态稳定”的缺陷只要你有足够多且多样化的标注数据它可以把绝大多数常规缺陷拦下来。但对那些长尾的、偶发的、描述不清的缺陷小模型只能给你一个置信度给不了确定性。这就像让一位动作快的保安看一眼就放行大多数熟面孔没问题但遇到戴着口罩帽子的人保安就判断不了得请安检组细查。YOLO就是那个保安Qwen3-VL-Seg就是安检组。1.2 大模型的痛点准但上不了产线Qwen3-VL-Seg这类多模态大模型优势在于它不只是做目标框它是真正理解了图像内容之后再做分割和语义判断能把“这是一道轻微划伤但可能是合格品表面的加工纹理”这种上下文判断做出来。这种判断传统检测模型很难实现因为它需要的是全局语义理解而不是局部特征匹配。但大模型上产线的代价很直白速度。我在量化过的Qwen3-VL-Seg上跑单张图端到端推理时间基本在2秒到5秒之间这还是图像分辨率控制在2048以内的情况。如果工位节拍是每秒2件纯用大模型做全量推理就是等死。另外显存占用也相当可观7B参数量级的模型即便量化到INT4推理时也要吃掉6GB以上显存再加上图像编解码和并发队列一张3090只能同时跑两路推理。你要是把所有产品都过一遍大模型光GPU采购成本就能让项目黄掉。所以在产线上大模型的定位不是一个“全量推理引擎”而是一个“仲裁者”。它只在需要的时候出现处理小模型搞不定的那一小撮样本。这样既保住了节拍也保住了精度还控住了硬件成本。1.3 闭环架构的核心思路快筛、精判、回流这套架构的核心是用算力分级解决成本与精度矛盾。第一级YOLO快筛目标是把占总量绝大多数、形态常规的样本快速判定掉只留出那些置信度暧昧、多目标冲突、低分目标扎堆的样本送第二级。第二级Qwen3-VL-Seg精判负责对可疑区域做精细分割和语义理解输出最终良品/不良品结论。这里的关键不只是“两级模型串起来”而是三级联动快筛、精判、回流。精判结果不能白算必须回填到数据库里定期用这些新标注样本去增量训练第一级的YOLO让越来越多的“曾经拿不准”变成“直接判定”。系统在产线运行过程中持续自我优化这才是这套架构最大的价值。我梳理一下数据流相机出图进YOLO快筛低风险样本直接判定高风险样本进缓存队列Qwen3-VL-Seg精判高危样本抓出并复检判定结果入库定期清洗数据增量训练YOLO更新快筛模型。整个循环跑起来之后快筛模型的准确率会肉眼可见往上涨需要送大模型的样本比例也会逐渐降下来节拍和成本都能持续改善。后面数据积累到一定程度你还能拿这些回流样本去微调大模型本身让它在特定工件上的判断更贴合现场。这个我留到第四节讲先看第一级的YOLO怎么落地。2. YOLO快筛层选型、训练与推理优化2.1 环境配置与模型选型YOLO这块我直接用了ultralytics那套框架它把训练、验证、导出封装得很干净省掉很多造轮子的时间。环境建议用Anaconda单独建一个虚拟环境Python版本选3.10PyTorch版本跟CUDA版本对上号。千万别在全局环境里乱装包YOLO的依赖跟其他项目的opencv版本经常冲突我见过有人装完YOLO把系统里另一个人脸识别服务搞挂的事故。conda create -n yolo python3.10 -y conda activate yolo pip install ultralytics pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118装完先跑一个yolo predict sourcebus.jpg验证环境通不通再开始干正事。选型上我的建议是别一上来就上YOLOv8n。n网络确实快但工业场景下精度基线太低尤其是小目标缺陷n的C2f模块特征表达不够漏检率很难压下去。我在实际项目中比较过v8n、v8s、v8m三个规模同一个数据集训练200轮v8s的mAP比v8n提升大约4到5个点推理时间只多1到2毫秒性价比最高。v8m精度更好但推理延迟翻倍除非你的缺陷特别隐蔽否则不太推荐。最新的YOLO11也可以试试部分场景下比v8s略好但项目已经有v8模型在跑的话没必要为了版本号升级稳定压倒一切。2.2 数据标注与训练参数数据是这套系统的地基。YOLO训练用的标注格式是每个目标一个txt一行是class x_center y_center width height都是归一化坐标。整理标注规范时我给标注员定了硬性约束缺陷框必须紧贴缺陷实际轮廓宁可多留两三个像素不要把大面积正常区域包进去每个缺陷类别定义要写死不许一个人一个理解划伤就是划伤压痕就是压痕混着标模型会学到错误特征。训练参数方面数据集再小也建议优先用官方预训练权重做初始权重别从零训练。预训练模型已经在COCO上见过大量自然图像特征工业场景虽然域不同但底层纹理、边缘特征是可以迁移的。从零训练的话小样本数据撑不住那么大的参数量很容易过拟合。有个容易被忽略的点imgsz。工业质检图普遍分辨率高动辄3000x3000直接resize到640会丢掉大量小目标细节。我建议训练时就按1280甚至1536的分辨率配合mosaic增强和多尺度训练让模型真正学到小缺陷的细节。代价是显存占用上涨batchsize要跟着调小。推理导出时同样用1280分辨率不能训练一个尺寸、推理另一个尺寸。2.3 损失函数与置信度门限YOLOv8的损失函数是一套组合分类用BCE回归用CIoU加DFL。CIoU和DFL解决的是框的定位精度问题DFL把框回归从直接回归绝对坐标改成回归离散分布对小目标的框定位有明显帮助。如果你改动模型结构这套损失别乱动动坏了定位精度直接崩。置信度门限是个容易被忽视但极其关键的参数。很多人训练完直接默认conf0.25在工业场景这就是漏检的来源。你要做的不是问“阈值设成多少”而是去翻验证集上的PR曲线看哪个置信度能把误杀率控在可接受范围同时召回率还能保住。我这边最终把快筛门限设在0.45左右同时加了个兜底逻辑只要整图里出现置信度在0.15到0.45之间的模糊框一律上送精判而不是直接丢弃。这个策略救了很多漏检。推理侧还有一个细节导出模型时一定确认NMS参数。YOLO默认NMS的IoU阈值是0.7如果产线上缺陷靠得近、有重叠0.7会导致两个独立缺陷被合并成一个造成漏检。我这边压到0.45宁可多出框也不合并缺陷。快筛层的输出不只是判定结果每个框的坐标和置信度都要完整暴露给下游后面大模型精判全靠这些框做裁剪。3. Qwen3-VL-Seg精判层部署与联动3.1 为什么选Qwen3-VL-Seg精判层选Qwen3-VL-Seg最核心的原因是我需要一个“开着视觉还能玩语义判断”的模型。它不光是帮我把目标切出来还能在切出来之后回答这个东西到底算不算缺陷举个例子有一种拉丝纹理跟真正的划伤长得几乎一样YOLO看到就是一个框但Qwen3-VL-Seg能够结合纹理方向、延伸范围、与周边环境的对比判断这是工艺允许的拉丝还是不该出现的划痕。这类语义级判断传统CNN做不到。如果你团队环境里没有直接用Qwen3-VL-Seg的条件换成其他具备视觉理解与分割能力的多模态大模型也行。比如把SAM分割出的掩码结果喂给Qwen-VL做语义判定实现路径是类似的。但第二级模型必须满足两个条件能理解上下文语义能输出区域级目标而不是仅仅一个框。3.2 推理服务部署要点部署大模型跟部署YOLO完全是两码事。YOLO一言不合就转onnxCPU都能跑。Qwen3-VL-Seg这类多模态模型建议单独起一个推理服务用API方式对外提供不要跟主检测进程混在一起。主检测进程要求低延迟不能因为大模型推理卡住就拖垮整条检测流水线。部署方案我一般这么做以下三种方式可以根据硬件条件选部署方式显存要求吞吐表现适用场景原生transformers加载FP1616GB以上低并发能力弱调试和验证阶段AWQ/GPTQ量化 vLLM8GB以上高支持并发批处理正式产线首选GGUF INT4 llama.cpp6GB以上中等胜在部署简单边缘机器或显存吃紧的场合图片输入有个容易忽略的细节。工业相机出的原图可能是几MB的大图塞给大模型之前必须先裁剪只送可疑区域的局部图分辨率统一压到1024左右。YOLO给的是框坐标用这个坐标在原图上扩边裁出来再送Qwen3-VL-Seg既省显存又减少无关背景干扰。这里的扩边比例我习惯取1.2到1.5倍把缺陷周边的纹理信息也带进去大模型判断时参考上下文更充分。3.3 联动逻辑从快筛到精判两级之间的联动我设计成一个带缓存队列的异步架构。YOLO推理完把每个框的置信度、类别、坐标写进队列主线程不等待大模型直接进入下一张图的推理。另一个独立进程消费队列拉取模糊样本后调大模型接口。这样YOLO的吞吐不会被大模型拖垮。这里有个现实问题缓存队列会不会堆积要控制大模型的输入水位不能让送进去的样本越积越多。我给队列设了最大长度比如2000一旦超出自动把低优先级样本丢弃同时告警。极端突发情况下丢弃难免但总比整条流水线堵死强。大模型返回结果也需要归一化处理。Qwen3-VL-Seg输出的是自然语言描述加分割掩码你得解析成标准判定结果映射到“合格、不合格、人工复检”三档再跟YOLO的结果合并。合并逻辑不复杂YOLO判定低风险的直接信赖YOLOYOLO判定高风险的以大模型结论为准。两边都说没问题放行大模型说不合格拦截。关键是这个判定结果必须落到数据库里后面回流要用。4. 闭环数据回流让系统越用越准4.1 数据回流机制这一节是整个方案的精髓。第一版系统上线时YOLO的精度只能覆盖六成样本剩下四成要靠大模型兜底。随着时间推移你手里会积累大量“有大模型结论”的样本这些就是最好的标注数据。我的做法是每天夜里做一次增量导出把当天所有大模型精判过的样本连同它的框坐标、掩码、判定结论导出成YOLO训练格式的标注文件加上原始图像放到一个独立的“回流数据集”目录。导出前要做一次去重两张完全一样的图不要重复标。然后每周做一次增量训练只用新增的这部分数据微调YOLO学习率放低训练轮数控制在50轮以内防止过拟合。这样跑一个月你会看到送大模型的样本占比一路往下掉。我这里的实测数据第一周大概50%一个月后稳定在19%三个月后只要9%。精度没有掉节拍和成本反而在改善这是闭环架构最值钱的地方。4.2 小模型持续优化增量训练YOLO时有几件事必须盯紧。第一新旧数据比例不能失衡。如果增量数据只有500张历史数据有一万张直接混合训练会把新知识稀释掉。我一般固定每次拿过去两周的回流样本控制在三千到五千张跟历史数据按1:2混合。第二别把上一版权重丢了。保留两个版本做对比验证万一新模型上线后退化能快速回滚。第三上线前一定跑一遍历史黄金测试集也就是那些出现过严重漏检的样本确保回归测试全过。如果回流数据积累得够多还可以考虑数据蒸馏思路把大模型对每个样本输出的详细解释也存下来训练小模型时不仅用掩码标签还把大模型的分析文本当作辅助监督信号。这个做法对提升小模型在长尾缺陷上的感知能力很有帮助相当于把大模型的“见识”慢慢灌输给小模型。4.3 大模型精调与提示词设计大模型侧我不建议一上来就做全局微调。Qwen3-VL-Seg本身的通识能力很强工业场景缺的是领域知识不是语言能力。最高性价比的做法是提示词工程加少样本上下文。我用的系统提示词大致这样设定明确角色是产线质检员列出可判定的缺陷类别和判定标准强调“模棱两可的纹理或瑕疵如果无法确定则返回需要人工复检”严格禁止过度判定。上下文里还会附带几个标准样例图合格品和典型缺陷各放一两张让大模型知道参照什么标准判断。只有当你发现提示词怎么调都不准反复出现同一类型语义误判时才考虑做轻量微调。微调数据来自回流库里的人工确认样本量级三四千张足够用LoRA方式去做别全参数调。全参数微调7B模型光是显存卡位和训练稳定性就够折腾一个月LoRA半天就出结果产线上效果足够用。5. 常见问题与排查技巧实录5.1 产线上的典型坑我列几个真实踩过的坑都是文档里不会写的东西。第一个是GPU显存抖动。YOLO和大模型推理服务在同一台机器上跑大模型偶尔触发一次长上下文生成显存瞬间飙升YOLO这边直接OOM。解决方案是把两个服务物理隔离YOLO用一张便宜卡大模型独占另一张或者共享GPU时把显存限制写死。第二个是图像色彩空间差异。工业相机有些输出不是标准sRGB偏色严重。YOLO对偏色还算钝感大模型对色彩特别敏感稍微偏色缺陷分类就乱。我这边在预处理管线里加了色彩校准每个相机做一次白平衡和伽马校正标定数据存档换相机必须重新标定。第三个是厂房光照变化。灯管老化、天光变化都会导致成像明暗波动。YOLO可以通过多亮度样本增强扛过去大模型不行亮度一变判断置信度就一路跌。我最后加了自动曝光补偿模块在送大模型之前把局部patch再归一化一次问题才稳住。5.2 排查思路遇到系统异常我的排查顺序是先看队列水位再看GPU利用率最后才看模型输出。队列水位持续走高说明大模型吞吐跟不上优先查它GPU利用率忽高忽低说明数据加载或者预处理卡了去查IO和图像解码模型输出开始大面积出错才轮到调模型这时候多半是数据分布变了该刷回流数据集了。这里有个通用场景速查表可以帮你快速定位问题现象优先排查方向常见根因队列持续积压大模型服务吞吐量化等级不够、并发设置过低、GPU被占用YOLO偶尔OOMGPU显存分配大模型显存抖动、未做显存隔离缺陷误判激增预处理链路偏色、光照变化、图像压缩过狠回流训练后精度下降数据集配比新旧数据失衡、质量脏数据混入5.3 避坑技巧汇总最后汇总几个独家经验。第一大模型推理结果一定要带版本号模型升级后历史数据里新旧结论要能区分否则回流数据就脏了小模型会被新旧标准互相干扰。第二所有精判样本的原始大图要完整归档不要只存裁剪后的patch后面做数据集清洗、调试提示词时原图里往往藏着关键线索。第三定期抽检大模型的判定一致性把同一张图丢进去两次如果结果不稳定说明模型对当前场景的记忆偏弱要么做一次微调要么在提示词里增加典型样例。还有一个容易被忽略的点产线上的合格品也要回流。很多项目习惯只存缺陷样本但YOLO对合格品的过杀率恰恰需要靠大量正常样本才能压下去。我这边每次回流都强制按比例混入正常品占比至少三分之一保证快筛模型不要越学越“敏感”把良品当成缺陷误杀。这套两级闭环架构跑到现在我最大的体会是别迷信单一模型也别迷信“参数越大越先进”。小模型和大模型从来不是替代关系而是配合关系。你把YOLO放到它该在的位置做快筛把Qwen3-VL-Seg放到它该在的位置做精判再用数据回流把两个位置之间的缝隙补上产线上的精度、节拍、成本才能同时要。最后再分享一个小技巧这套架构上线前先拿历史缺陷库里的最难样本做一次压力测试把所有当年漏检的图挨个喂给新的级联系统统计最终漏检率。只要这个指标能压到目标线以下再上产线基本就不会翻大车。
返回列表