检测的三代技术
| 第 1 代 · 基于规则 | 第 2 代 · 监督学习 | 第 3 代 · 正常样本学习 | |
|---|---|---|---|
| 训练数据 | 无(由人设计规则) | 数千张不良图像 + 标注 | 数十~数百张良品图像,无需标注 |
| 从未见过的不良 | 规则中没有就放行 | 对训练时没见过的类型较弱 | 以“与正常不同”检出 |
| 部署周期 | 数周(专家调参) | 数周~数月(收集不良) | 数天 |
制造现场的不良率通常很低。要收集数千张不良图像需要等待很久,而且在收集期间还会出现新的类型。异常检测把这个问题反过来处理:只要让模型充分看过正常样本,偏离正常的一律视为异常。 也有少则从 2~30 张良品图像起步的 few-shot 方式。
通用处理流程
fineAi AD Workbench 的 11 种算法都遵循相同的框架。各算法不同的只有 ③ 和 ④。
PatchCore:正常小块的记忆
PatchCore 精度高,是 AD Workbench 默认推荐的算法。原理出乎意料地简单。
训练:收集正常 patch
- 将良品图像输入用大规模图像预训练的神经网络(WideResNet50-2),取出中间层(layer2、layer3)的特征图。特征图中的一格,就是把原始图像中的一个小块(patch)概括成数字向量的结果。
- 将所有良品图像的所有 patch 向量收集到**记忆库(memory bank)**中。
- 记忆库太大会使检索变慢,因此只挑选能代表整体分布的一部分(coreset 采样)。
不会重新训练神经网络的权重。只是把良品图像过一遍并收集起来,因此训练只需数秒~数分钟即可完成。
检测:与最接近的正常样本之间的距离
- 对新图像用相同方式提取 patch 向量。
- 针对每个 patch,在记忆库中找出**最接近的 k 个正常 patch(k=3)**并测量距离。
- 与正常相似的 patch 距离小;有划伤的 patch 找不到相似的正常 patch,距离就大。这个距离就是该位置的异常度。
- 把各 patch 的异常度放大到原始尺寸并做平滑处理,就得到热力图;把热力图的最大值(或前百分之几的平均值)归一化到 0~1,就是图像分数。
阈值与 Gray 区间
得到分数后,与阈值比较进行判定。降低阈值可以减少漏掉不良的情况(漏检),但把良品判为不良的情况(误判)会增加;提高阈值则相反。这种平衡在 模型评估与现场运维 课程中讲解。
fineAi 使用双阈值。
- 分数低于低阈值为 OK
- 高于高阈值为 NG
- 介于两者之间为 Gray — 由人工确认。
人工对 Gray 图像做出的判定会再次成为训练数据。这是一种运行越久、Gray 越少的机制。
异常检测不太适用的情况
- 正常样本本身差异很大的对象 — 像形状各异的农产品这样“正常”范围很宽时,难以与缺陷区分。
- 需要缺陷名称和位置时 — 异常检测能告诉你“哪里异常”,但不会分类出“这是划伤”。这时请搭配 目标检测 一起使用。
11 种算法中该选哪一种,将在下一课 选择异常检测算法 中讲解。