首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >定位之后,怎么判缺陷?PatchCore 在金属条上的无监督异常检测

定位之后,怎么判缺陷?PatchCore 在金属条上的无监督异常检测

作者头像
javpower
发布2026-07-27 14:21:38
发布2026-07-27 14:21:38
1220
举报

工业质检 · 异常检测实测

定位之后,怎么判缺陷?

PatchCore 在金属条上的无监督异常检测

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 在做什么

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,五类合成缺陷全检出。

叠加上之前篇:开放词汇看场景,几何匹配钉坐标,异常热力判缺陷——消费卡上的工业视觉最小闭环,到这里齐了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 定位之后,怎么判缺陷?
    • PatchCore 在金属条上的无监督异常检测
      • 一、三部曲到哪一步了
      • 二、方法:PatchCore 在做什么
      • 三、数据长什么样
      • 四、硬指标
      • 五、分缺陷类型
      • 六、真实热力图
      • 七、和之前的篇章怎么拼
      • 八、落地注意
      • 九、小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档