工业质检 · 异常检测实测
25 正常训练 · 42 测试 · WRN50-2 · RTX 5060 Ti · 2026.07
前几篇已经验证模板匹配能把测量点钉到 0.07 像素。定位解决了,下一问更扎心——
件钉准了,缺陷怎么判?
产线往往没有「每类缺陷的海量标注」,只有源源不断的正常件。无监督异常检测(anomaly detection)正是为这个设定准备的:只用正常样本建记忆库,测试时偏离正常的区域就高亮。

结论:在合成金属缺陷集上,PatchCore-lite 达到 AUROC 1.0、F1 1.0,正常/缺陷分数完全可分;推理约 10ms、显存 0.55GB。配合前两篇,可形成「场景粗筛 → 几何精定位 → 异常热力」闭环。

图 1 · 找得到 → 钉得准 → 判得出
① 开放词汇 · 金属 0%
YOLO-World / OWL 场景 100%,裸金属全灭
② RoMa 模板匹配 · 0.07 px
9/9 GT 成功,base 0.27s / precise 1.2s
③ PatchCore 异常检测 · 本篇
只用正常件训练,输出分数 + 热力图
PatchCore 的思路极简:
用预训练 CNN 抽局部 patch 特征 → 只在正常图上建记忆库(coreset 压缩)→ 测试时每个 patch 找最近邻距离 → 距离大 = 异常。
本实现:
项 | 配置 |
|---|---|
骨干 | Wide-ResNet50-2 · layer2+layer3 |
输入 | 256×256 · ImageNet 归一化 |
记忆库 | 原始 25600 → coreset 10% → 2560 |
训练 | 25 张正常(模板 + 位姿/光照抖动) |
测试 | 16 正常 + 26 合成缺陷 |
缺陷类型 | 划痕 / 污渍 / 缺角 / 斑块 / 裂纹 |

图 2 · 正常样本:平移、旋转、缩放、暗光——无缺陷

图 3 · 合成缺陷:划痕、污渍、缺角、锈斑、裂纹
说明:缺陷为合成,用于验证管线与指标闭环。真实产线划痕/氧化纹理更复杂,上线前必须用现场良品 + 不良品复测。合成集的价值是——在零缺陷标注下,方法能不能把「不像正常」的区域揪出来。

图 4 · 图像级 AUROC / AUPR / F1 / Accuracy 均为 100%
指标 | 数值 |
|---|---|
AUROC | 1.000 |
AUPR | 1.000 |
Best F1 | 1.000 @ thr=0.504 |
混淆矩阵 | TP26 TN16 FP0 FN0 |
正常 / 缺陷均值分 | 0.469 / 0.693 |
推理 | 10.1 ms |
峰值显存 | 0.55 GB |

图 5 · 正常(绿)与缺陷(红)分数分布 · 阈值可完美切开

图 6 · 各类缺陷均值分数均明显高于正常基线 0.469
缺陷 | 均值分数 | 相对正常 |
|---|---|---|
划痕 scratch | 0.738 | +57% |
缺角 missing | 0.717 | +53% |
裂纹 crack | 0.670 | +43% |
斑块 blob | 0.663 | +41% |
污渍 stain | 0.659 | +41% |
划痕与缺角拉分最狠——边缘结构被破坏,patch 特征离正常库最远。污渍相对「软」,但仍远高于阈值。

图 7 · 原图 | GT 缺陷 | 异常热力
正常图热力干净、分数 < 0.47;缺陷图在 GT 区域附近出现高响应。遮挡/组合硬例(T8/T9)上,模型仍给出 0.79+ 的高分——说明记忆库对「正常金属外观」的刻画足够稳。

正常模板 · score≈0.42 · 低于阈值

污渍缺陷 · score≈0.82 · 热力对准污斑

T9 组合+划痕 · score≈0.80 · 硬例仍检出
推荐产线流水线
① 场景/工位粗筛:开放词汇或普通检测(自然物体、料盘、工装)
② 零件精定位:RoMa / 模板匹配 → 测量点、位姿、ROI
③ ROI 内判缺陷:PatchCore 类无监督异常 → 分数 + 热力图 → 阈值报警
关键点:异常检测最好在对齐后的 ROI上跑,而不是整图乱扫。RoMa 把件摆正,PatchCore 才更稳——几何与异常检测是搭档,不是替代。
1. 正常库要「够正常、够多样」 位姿、光照、轻微脏污若算合格,训练里要覆盖;否则会被当成异常。
2. 合成 AUROC≠产线 AUROC 本篇 1.0 证明管线与可分性;真实微划痕、反光、油污需现场良品/不良复测。
3. 阈值跟产线走 用验证集扫 F1,或按漏检/误检成本定 thr;本机 best thr≈0.504。
4. 算力不是瓶颈 10ms / 0.55GB,5060 Ti 上可与 RoMa base(~0.27s)串成实时链路。
无监督异常检测让工业质检可以先只收正常件就开工。
本机 PatchCore-lite:AUROC 1.0 · 10ms · 0.55GB,五类合成缺陷全检出。
叠加上之前篇:开放词汇看场景,几何匹配钉坐标,异常热力判缺陷——消费卡上的工业视觉最小闭环,到这里齐了。