缺陷检测AI关键点在哪

用 AI 做缺陷检测,关键点到底在哪?------从一次「公开数据集翻车」说起

三句话看懂今天:

  1. 用 AI 做缺陷检测,真正决定「能不能检得出」的,是数据处理,不是算法,也不是把模型塞进板子。
  2. 我们拿一个出名的公开超声数据集训缺陷二分类,AUC 只有 0.52~0.63------跟瞎猜一个水平。
  3. 换成「真实噪声 + 物理缺陷回波」的半仿真路线后,AUC 直接到 0.976 ,一个 110KB 的小模型做到 93.5% 准确率,还顺带拿到了能对外讲的 POD 曲线。

一、翻译器:先解决「这词儿啥意思」

技术词 说人话 本文里它干什么
缺陷检测 AI 让机器自动看/听出来东西坏没坏 本文讨论的核心:这类项目的关键点到底在哪
公开数据集 别人录好、标好的一堆样本 我们第一次尝试的数据来源,结果翻车了
AUC 猜硬币(0.5)到火眼金睛(1.0)之间 衡量「能不能分开好坏」的核心指标
半仿真 真的环境录音 + 合成的说话声 真实噪声背景 + 物理模型算出来的缺陷回波
标签 / 标注 标准答案 决定模型学不学得对,比模型本身更致命
RK3568 NPU 一块便宜的边缘计算芯片 我们把模型部署上去实测的那块板子
POD 曲线 多大的毛病有多大概率被抓到 超声领域的标准验收方式,不是我们自己发明的

二、先抛结论:数据处理才是关键

一句话:算法是货架上的货,部署是把货送到现场的车,只有「数据里有真信号、标签是真」这件事实实在在长在土里。

很多人(包括我一开始)会本能地把注意力放在两端:

  • 一端是「模型够不够花」------ ResNet?Transformer?要不要上预训练?
  • 一端是「能不能上板」------ 量化、NPU、实时性、功耗。

但我们在超声缺陷检测这个项目里,从头到尾最大的卡点、最关键的转折、最值钱的经验,全在**中间那段没人爱聊的「数据处理」**上。

下面用我们项目的真实数字,把三个阶段摆在一起比一比。


三、三阶段关键度对比

柱高 = 对「能不能检出缺陷」的决定性。

阶段 对结果的决定性 我们的真实情况 一句话定性
数据处理 ★★★★★ 决定生死 真实数据 AUC 0.52 → 半仿真 0.976;标签 100% 精确 关键·决定生死
算法训练 ★★★ 重要但可商品化 小 CNN 跑 30 轮即 93.5%,架构不是瓶颈 重要·可商品化
部署板子 ★★ 必要但下游 RK3568 NPU 1.16ms/条(861 条/秒),与 PC 一致率 100% 必要·下游通道

3.1 数据处理:决定生死

这是整篇文章最想讲清楚的一点。

我们第一次拿到的,是超声领域最出名的公开数据集之一(相控阵 FMC 全矩阵,256×256×100 的 UInt16)。

先花大力气把数据弄下来(直连被墙、限速,最后靠 API 分段续传),然后做探查,结果触目惊心:

复制代码
把扫描按「有无缺陷」分组,逐条归一化后比差异:
轴 0(256 点):组间平均差异 0.6%,最大 3.3%
轴 1(256 点):组间平均差异 1.7%,最大 7.2%
相邻行相关系数:-0.035    相邻列相关系数:0.102
16×16 收发矩阵:对角线能量 / 非对角线能量 = 0.87

把能想到的 A 扫合成方式全试了一遍,AUC 全在 0.48~0.63 之间。0.5 就是瞎猜。

为什么会这样?三个硬伤:

  1. 形态根本不是 A 扫。它是收发组合矩阵,是相控阵原始采集数据,不是工人屏幕上的那条波形。
  2. 缺陷回波被相位抵消了。FMC 是「每个阵元发射、所有阵元接收」,缺陷回波到达各阵元时间不同,直接相加波峰对波谷、互相抵消。要聚焦得做 TFM,但数据里没有几何参数。
  3. Clever Hans 风险。那个数据集的缺陷是「虚拟缺陷」叠加上去的,模型可能学到的是拼接痕迹而非缺陷本身。

