机器异常声音检测中“决策阈值”的系统性研究与工程启示
1、引言
在工业设备的状态监测中,异常声音检测(ASD)一直是一个非常典型、但也非常棘手的问题。现实场景里,真正的异常样本往往很少,而设备的运行工况却经常发生变化,比如转速、负载、环境噪声等都会直接影响声音特征,这使得“什么算异常”本身就变得不那么清晰。从目前的研究和工程实践来看,主流的异常声音检测方法大致可以归为两种思路,而且几乎所有先进系统,都是围绕这两种思路展开的。
2、异常声音检测的最新研究进展
在介绍本文的方法之前,有必要先回顾一下异常声音检测(Anomalous Sound Detection, ASD)领域目前的主流研究思路。当前机器状态监测中的 ASD 方法大多依赖深度学习,整体来看可以归纳为两类典型范式。
第一类方法是只使用正常数据进行训练,最常见的代表是自编码器。其基本思想是:模型在训练阶段只接触到正常声音,因此能够很好地重构正常数据;而当输入出现异常时,由于其分布与训练数据存在偏差,模型的重构效果会明显变差,从而可以将重构误差作为异常程度的衡量指标。围绕这一思路,研究者提出了多种不同结构的自编码器,例如引入类别条件的自编码器,或者通过掩码机制对输入进行分组建模。由于这类方法本质上是在学习“正常数据长什么样”,因此也常被统称为内点建模(Inlier Modelling, IM)。
另一类方法则采取了不同的角度,它并不直接去建模正常数据的分布,而是先训练一个判别式模型,让模型学会区分不同类别的声音数据。这类方法的核心假设是:如果模型能够有效地区分预先定义的类别,那么它在学习判别信息的过程中,也会同时捕获对异常检测有用的特征信息。这一思路被称为异常暴露(Outlier Exposure, OE)。在机器状态监测任务中,这种方法通常用于区分不同的机器类型,或者进一步细分为不同的机器状态或噪声类型。为了让模型在特征空间中形成良好的区分结构,训练过程中往往会采用带角度间隔的损失函数,例如 ArcFace 或 AdaCos。这类损失函数不仅拉开不同类别之间的距离,还会让同一类别的样本在特征空间中更加集中。训练完成后,正常样本的特征通常会围绕某个学习到的中心分布,而异常样本由于与该中心的夹角更大,因此更容易被识别出来。
在实际应用中,许多先进的 ASD 系统并不会只依赖其中一种范式,而是将内点建模和异常暴露方法结合使用。常见的组合方式主要有两种。一种是并行结构,即同时使用多个 OE 和 IM 模型,通过集成的方式得到最终结果;另一种是串行结构,即先使用判别式模型提取特征,再在这些特征上应用内点建模方法进行异常判断。与并行方式相比,串行结构的系统通常更加简洁,所需调节的超参数也更少。但与此同时,这种方法也存在潜在问题:如果在训练判别模型时,某些对异常检测有用的信息并不是区分类别所必需的,那么这些信息可能在特征提取阶段被弱化甚至丢失。
基于上述背景,本文在所有实验中采用了文献中提出的一种串行 ASD 系统。该系统首先将音频信号转换为 log-mel 频谱,然后通过神经网络提取判别式音频特征,最后使用统计模型对这些特征进行建模并计算异常分数。用于特征提取的神经网络采用了改进的 ResNet 结构,并使用子簇 AdaCos 损失函数进行训练。子簇 AdaCos 是对标准 AdaCos 损失的扩展,其主要特点是在每个类别内部引入多个子簇中心,而不是只学习一个中心,从而能够更好地描述复杂且多峰的特征分布。在本文的实验设置中,每个类别对应于在噪声环境中采集的某一具体机器,并为每个类别设置了 32 个子簇。
在特征提取之前,音频信号被转换为 log-mel 频谱,使用 128 个 mel 频带,窗长为 1024,帧移为 512。神经网络基于 TensorFlow 实现,使用 Adam 优化器进行训练,训练轮数为 400 个 epoch,批大小为 64。为了增强模型的泛化能力并减少过拟合,训练过程中引入了 mixup 数据增强方法,通过随机混合不同样本生成新的训练数据。
模型训练完成后,用于从音频中提取嵌入特征,并将这些特征归一化到单位球面上。需要注意的是,对于一种特定的机器类型 “ToyConveyor”,并未使用神经网络提取的嵌入,而是直接采用 log-mel 频谱在时间维度上的均值作为特征,因为在该机器类型上,这种表示方式能够取得更好的异常检测性能。对于每一个预先定义的类别,也就是每一台具体的机器,最终都会使用高斯混合模型对其特征分布进行建模。每个 GMM 由 32 个高斯分量组成,并采用完整协方差矩阵,同时在协方差矩阵的对角线上加入一个很小的正则项以保证数值稳定性。异常分数则通过计算样本在对应 GMM 下的对数似然值得到,对数似然越低,样本被判定为异常的可能性越大。
3、决策阈值的确定
3.1 Gamma 分布分位数法(GP)
DCASE 挑战赛基础系统所采用的策略是:对正常训练样本得到的异常得分拟合一个 Gamma 分布,并将其累积分布函数的 90% 分位数的逆函数值作为判决阈值。测试样本的异常得分若大于该阈值,则判定为异常;否则判定为正常。
3.2 直方图分位数法(HP)
另一种方法是不进行分布拟合,而是直接基于异常得分的直方图确定阈值。需要注意的是,该方法隐含地假设得分在区间内呈均匀分布。采用使用得分直方图的 90% 分位数作为判决阈值。
3.3 标准差法(SD)
标准差法是最常用的方法之一,其基本思路是对异常得分拟合一个正态分布。所有超出区间
$$μ±α⋅σ$$
的得分被视为异常,其中 μ 和 σ 分别表示正常得分的均值和标准差。需要注意的是,该方法在理论上使用了两个阈值。由于本文中的异常得分为负对数似然值,且假设正常样本与异常样本在得分空间中具有线性可分性,因此仅使用上阈值。为与前两种方法保持一致,本文采用 α = 1.28,该值近似对应于 90% 分位数。
3.4 中位数绝对偏差法(MAD
鉴于中位数相比均值对异常值更具鲁棒性,可以基于以下形式确定判决阈值:
其中
$$MAD=β⋅median(∣x-e_x∣)$$
ex 表示异常得分 x 的中位数。文献参考建议取 α = 3、β = 1.4826
3.5 四分位距法(IQR)
该方法通过设置第一四分位数 Q1 和第三四分位数 Q3,将异常得分 x 分割为子集,使得 75% 的得分满足 x ≥ Q1,25% 的得分满足 x ≥ Q3。四分位距定义为:
$$ IQR=Q3-Q1 $$
位于区间
$$ [Q1-α⋅IQR , Q3+α⋅IQR ] $$
之外的得分被判定为异常。通常取 α = 1.5,但本文采用 α = 0.5,该取值在实验中显著提升了检测性能。该方法也被称为箱线图法(boxplot)。
3.6 单类支持向量机(OCSVM)
为估计数据分布的支持域,可以使用单类支持向量机(One-Class SVM)。该方法通过在高维空间中构造一个超球体,以区分高密度区域和低密度区域。本文采用 scikit-learn提供的实现,并使用线性核函数。超参数 ν 取 0.1,即将约 10% 的正常训练得分视为异常。
3.7 广义极端学生化偏差法(GESD)
GESD 方法是一种基于 Grubbs 检验(GRUBBS)的迭代方法。Grubbs 检验假设数据服从正态分布,其统计量定义为:
$$ G=(∣max(x)-μ∣)/σ $$
其中 μ 和 σ 分别表示均值和标准差。统计量 G 与学生 t 分布在显著性水平 α(默认取 0.05)和样本数 N 下的临界值进行比较:
Grubbs 检验一次仅能检测一个异常样本,因此在 GESD 中需要重复迭代执行该检验,直至不再检测出新的异常样本。
3.8 Clever 标准差法(cleverSD)
CleverSD是另一种迭代式方法。其基本思想是:反复应用标准差法(α = 2),在每一轮中若检测到异常样本,则移除得分最高的一个样本,并继续下一轮迭代,直至不再发现异常。本文采用该方法最终移除的最后一个得分作为判决阈值。
3.9 两阶段阈值法(-x2)
在 cleverSD 的基础上,文献提出了一种称为多阶段阈值法(multi-stage thresholding)的迭代异常检测方法。其核心思想是:对训练得分多次重复应用非迭代式阈值方法,每一轮中移除所有被判定为异常的样本。与 cleverSD 的区别在于,每一轮并非仅移除一个异常样本,而是同时移除所有检测出的异常样本。实验表明,两轮迭代已足够,因此本文仅采用两阶段处理。对于非迭代方法,其两阶段版本在命名时添加后缀 “-x2” 以示区分。
4、实验
4.1 数据集
本文所有实验均基于 DCASE 2020 异常声音检测(ASD)数据集。该数据集包含六种不同的机器类型,分别为 ToyAdmos 数据集 [44] 中的 “ToyCar” 和 “ToyConveyor”,以及 MIMII 数据集 [45] 中的 “fan”、“pump”、“slider” 和 “valve”。
每条录音均包含某一特定机器的运行声音以及工厂环境噪声,录音长度为 10 秒,采样率为 16 kHz。每种机器类型包含 6 至 7 个不同的 machine id,每个 machine id 对应于该类型下的一台具体机器,总计包含 42 个 machine id。在第 2.2 节中所描述的判别模型训练过程中,这些 machine id 被作为类别标签使用。
数据集被划分为训练集、开发集和评测集。训练集包含每个 machine id 约 1000 条正常声音样本。开发集包含每种机器类型中一半 machine id 的数据,其中每个 machine id 包含 100 至 200 条正常声音和 100 至 200 条异常声音。评测集包含另一半 machine id 的数据,每个 machine id 约 400 条录音,且同时包含正常和异常声音样本。
4.2 判决阈值方法的比较
基于正常训练数据得到的异常得分,用于分别为每一种机器类型以及每一个 machine id 估计 ASD 判决阈值。随后,将这些阈值(或其对应的模型)分别应用于开发集和评测集,对包含正常样本和异常样本的测试数据进行评估。
对于每个 machine id,分别计算 F1 分数,并在机器类型层面上对 F1 分数取平均值。作为对比,还额外评估了一种使用单一最优阈值的方法,记为 optimum。该最优阈值通过简单地遍历多个候选阈值并计算相应的 F1 分数获得,并选取使 F1 分数最大的阈值作为该机器类型的最优阈值。
为提高结果的鲁棒性,ASD 系统共训练五次,并对每种阈值方法完整重复五次评估流程,最终性能以五次实验得到的 F1 分数的平均值表示。开发集和评测集的最终结果分别列于表 2 和表 3 中。对于每种机器类型,性能最优的阈值估计方法以下划线标出。此外,还给出了跨所有机器类型的平均 F1 分数。


实验结果表明,不同的阈值估计方法在不同机器类型上表现出不同的性能。
为了在比较不同方法时减小不同机器类型本身 ASD 性能差异的影响,本文采用某一方法的 F1 分数与最优单阈值(optimum)对应 F1 分数的比值,而非直接使用 F1 分数进行比较。因此,该比值反映了某一估计阈值与最优阈值的接近程度,使得在不同机器类型之间能够进行更加公平的比较。相关结果如图1所示。

从结果中可以得出如下结论:
首先,大多数阈值估计方法在 ASD 性能上表现非常接近。唯一的例外是 GESD 方法,其在开发集和评测集上的性能均较差,以及 GP/GPx2 方法,其在开发集上的性能略低于其他方法。
其次,各方法的两阶段版本在开发集上的性能与单阶段版本基本相当,但在评测集上略有提升。此外,迭代方法 cleverSD 的 F1 分数与两阶段方法基本一致。
综合来看,实验结果表明,在 ASD 任务中进行判决阈值估计时,采用两阶段方法(或 cleverSD)更为合适,而底层所选用的单阶段方法对最终性能的影响并不显著。
4.3 将正常样本划分为训练集与阈值估计集
为避免由于同时使用正常样本进行 ASD 系统训练和阈值估计而导致的过拟合,常见的一种策略是:仅使用部分正常样本训练 ASD 模型,而将剩余样本用于获取更贴近真实测试情况的异常得分。通过该策略,训练阶段得到的异常得分与测试阶段的异常得分分布更为接近,从而有望提高判决阈值的准确性。

然而,减少用于训练 ASD 系统的数据量本身会降低模型性能,因为模型可利用的信息减少。因此,在以下实验中,本文研究该策略是否真正能够提升 ASD 性能。
首先,评估在使用不同数量训练样本训练 ASD 系统时,采用单一最优阈值所得到的 ASD 性能。相应的 F1 分数如图 2 所示。结果表明,随着训练数据量的减少,F1 分数确实有所下降,但性能退化程度远小于预期。在使用少于 40% 的正常训练样本之前,性能下降几乎不可察觉。即使仅使用 5% 的正常训练样本,F1 分数也仅略低于使用全部样本时的性能。
其主要原因可能在于:在忽略背景噪声的情况下,机器发出的声音本身具有较低的变化性,因此仅凭少量录音即可较好地刻画其声学特性。这一发现表明,在机器状态监测中,ASD 系统有可能在较低计算资源和数据资源条件下仍保持较好性能,本身具有一定研究价值。
随后,本文进一步评估了在使用不同数量训练样本训练 ASD 系统时,各种阈值估计方法的 ASD 性能。开发集和评测集的结果分别如图 3 和图 4 所示。结果表明,减少训练样本数量并利用这些样本获取更真实的异常得分来估计判决阈值,并未显著提升 ASD 性能。相反,由于绝对 F1 分数本身略有下降(见图 2),整体性能反而有所降低。


在比较不同方法时可以发现,随着训练数据量的减少,各方法之间的性能差距逐渐增大。再次验证了迭代方法(如 SDx2、IQRx2、OCSVMx2 和 cleverSD)表现最优。此外,这些方法的相对性能较为稳定,表明其在 ASD 阈值估计任务中具有较好的鲁棒性。需要注意的是,OCSVMx2 并不假设异常得分服从某种特定分布,仅假设得分具有线性可分性。因此,该方法(尤其是 OCSVMx2)很可能也适用于其他 ASD 系统及不同形式的异常得分。
一个显著的例外是 GP 方法,其两阶段版本 GPx2 的结果表现出明显的不稳定性,且性能显著劣于其他方法。由于在使用全部训练样本时并未出现如此严重的性能退化,这进一步表明,在实际应用中更应优先选择其他迭代方法。
5、结论
本文综述并评估了多种用于机器状态监测中异常声音检测的判决阈值估计方法。基于 DCASE 2020 数据集的实验结果,对这些方法在当前先进 ASD 系统所产生的异常得分上进行了系统比较,并得出如下结论:
首先,大多数阈值估计方法性能相近,其最终 F1 分数约为最优调参阈值所能达到性能的 90% 至 95%。虽然仍存在一定性能差距,但该差距相对较小。
其次,迭代方法(如多阶段阈值)能够在整体上略微提升 ASD 性能,因此相较于单阶段方法更具优势,尤其在训练数据较少的情况下表现出更强的鲁棒性。
最后,为了获得更真实的异常得分而刻意保留部分正常样本、不用于 ASD 系统训练,仅用于阈值估计的策略,并不能提升 ASD 性能,因此在实际应用中可以省略。
尽管本文无法穷尽所有自动阈值估计方法的比较,但可作为将这些技术应用于实际 ASD 场景(如机器状态监测)的初步研究。未来工作将包括:在不同 ASD 系统、不同数据集以及更多阈值估计技术上的进一步验证;研究在存在领域偏移(domain shift)以及多领域泛化场景下的阈值选择问题;以及将相关方法扩展到开放集分类任务,如声学场景分类和说话人识别。
