终检这道工序一直很难标准化:同一块板子,换个人看结论就可能不一样,而且判定依据留在人脑里,事后追不回来。我想做一个全离线、图片不出厂的质检工具——既能出框标缺陷,又能给出一段说得清的成因分析,还要能追溯"当时是谁判的、按什么规则判的"。这篇记录 QA-OCR 的架构与几个关键取舍。
手上只有一张 8GB 显存的笔记本显卡,而且它同时也是我这台开发机在用的卡。这个约束基本决定了后面所有选型:
刻意把两件事拆开,不做端到端的"图进文出"——YOLO 负责确定性的部分(缺陷在哪、是什么类、置信度多少),视觉语言模型只负责解释性的部分(为什么会出现、工艺上怎么改)。这样检测能力可以单独训练和发布,分析能力可以单独换模型,互不牵连。
这张表还说明另一件事:公开数据集上的高分很容易自欺。钢材和 PCB 都接近满分,但那是学术界清洗过的数据;真正要落地时会发现,现场光照、镜头脏污、工件姿态这些"数据之外的变量"才是主因。所以每个场景都留了自定义训练入口。
只有包围盒的质检工具,一线是不买账的——他知道这里有划痕,但他想知道的是是不是上一道工序的刀具该换了。所以每次检测之后都会把结果送进视觉模型做一次成因分析:
提示词按场景动态化(每个场景登记自己的材料与工位描述),新增场景只要在模型表和中文类别映射里加条目,不用改分析流程。
这是我坚持要做、而且认为比模型精度更重要的一块。质检系统只要说不清"这条判定是怎么来的",它在体系上就是不可用的。
原图与标注图按日期分目录留档,追溯接口按检测号一次性把图片、缺陷明细、模型版本、规则快照全带回来。
# 自定义场景 = 四道人工闸,不是"传图就能识别" 1. 上传原始图片 2. 在线框选标注 3. 按 8:2 拆分数据集 4. 保存训练配置 5. 启动训练 6. test 集自动评估 7. 登记为草稿版本 8. 发布后检测接口才认 # 限制:单次 200 张、单张 20MB # 支持 JPG / PNG / BMP / WEBP
标注页支持撤销上一个框、删除最近一个框、以及 Ctrl/Cmd+Z——这种细节不加,标注的人会烦到不愿意用第二次。上传入口只负责采集数据,没有标注的图片进不了训练集,这一点在文档里写死了,免得被误解成"传图即训练"。
这套服务最终会被 MES 或人工工位调用,所以我把异常返回值收敛成一组固定语义,而不是让它抛一堆内部堆栈:
INVALID_IMAGE 图片读不了 / 格式不支持 MODEL_NOT_FOUND 请求的模型 key 不存在 GPU_OOM 显存不足 INFERENCE_TIMEOUT 推理超时 LLAMA_CRASH 分析模型进程挂了 DISK_FULL 留档目录写不进去
语义明确之后,调用方才能写对策略:哪些该重试、哪些该转人工复核、哪些要直接告警。健康检查接口会同时探模型文件、GPU、训练占用和存储可写状态,用一个 ok / degraded 表明服务是否还能承担检测。
本地已经跑通:四场景检测、批量与随机样本、秒级与深度两档成因分析、统计看板与历史导出、在线标注与训练中心、模型/规则/检测三表追溯。下一步三件事——补端子线束场景的真实缺陷样本;把 27B 的深度分析改成异步任务队列(现在会阻塞一次请求十分钟);给规则加灰度机制,新规则先在历史样本上回放,确认不会误杀再上线。
写在最后:这个项目让我改了一个看法。以前觉得质检 AI 的难点在模型精度,做完才发现精度只是入场券——真正决定它能不能在产线活下来的是可追溯、可解释、可回退。判错的代价不是"准确率掉一个点",而是"出了一批不良品却说不清是谁放行的"。
← 返回博客列表