这一步如果硬扛过去,后面就是「部署一台猜谜机器」。

转折点出现在我们换路线:半仿真------真实噪声纹理(从那个公开数据集里取,但只取噪声背景)+ 物理公式注入缺陷回波。

python 复制代码
背景噪声  ← 从实测数据取,保留真实材料晶粒散射纹理
缺陷回波  ← 按物理模型注入,位置 = 2d/c,幅值 ∝ φ²/d
始波/底波 ← 按声程摆到对应采样点

因为缺陷是我们自己按公式放进去 的,位置、深度、尺寸 100% 知道 → 标签 100% 精确。这一步,是整个项目真正的分水岭:AUC 从 0.52 跳到 0.976。

没有这一步,后面一切免谈。

3.2 算法训练:重要,但可商品化

模型本身我们用了个很小的 CNN(4 个卷积块 + 全局池化 + 两层全连接),没有任何花哨架构。

训练 40000 条、30 个 epoch,CPU 上约 2 分钟训完:

指标 数值
准确率 93.48%
AUC 0.9764
缺陷召回率 91.31%
精确率 95.38%
模型体积 110 KB

我的判断很直白:这类「波形/信号二分类」,现成卷积网络就够了,架构不是护城河。 真正拉开差距的,是喂进去的数据有没有真信号、标签真不真。算法是「谁都能请到的标准化工人」。

3.3 部署板子:必要,但属于下游

这一步我们也实打实做了------把模型转到 RK3568 的 NPU 上真机跑:

环节 结果
PC 推理(onnxruntime) ✅ 0.068 ms/条,14651 条/秒
ONNX → RKNN 转换 ✅ toolkit2 1.5.0,FP16,77.6 KB
RK3568 NPU 推理 ✅ 1.16 ms/条(861 条/秒)
端到端(含取数) ✅ 1.20 ms/条(836 条/秒)

板端 1000 条独立测试集:准确率 93.3%,与 PC 端逐条比对一致率 100%,logits 平均误差仅 0.22%------证明转换没搞坏模型。

但必须说清楚:部署再快,模型是瞎猜也没用;模型对了,部署慢点也能迭代。部署是把已经能检出的模型接通到边缘端,属于「交付通道」,不是「决定能不能检出」的环节。

(顺带一个坑:RKNN 1.5.0 拒「某一维特别小」的输入,最早想用 (1,1,1,256) 被拒,最后把 256 点每点重复 4 次铺成 32×32 正方形图才过。这是工程细节,不是认知层面的关键点。)


四、用我们那个超声项目当证据(小结)

把上面三段的证据压缩成一条时间线:

复制代码
拿真实公开数据训  →  AUC 0.52(瞎猜)  →  项目不成立
换半仿真数据      →  AUC 0.976(火眼金睛)→  项目活了
小 CNN 训 30 轮   →  93.5% 准确率        →  架构无巧思
部署到 RK3568 NPU →  1.16ms/条、861 条/秒 →  工程搞定

注意看:决定这个项目生死的,是第 1→2 步那一下「数据换路」。第 3 步和第 4 步,是「数据对了之后顺理成章的事」。


五、一个重要的 nuance:关键点 = 当前最大的瓶颈

别把「数据处理是关键」记成绝对真理。更准确的说法是:关键点 = 当前最大的瓶颈在哪。

  • 你这种「非标准传感器 + 弱信号」的工业缺陷场景(超声、振动、声学、某些红外):数据几乎永远是瓶颈。真实信号弱、标注贵、分布乱,数据处理(含数据生成、标注、分布对齐)就是生死线。
  • 图像分类 / 常见视觉(数据海量、标签易得):算法架构 + 部署延迟/功耗会更决定性。
  • 要上线卖钱的产品:部署的实时性、可靠性、成本就是生死线------模型再准,跑不动、贵到用不起,也上不了市。

所以这篇文章的结论不是「数据永远第一」,而是:先找到你这个项目当前最卡的那一环,把资源砸在那。 而我们这个超声缺陷项目,从头到尾最卡的就是数据。


