一、开头:从60%开始
先说实话。
我们的视觉系统,在临沂本地两个真实客户那里,一开始的识别率只有60%左右。
不是算法不行。LightGlue是顶级的,我们的技术栈也没问题。
问题出在一个所有工业AI都会遇到的坎上:模型不认识客户的产品。
你拿再好的模型过来,它没见过浸胶纸的纹理,没见过玻璃的反光面——它就是认不出来。
这不是算法的错,这是“没见过”的问题。
而我们的解法,不是换一个更强的模型,而是建立一套机制,让模型在客户的使用过程中,自己学会认识客户的产品。
这套机制,我们叫它“数据飞轮”。
二、我们的系统能做什么?
在展开讲飞轮之前,先说说这套系统的能力边界。
物体识别、图形分类、缺陷检测、纹理分割……这些基础的视觉任务,我们的系统都能做。
但这篇文章里,我只讲最难的——子图检测(也叫模板匹配、样图定位) 。
什么是子图检测?给一张样图(比如某个产品的局部纹理、LOGO、特征区域),在一张大图里找到它的位置,并返回精确的坐标和置信度。
这个任务比单纯的分类要难得多:
| 挑战 | 说明 |
|---|---|
| 尺度变化 | 样图可能被放大或缩小 |
| 旋转变化 | 产品摆放角度不固定 |
| 光照变化 | 车间光线、阴影、反光 |
| 部分遮挡 | 产品堆叠、边缘被切 |
| 形变 | 柔性材料、曲面产品 |
| 背景干扰 | 复杂纹理、相似图案 |
| 实时性 | 产线要求毫秒级响应 |
为什么只讲最难的?因为最难的我都能搞定,简单的自然不在话下。
整个视觉任务从易到难的排序是这样的:
| 任务 | 说明 | 难度 |
|---|---|---|
| 物体分类 | 识别“这是什么” | ⭐⭐ |
| 目标检测 | 框出物体的位置 | ⭐⭐⭐ |
| 图像分割 | 像素级提取轮廓 | ⭐⭐⭐ |
| 缺陷检测 | 识别划痕、脏污、破损 | ⭐⭐⭐ |
| 子图匹配 | 给定样图,精确定位 | ⭐⭐⭐⭐⭐ |
子图匹配是整个视觉任务里最难的一类。我们的系统已经把这个难关攻克了,其他任务自然不在话下。
三、飞轮的第一推动力:让标注成为工作流的一部分
很多AI项目的瓶颈是标注。
专门找人标注,成本高、效率低、质量差。客户不愿意干。
我们的思路是:不让客户“帮我们标注”,而是让客户在完成自己工作的同时,“顺便”把标注做了。
操作员每天的工作就是“对样”——看一个产品是不是和样图匹配。
匹配上了,点一下确认。没匹配上,拖个框框出来,告诉系统“是这个”。
就这么简单。
一次操作,完成了两件事:
- 完成了当天的检测任务
- 为系统贡献了一条高质量的标注数据
一次人工确认,就是一次高质量标注。一次人工纠正,就是一次模型“特训”。
客户不是在帮我们干活。他们是在干自己的活,顺便让系统变聪明。
两个临沂客户,6个月,累计贡献了3000+张标注样图。 这些数据,就是飞轮的燃料。
四、飞轮的加速器:主动学习筛选高价值样本
不是所有数据都值得训练。
有些图片模型本来就能认对,训练它也没用。有些图片模型永远认不对(比如拍糊了的),训练它反而有害。
我们设计了主动学习机制。
系统会自动筛选那些“犹豫不决”的样本——相似度在0.4-0.6之间的。
这些样本,模型“好像认识,又不太确定”,恰恰是最有训练价值的。
系统把它们挑出来,优先请求人工确认。
每一条标注,都用在刀刃上。
五、反例与难例——模型成长的“教练员”
数据分成两种:正例(这是样图)和反例(这不是样图)。
大多数系统只关注正例。但我们的经验是:反例的收集和利用,往往比正例更能提升模型的鲁棒性。
为什么?
因为模型“乱认”比“认不出”更致命。认不出,大不了人工看一下;乱认,会导致漏检和误判,影响生产。
第一类:难例——让模型“知错能改”
当模型对一张图片“犹豫不决”(相似度0.4-0.6),系统自动标记为难例,优先请求人工确认。
人工确认后,这条数据进入难例库,用于下一轮训练。每一次人工纠正,都是对模型的一次“特训”。
案例:临沂某玻璃厂的“反光面”问题,就是通过收集了40多个难例、经过2轮针对性微调后,基本解决的。
第二类:反例——让模型“知道什么不是”
很多时候,模型会“瞎匹配”——把完全不相关的东西认成样图。
我们的客户端有一个 “反例”按钮,当操作员发现模型认错了,可以一键提交。
反例告诉模型:“这个东西不是我们要找的,下次别再认错了。”
注意:反例只在客户端主动提交时才保存。我们不会在检测过程中自动保存,因为那可能会把真正的新产品误标成反例。
两种机制的区别:
| 类型 | 作用 | 来源 | 举例 |
|---|---|---|---|
| 难例 | 让模型“学会”困难样本 | 系统主动筛选 + 人工确认 | 反光面、倾斜角度、遮挡情况 |
| 反例 | 让模型“学会拒绝” | 客户端主动提交 | 完全不同的产品、背景干扰物 |
实际效果:玻璃厂的误检率从15%降到3%,操作员反馈“现在基本不会有‘瞎认’的情况了”。
六、飞轮的心脏:自动训练 + 自动部署
数据积累起来了,谁来训练?多久训练一次?怎么部署?
我们的方案:全自动。
后台有一个AutoTrainManager,每天晚上22:00自动检查:
- 数据量够不够?
- 有没有新标注?
- 模型需不需要更新?
如果需要,它就自动启动训练。
训练在3060 GPU服务器上完成。一个微调周期大概1-2小时。
训练完成后,系统会自动评估新模型:
- 用测试集跑一遍
- 对比新旧模型的各项指标
- 只有新模型全面优于旧模型,才会被部署
如果新模型效果下降,系统会自动回滚到之前的版本。
整个过程,客户无感知。他们只会在第二天发现:昨天还认错的图片,今天突然认对了。
七、两个临沂客户的数据飞轮
客户A:临沂某浸胶纸厂
| 阶段 | 时间 | 做了什么 | 识别率 |
|---|---|---|---|
| 初期 | 第1个月 | 当图库用,上传样图 | — |
| 起步 | 第2-3个月 | 从最简单的一款产品开始比对 | 60% → 75% |
| 深入 | 第4-5个月 | 逐步增加产品品类 | 75% → 85% |
| 当前 | 第6个月 | 持续标注难例,系统自动训练12轮 | 85% → 92% |
累计贡献标注:约1800张
客户反馈:“比刚买的时候准多了。现在基本不用人看了。”
客户B:临沂某玻璃加工厂
| 阶段 | 时间 | 做了什么 | 识别率 |
|---|---|---|---|
| 初期 | 第1个月 | 当图库用,上传样图 | — |
| 起步 | 第2个月 | 从光滑面产品开始 | 58% → 70% |
| 深入 | 第3-4个月 | 攻克反光面难题,收集40+难例 | 70% → 82% |
| 当前 | 第5个月 | 持续标注,累计200+反例 | 82% → 88% |
累计贡献标注:约1200张
客户反馈:“反光的问题基本上解决了。之前经常误报,现在很少了。”
两个客户,6个月,累计3000+张标注,自动训练20轮,识别率平均提升25个百分点。
八、商业模式:风险共担,成果共享
我们的收费模式,和传统软件公司不一样。
传统模式:客户付全款 → 我们交付软件 → 效果好不好看运气。客户承担全部风险。
我们的模式:
- 客户付初期款:金额不高,买一个“能用的系统 + 数据积累机制”
- 客户先当图库用:先上传样图和原图,零门槛上手
- 从简单比对开始:让客户先看到价值,建立信任
- 一点点深入:随着数据量增加,模型逐步覆盖更难的场景
- 识别率达到95%后收全款:风险共担,结果导向
为什么敢这么承诺?
因为两个临沂客户的飞轮已经证明了:只要数据在积累,识别率就一定会提升。
九、不止于两个客户:我们正在构建跨行业的视觉认知平台
两个客户,两个不同的行业,都在临沂,同一套机制,都在变好。
这不是巧合,这是方法论的可复制性。
我们的野心不止于此。我们正在做的,是为每一个行业建立专属的视觉图库:
├── 浸胶纸行业(临沂)/
│ ├── 样图库:1800+张
│ ├── 难例库:XX个
│ ├── 反例库:XX个
│ └── 识别率:92%
├── 玻璃加工行业(临沂)/
│ ├── 样图库:1200+张
│ ├── 难例库:40+个
│ ├── 反例库:200+个
│ └── 识别率:88%
├── 五金件行业/
│ ├── 样图库:进行中
│ └── 目标识别率:80%起步
└── ...(未来扩展)
未来的平台架构:
一个通用视觉基座模型,各个行业有自己的分支模型。
新客户进来,只需要说“我是哪个行业的”,就能拿到该行业的专属模型,识别率80%起步。
剩下的20%,由客户自己的数据飞轮完成。
这个平台的价值:
- 对新客户:开箱即用,不用从零开始
- 对老客户:同行业其他客户的数据,也会间接提升本厂模型
- 对我们:客户越多,平台越强;平台越强,越吸引新客户
- 对临沂本地:形成区域性的工业视觉数据壁垒
十、硬件配置
| 组件 | 型号/规格 | 说明 |
|---|---|---|
| 工业相机 | 海康800万像素 | GigE Vision协议,长距离传输稳定 |
| 客户端 | i5/8GB/无独显 | QT界面,显示、标注、检测 |
| 服务端 | RTX 3060 | 模型推理 + 自动训练 |
| 网络 | 千兆局域网 | MQTT + HTTP 通信 |
十一、系统架构总览
┌─────────────────────────────────────────────────────────────────────┐
│ 工业AI视觉系统架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 海康工业相机 │ ───▶ │ QT客户端 │ ───▶ │ Python服务 │ │
│ │ 800万像素 │ │ - 显示图像 │ │ - LightGlue │ │
│ │ GigE Vision │ │ - 拖拽标注 │ │ - 特征匹配 │ │
│ │ │ │ - 对样检测 │ │ - 结果返回 │ │
│ │ │ │ - 反例提交 │ │ │ │
│ └──────────────┘ └──────┬───────┘ └───────┬──────┘ │
│ │ │ │
│ │ MQTT/HTTP │ 训练数据 │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ │ │ GPU服务器 │ │
│ │ │ RTX 3060 │ │
│ │ │ - 模型微调 │ │
│ │ │ - 版本管理 │ │
│ │ │ - 自动部署 │ │
│ │ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 行业图库池 │ │
│ │ - 浸胶纸 │ │
│ │ - 玻璃加工 │ │
│ │ - 五金件 │ │
│ │ - ... │ │
│ └──────────────┘ │
│ │
│ 🔄 数据飞轮:使用 → 标注 → 训练 → 部署 → 更好用 → 更多使用 │
└─────────────────────────────────────────────────────────────────────┘
十二、技术亮点总结
| 机制 | 作用 | 当前数据 |
|---|---|---|
| 主动学习 | 自动筛选高价值样本 | 自动筛选难例,优先人工确认 |
| 难例库 | 针对性训练,攻克疑难场景 | 玻璃厂反光面问题,40+难例 → 误检率15%→3% |
| 反例管理 | 降低误检率,让模型学会“拒绝” | 累计200+反例,客户端主动提交 |
| 自动训练 | 每周/每日自动微调 | 客户A12轮,客户B8轮,总计20轮 |
| 版本管理 | 新模型评估、自动回滚 | 保证线上稳定性 |
| 数据飞轮 | 越用越准,形成壁垒 | 两个临沂客户验证有效 |
| 标注总量 | 3000+张 | 6个月,两个客户累计 |
十三、一个补充说明
可能有读者会问:你们只做样图匹配吗?
不。
我们的系统底层是LightGlue + 自研训练框架,这套能力可以支撑多种视觉任务:
- 需要分类?可以
- 需要检测?可以
- 需要分割?可以
- 需要缺陷检测?可以
我们之所以重点讲子图匹配,是因为它是整个视觉任务里最难的一类。一旦把最难的问题解决了,其他任务就是技术降维。
用一句大白话说:我能做奥数题,自然也会做加减法。
十四、这不是终点
两个临沂客户的数据飞轮已经在转了。
他们的使用频率在增加,标注数据在积累,识别率在提升。
3000张标注只是开始。随着客户使用深入,这个数字会变成5000、10000。每一张新标注,都会让模型再聪明一点点。
我们的平台也在扩展。每个新行业进来,一开始也是60%起步。但只要数据飞轮转起来,它就会自己加速。
我们的目标不是做一个完美的模型。
我们想建一个“越用越聪明”的生态系统。
每一家客户都在为这个系统添砖加瓦,同时也从系统中获益。
这是一个别人很难复制的东西。
因为数据积累需要时间,时间追不上。
因为网络效应一旦形成,迁移成本极高。
因为两个临沂客户的飞轮已经证明了:这条路走得通。
最后,用客户的话收尾:
“比刚买的时候准多了。现在基本不用人看了。”
这就是我们想要的——不是做一个完美的演示,而是让真实客户,在真实产线上,看到真实的效果。
(全文完)