异常检测

分类问的是「这是哪一种已知故障?」。异常检测问的是另一个、往往更实用的问题: 这一件听起来正常吗? 它只用正常样本训练, 因此可以用在缺陷罕见、失效模式无法事先穷举, 或者下个月会遇到的故障眼下还没发生过的产线上。

何时该用异常检测

情形分类异常检测
故障类型已知且可标注首选可用,但给出的信息更少
缺陷样本极其稀少困难 —— 没有足够的例子可学首选
必须抓住未知或全新的失效模式训练集里没有的都会漏掉首选 —— 任何不像正常的都会报出
需要指出故障名称,而不只是发现异常首选只能报「异常」
两种方法可以很好地组合:异常检测对每一件做筛查,把可疑件挑出来; 对已有标签的故障,再用分类器给出名称。随着被挑出的异常件不断被诊断清楚, 它们就成了未来训练分类器的标注数据。

原理 —— 重构误差

自编码器是一种被训练成「先把声音压缩成一个很小的内部表示、再重新还原出来」的网络。 只用正常录音训练之后,它会非常擅长还原正常声音,而对其他一切都很笨拙。 因此,输入与还原之间的差异 —— 即重构误差 —— 对正常件很小,对异常件则很大。

MSE = (1/N) Σ ( xi − x̂i )2   →   MSE > 阈值 即判为异常

由于正常件彼此也并不完全相同,它们的误差构成一个分布,而不是一个固定数值。 阈值划在该分布的上尾:落在其右侧的都报为异常。

阈值 训练误差的 均值 + 3 × 标准差 异常件 正常样本 重构误差(MSE) 样本数量 训练时只见过青绿色的分布 —— 红色样本正是模型要抓住的对象

只用正常样本训练自编码器

进入第 2 步 —— 训练模型,选择 Python(深度学习), 按 Export Autoencoder Template。把脚本指向存放正常录音的文件夹, 设定输出 .onnx 路径与训练轮数(自编码器从 100 轮起步比较合适),即可开始。

data\
  Normal\
    unit_0001.wav
    unit_0002.wav
    unit_0003.wav
    ...

每段录音被转换为 Mel 频谱图(64 个 Mel 带 × 128 帧),网络学习将其复现。 由于只有一个类别,完全不需要标注工作 —— 收集确认合格的单件就是全部的数据准备。

训练文件夹里的每一段录音都会被当作正常。 只要混进一件有缺陷的样本,模型就会认为它的声音是可接受的, 此后类似缺陷都会被漏掉。训练前请核实训练集,每次扩充后也要重新核实。

阈值与元数据文件

训练结束时,脚本会测量每一个训练样本的重构误差,并按 均值 + 3 × 标准差得出阈值。该阈值以同名加 .meta.json 后缀的小 JSON 文件写在模型旁边:

{
  "threshold":  0.004120,
  "mean_error": 0.001850,
  "std_error":  0.000757,
  "n_samples":  240
}

加载模型时会自动读取该文件,因此检测器一上来就已按您的产线校准好。 把模型复制到别的机器时,请连同这个文件一起复制。 阈值之后可以调整,以在两类错误之间取舍:

调整效果什么时候这么做
调低(如 均值 + 2σ)抓住更多缺陷,误报增加漏检代价高、复检成本低
默认(均值 + 3σ)均衡的起点首次部署、尚无现场数据时
调高(如 均值 + 4σ)误报减少,漏检增加报警太多,操作者已开始无视

结果解读

每个被分析的样本会返回:

值得长期跟踪的是 Z 值。z = 3.1 的单件只是刚刚越线,值得听一听; z = 15 的单件则与训练中见过的一切都相差极远。 把一个班次内所有单件的 Z 值画成趋势,往往能在单件真正开始失效之前就发现漂移。

另一条路:统计基线异常度

Insert 目录中还提供一个更轻量的检测器:AI Anomaly Score(AI 异常度得分)。 它不需要神经网络,也不需要训练过程。 它逐帧计算一个 14 维特征向量 —— 8 个时域描述量(RMS、峭度、峰值因子、波形因子、 脉冲因子、裕度因子、能量熵、过零率)与 6 个频域描述量(谱质心、谱扩展度、谱平坦度、 谱峰值因子、谱熵、谱滚降点)—— 再以标准差为单位,衡量每一帧偏离基线的程度。

score(t) = √( meani [ ( xi(t) − μi ) / σi ]2 )

这个量纲很直观:与基线完全一致的帧得 0 分;每一维都偏离一个标准差的帧,恰好得 1 分。 输出是一条随时间变化的得分曲线,并在超过阈值处给出报警, 因此您能看到异常出现在录音的什么时刻,而不只是知道它存在。

基线有三个来源,按优先级排列:

基线来源含义用于
基线统计文件此前在合格件上拟合并保存的基线按固定参照对产线做筛查
录音开头 N 秒以文件开头一段定义「正常」磨合监测、试验过程中的劣化
整个文件(默认)录音以自身为参照在一段录音中找出相对最反常的片段

拟合好的基线可导出为 JSON 文件并在日后重新加载 —— 这正是让整台试验台(乃至多台试验台)按同一参照判定的做法。 默认以 2048 点窗、1024 点帧移、汉宁窗逐帧分析; 报告的单值取得分曲线的 95 分位,使短促瞬态不至于主导整体结论。

产线工作流程

  1. 在生产稳定的时段收集确认合格的录音 —— 至少数十件,覆盖不同班次与操作者。
  2. 用它们训练自编码器,或拟合并导出统计基线。
  3. 把留出的合格件跑一遍检测器,确认它们全部落在阈值以下。
  4. 把手头已有的缺陷件跑一遍,确认其误差明显高于阈值。若两组分离得不理想,调整阈值。
  5. 部署:用批量分类或管线节点对生产进行筛查,并导出结果。
  6. 复核被标出的单件,记录实际问题所在,再用这些录音训练一个能指出故障名称的分类器。
  7. 任何有意的工艺变更之后都要重新训练基线 —— 换供应商、换工装、换夹具都会改变「正常」的声音。

实用建议

相关页面:AI 声学分类(总览) · 标注与训练 · ONNX 推理

© 2026 Deepsona. All Rights Reserved.