六、给工程师的三条实操建议(都是踩出来的)

  1. 先花 20% 精力验证「数据里到底有没有可学的信号」,再花 80% 搭模型。我们复算过:真实数据缺陷组和正常组差异 <2%,直接训就是白干。一个「分组对比 + AUC 探底」的探查脚本,能帮你提前一个月发现数据废了。
  2. 标签的可靠性 > 标签的数量。 半仿真之所以管用,不是因为数据多,而是因为标签 100% 精确(缺陷是我们自己放的)。真实数据若标签存疑,宁可用合成数据把信号学对,也不要拿脏标签硬喂。
  3. 部署别上头,但别拖到最后。 部署是下游,但 RKNN 形状限制、量化掉点这类坑,最好在设计模型时(输入输出形状、算子选择)就提前规避,别等训完才发现有维度被拒。

说人话通俗易懂版

三句话看懂今天

  1. 用 AI 找毛病,最要命的不是「模型多厉害」,也不是「能不能装进小芯片」,而是「喂进去的数据里到底有没有真毛病、答案标得对不对」。
  2. 我们最开始用的公开数据,试了五种办法都跟猜硬币差不多(AUC 0.5)。
  3. 换成「真环境录音 + 按规律算出来的毛病声」之后,一个小 AI 就准了,还能说出毛病在哪一层。

翻译器

听到的词 换成你家的话 今天这个数是好是坏
缺陷检测 AI 让机器自动看/听出来东西坏没坏 ---
公开数据集 别人录好、标好的一堆样本 坏:噪声太大,分不出来
AUC 0.52 猜硬币的水平 坏:等于白干
半仿真 真录音 + 合成的说话声 好:知道答案才能练
标签 100% 精确 标准答案一个没错 好:学得对
小 CNN 模型 一个普通但够用的师傅 好:不挑人
RK3568 NPU 1.16ms 小芯片上一秒查 861 次 好:够快够省

生活类比串讲

想象你开了家只有一个收银台的小超市(这就是边缘设备,算力有限、不能乱来)。

  • 数据处理 = 供货。供应商送来的货里,到底有没有真东西、标签对不对。如果供应商把空箱子当满箱子送来(真实数据里缺陷信号被抵消、答案不可信),你后面再怎么折腾,都是在卖空箱子。
  • 算法训练 = 你请的收银员手艺。这活儿是标准化的,市面上随便请一个都会(现成的卷积网络)。手艺重要,但不是你能不能开张的决定因素。
  • 部署板子 = 把货和人都搬进那个小超市、让收银台转起来。必要,但它干的是「把已经做好的事搬到现场」,不是「决定卖不卖得出去」的环节。

关键在哪一看就明白:货不对板,收银再快也是白忙;货对了,搬进小超市就能卖。

我们那个超声项目,最开始的「公开数据」就是送来的空箱子------试了五种办法都分不出好坏;后来换成「真环境录音 + 按物理规律算出来的毛病声」,等于自己把控了供货、答案一个不错,小 AI 一下就灵了。

记住这一句就够了

用 AI 做缺陷检测,数据决定「检不检得出」,算法决定「检多准」,部署决定「能不能用上」------而你这项目最卡的,多半是数据那一关。


下一篇预告

  • 把二分类扩成「分类 + 深度回归」联合输出(现在深度靠峰值检测算,让网络直接学更稳)
  • 加入「伪缺陷」样本(焊缝根部几何反射这类不是缺陷但长得像的信号)------这才是真实检测里最考人的部分
相关推荐
Ai-_Man1 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
安托智造1 小时前
MBD:从二维图纸到三维模型的制造革命(下)
大数据·人工智能·制造·mbd
火山引擎开发者社区1 小时前
VeOps 深度调查:让 AI 排障从“能用”走向“可靠”
人工智能
梓豪csd1 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
王中阳Go1 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
Yang96111 小时前
0.8米超短盲区,解析BM-T1如何服务矿石能源光缆测试
1024程序员节
BK贝壳1 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
武天旭1 小时前
AI安全--AI大模型的隐私保护与法律法规
人工智能·安全
by209991 小时前
Linux 基础指令与文件操作
linux·1024程序员节