异音检测这个方向我在工厂产线做过几个落地项目从最早的MFCC加SVM到后来上CNN做时频图分类再到近两年尝试Transformer和AutoEncoder做无监督异常检测踩过的坑比调通的模型多得多。很多刚入行的朋友一上来就问到底该用哪个模型其实这个问题本身就问错了——选型从来不是比谁的论文指标高而是看你的数据长什么样、标注成本能不能扛住、产线节拍允许多大的推理延迟。这篇就把CNN、Transformer、AutoEncoder这三类模型在异音检测场景下的选型逻辑掰开揉碎讲清楚从数据形态、特征提取方式、训练策略到部署落地尽量给到能直接抄作业的判断依据。不管你是刚接触异常声音检测的新手还是已经在产线上跑过模型的工程师应该都能从里面找到对自己有用的部分。1. 异音检测到底在检测什么先把问题定义清楚1.1 异音检测和语音识别、声纹识别的本质区别很多人第一次接触异音检测会下意识拿它跟语音识别类比觉得都是处理音频模型应该差不多。这个思路会把你带偏。语音识别的目标是把声波映射成文字关注的是语义内容声纹识别关注的是谁在说而异音检测关注的是这个声音正不正常。三者的优化目标完全不同。异音检测的核心矛盾在于正常声音的分布相对集中异常声音的形态却千奇百怪。一台电机正常运转时声音频谱是稳定的但一旦出现轴承磨损、异物卡入、装配松动产生的声音可能表现为高频啸叫、周期性咔哒、低频轰鸣甚至是一闪而过的瞬态冲击。你没法穷举所有异常类型这就决定了异音检测天然偏向无监督或半监督范式。我在一个家电产线项目里遇到过这种情况客户一开始给了三类异常样本我们按三分类训练CNN测试集准确率98%上线后第一周就漏检了一种没见过的塑料件摩擦异音。后来改成无监督的AutoEncoder方案用正常样本训练反而把这种未知异常也兜住了。这个教训很直接——异音检测的模型选型首先要匹配你的标注能力而不是先看模型结构。1.2 产线场景对模型的硬约束实验室里刷指标和产线落地是两回事。异音检测在工业场景下有几个绕不开的硬约束这些约束直接决定了模型选型的边界。第一是推理延迟。产线节拍可能是每件产品2到5秒检测必须在节拍内完成留给模型的时间往往只有几百毫秒。Transformer的自注意力机制在长序列上计算量是平方级增长的如果不做优化很容易超时。第二是样本不均衡。正常样本海量异常样本稀少有些异常可能整个试产阶段就出现几次。这直接排除了需要大量异常样本的监督学习方案。第三是环境噪声。产线背景噪声、相邻工位干扰、设备自身振动都会混进采集信号。模型必须具备一定的抗噪能力否则误报率会高到产线无法接受。第四是可解释性需求。产线工程师需要知道为什么判为异常是哪个频段、哪个时间段出了问题这关系到后续的工艺排查。纯黑盒模型在这一点上会吃亏。把这四条约束列出来你会发现选型其实是在精度、延迟、标注成本、可解释性之间做权衡没有哪个模型能四项全占。1.3 三类模型的定位差异一句话说清在展开细节之前先用一句话给三类模型定个位方便你建立整体认知CNN擅长从时频图里抓局部纹理模式训练快、推理快、对小样本友好是监督式异音分类的主力。Transformer擅长建模长距离时序依赖和全局上下文在数据量充足时上限高但吃数据、吃算力。AutoEncoder无监督范式代表只用正常样本训练靠重构误差发现异常适合异常样本稀缺的场景。这三者不是互斥的实际项目里经常组合使用比如用AutoEncoder做初筛、CNN做细分类。下面逐个拆解。2. CNN在异音检测里的真实战斗力与边界2.1 为什么时频图加CNN是异音检测的经典组合声音是一维时序信号直接喂给CNN效果通常不好因为一维卷积感受野有限很难同时捕捉短时瞬态和长时周期。行业里的标准做法是先做短时傅里叶变换STFT或梅尔频谱变换把一维信号转成二维时频图再让CNN去处理。这个转换的本质是把时间-幅度信号变成时间-频率-能量的三维表示异常声音在时频图上往往表现为特定的纹理或亮斑。举个例子轴承故障的周期性冲击在时频图上会呈现等间隔的竖向亮线高频啸叫表现为某条水平频率带上的持续能量瞬态咔哒则是一个孤立的亮点。CNN的卷积核天然适合捕捉这类局部模式这也是它在异音分类上长期占据主流的原因。具体操作上我一般用25ms窗长、10ms帧移做STFT梅尔滤波器组取64或128个通道得到一张128×T的梅尔频谱图。T取决于音频时长通常截取1到2秒对应100到200帧。这个尺寸对CNN来说很友好输入不算大训练也快。2.2 网络结构选型从VGG式到轻量化异音检测的CNN结构不需要太深。我试过ResNet-50在几千张时频图上过拟合严重反而不如一个5层的小网络。原因是异音检测的数据集规模通常远小于ImageNet深层网络的参数量是负担。比较稳妥的结构是VGG式的堆叠3到5个卷积块每个块包含两层3×3卷积加BN加ReLU后面接2×2最大池化最后全局平均池化接全连接分类头。通道数从32起步逐层翻倍到256。这个结构在多数异音分类任务上能到95%以上的准确率参数量控制在百万级推理延迟在CPU上也能压到几十毫秒。如果产线用的是边缘设备可以考虑MobileNetV3或ShuffleNet这类轻量结构。我在一个嵌入式方案里用过MobileNetV3-Small模型大小不到3MB在ARM芯片上单帧推理15ms精度比VGG式网络只掉了1.5个百分点性价比很高。提示不要盲目追求深网络。异音检测的数据量和任务复杂度决定了中小型CNN往往比大模型更实用。先跑通一个小网络建立baseline再考虑要不要加深。2.3 数据增强在异音场景的特殊玩法图像领域那套翻转、裁剪的增强手段在时频图上要谨慎使用。水平翻转时间轴翻转会破坏声音的时序逻辑一般不能用垂直翻转频率轴翻转会改变音色也不合理。真正有效的是这几类加性噪声往原始音频里混入产线背景噪声提升抗噪鲁棒性。这是最有效的增强手段我通常会把信噪比控制在5到15dB之间随机采样。时间平移把异常事件在时间轴上随机挪动模拟触发时刻的不确定性。频率掩蔽和时间掩蔽借鉴SpecAugment随机遮挡部分频带或时间段强迫模型学习更鲁棒的特征。增益扰动整体调整音量模拟不同采集距离和灵敏度。这里有个坑要提醒加性噪声增强时噪声样本必须来自真实产线环境。用白噪声或公开数据集噪声增强出来的模型上线后照样扛不住实际干扰。我一般会专门采集几段产线空转时的背景音作为噪声库。2.4 CNN的软肋长距离依赖和未知异常CNN的局部感受野决定了它不擅长建模长距离依赖。如果异音的特征是前0.5秒正常、后0.5秒出现周期性异常且这个周期性跨越了较长时间CNN需要堆很多层才能覆盖效率不高。Transformer在这类场景下更有优势。更致命的是CNN对未知异常的无力。监督式CNN只能识别训练时见过的异常类别遇到新异常要么误判为正常要么分到某个已知类。如果产线的异常类型会持续新增纯监督CNN的维护成本会很高每次新增异常都要重新标注、重新训练。所以我的经验是如果异常类型固定且样本充足CNN是首选如果异常类型会动态增加必须搭配无监督方案。3. Transformer进入异音检测的正确姿势3.1 自注意力机制为什么适合声音序列Transformer的核心是自注意力它能让序列中任意两个位置直接建立关联不受距离限制。这个特性对声音信号特别有价值因为异音的特征可能分布在时间轴的两端也可能需要对比不同频段之间的关系。举个实际例子某类电机异音表现为启动瞬间的高频成分和稳态运行时的低频调制同时存在单独看任一段都像正常只有把两段关联起来才能判定异常。CNN要靠很深的网络才能建立这种远距离关联Transformer一层自注意力就能做到。另一个优势是Transformer对输入序列的建模更灵活。它不要求输入是规整的网格可以把时频图的patch、原始波形的帧、甚至手工特征都拼成序列一起处理。这种多模态融合能力在复杂异音场景下很有用。3.2 视觉Transformer和音频Transformer的取舍在异音检测里用Transformer主要有两条路线一是把时频图当图像用ViTVision Transformer那套patch embedding二是把音频当序列用类似ASTAudio Spectrogram Transformer的结构。ViT路线实现简单把梅尔频谱图切成16×16的patch展平后加位置编码送进Transformer编码器。但要注意ViT对数据量要求极高原论文是在ImageNet上预训练的。异音检测的数据集通常只有几千到几万样本直接从头训练ViT几乎必然过拟合。我的做法是用预训练权重做迁移学习。在ImageNet上预训练的ViT或者在大规模音频数据集上预训练的AST拿来微调。微调时冻结前面的层只训练最后几层和分类头学习率调小到1e-5量级。这样在几千样本上也能收敛。AST路线更贴合音频特性它把时频图按时间和频率两个维度切patch位置编码也是二维的能更好保留时频结构。如果做的是纯音频任务AST通常比ViT效果更好。3.3 数据量不足时Transformer的补救方案Transformer吃数据是公认的。异音检测场景下数据往往不够有几个补救思路第一是数据增强要更激进。除了前面说的音频增强还可以用Mixup、CutMix在时频图上做样本混合。Mixup把两张时频图按比例线性叠加标签也按比例混合能显著提升小数据集上的泛化。CutMix则是把一张图的局部区域替换成另一张图的对应区域。第二是知识蒸馏。先用CNN在大数据集上训一个teacher再用它指导Transformer学习。CNN的归纳偏置局部性、平移不变性能通过蒸馏传递一部分给Transformer缓解小数据下的过拟合。第三是降低模型规模。用轻量Transformer比如把层数降到4到6层注意力头数降到4到8个embedding维度降到256。我试过一个6层、4头的轻量Transformer在8000个样本上训练效果和12层的大模型差不多但训练时间少了一半。第四是混合架构。用CNN做前端特征提取Transformer做后端序列建模。CNN负责从时频图里抽局部特征Transformer负责建模这些特征之间的长距离关系。这种CNNTransformer的混合结构在小数据场景下往往比纯Transformer更稳。3.4 推理延迟优化Transformer上产线的关键Transformer上产线最大的障碍是延迟。自注意力的计算复杂度是O(n²)序列长度n一上去延迟就爆炸。异音检测里如果音频长2秒、帧移10ms序列长度就是200自注意力要算200×200的矩阵还能接受但如果音频长10秒序列长度1000计算量就是100万次边缘设备扛不住。优化手段有几个方向降低序列长度增大帧移或者对时频图做下采样。比如把帧移从10ms改成20ms序列长度直接减半。使用稀疏注意力只计算局部窗口内的注意力或者用Longformer那种滑动窗口机制把复杂度降到O(n)。模型量化把FP32量化成INT8推理速度能提升2到4倍精度损失通常在1%以内。知识蒸馏到CNN训练时用Transformer部署时把知识蒸馏到一个小CNN上兼顾精度和速度。我在一个项目里做过对比原始12层Transformer在边缘设备上单帧推理320ms超出节拍换成6层加INT8量化后降到45ms精度只掉了0.8个百分点顺利上线。4. AutoEncoder异常样本稀缺时的救命稻草4.1 无监督范式的核心逻辑只学正常异常自然露馅AutoEncoder的思路很朴素用大量正常样本训练一个网络让它学会压缩和重构正常声音。测试时正常样本能被很好地重构重构误差小异常样本因为没见过的模式重构误差大。设定一个阈值超过就判为异常。这个范式的最大优势是不需要异常样本。产线试产阶段异常样本稀少甚至没有监督学习无从下手AutoEncoder却能直接开工。而且它对未知异常天然友好因为任何偏离正常分布的模式都会导致高重构误差不管这个异常是不是训练时见过的。我在一个新品试产项目里客户只有正常样本要求上线检测。用AutoEncoder方案正常样本训练上线后一周内抓出了三种异常其中两种是客户自己都没预料到的。这就是无监督范式的价值。4.2 重构目标的选择波形、频谱还是梅尔谱AutoEncoder的重构目标决定了它能捕捉什么层次的异常。常见选择有三类波形重构直接重构原始音频。优点是信息无损缺点是波形对相位敏感微小的相位偏移就会导致巨大重构误差容易误报。一般不单独用。线性频谱重构重构STFT的幅度谱。比波形稳定能保留完整的频率信息适合检测频谱层面的异常。梅尔频谱重构重构梅尔频谱。梅尔刻度贴合人耳感知对异音检测这种偏主观的任务更合适。而且梅尔谱维度低训练快。我多数项目用这个。选择时有个经验如果异常主要表现为音色变化用梅尔谱如果异常涉及高频细节用线性谱。高频异音在梅尔谱上会被压缩可能漏检。4.3 阈值设定无监督方案最容易被忽视的环节AutoEncoder判异常靠阈值阈值定不好整个方案就废了。定太高漏检定太低误报。很多人随便取个重构误差的均值加两倍标准差上线后误报率爆表。正确的做法是用正常样本的验证集来定阈值。具体步骤留出一部分正常样本不参与训练用训练好的模型算它们的重构误差得到误差分布。然后根据可接受的误报率反推阈值。比如要求误报率低于1%就取误差分布的99百分位作为阈值。但产线场景往往要求更严。我一般会做双阈值机制一个高阈值直接判异常一个低阈值判可疑可疑样本转人工复检。这样既控制了漏检又不会让误报淹没产线。还有个技巧是动态阈值。产线环境会漂移比如温度变化导致背景噪声改变固定阈值会失效。可以每隔一段时间用最近的正常样本重新估计误差分布动态调整阈值。这个在长时间运行的产线上很必要。4.4 变分自编码器和记忆增强的进阶玩法基础AutoEncoder有个问题它可能把异常也重构得很好尤其是当异常和正常在时频图上差异不大时。两个改进方向值得关注。变分自编码器VAE在隐空间引入概率分布重构时从分布中采样。VAE的重构误差更平滑对异常的区分度有时更好。但VAE训练更不稳定需要调KL散度的权重调不好会出现后验坍塌。记忆增强AutoEncoderMemAE在隐空间维护一个记忆矩阵重构时从记忆里检索最相似的正常模式。异常样本因为找不到匹配的记忆重构误差会显著增大。这个方法在MVTec等异常检测基准上表现很好异音检测里也可以借鉴。我试过MemAE在轴承异音检测上相比基础AutoEncoderAUC从0.89提升到0.94代价是训练慢了一些推理多了个检索步骤。如果对精度要求高值得上。5. 三类模型的横向对比与选型决策树5.1 关键维度对比表把三类模型放在一起对比能更直观地看出各自适用场景。下面这张表是我根据多个项目经验整理的指标是相对值具体数值会随数据集变化。维度CNNTransformerAutoEncoder标注需求需要异常样本需要异常样本只需正常样本数据量要求中等高中等训练速度快慢中等推理延迟低高中等未知异常检测差差好长距离依赖建模弱强中等可解释性中等中等中等小样本表现好差好上限精度高很高中等从表里能看出没有哪个模型全面占优。CNN胜在均衡Transformer胜在上限AutoEncoder胜在无监督。5.2 按数据条件的选型决策路径选型第一步是看数据条件这是最硬的约束。如果异常样本充足每类几百条以上优先CNN。训练快、推理快、调参简单性价比最高。如果数据量特别大几万条以上且算力充足可以上Transformer冲更高精度。如果异常样本稀少每类几十条CNN加数据增强或者用预训练模型微调。Transformer在这个数据量下容易过拟合不推荐从头训练。如果只有正常样本AutoEncoder是唯一选择。如果正常样本也少考虑用预训练的自监督模型提取特征再做异常检测。如果异常类型会动态增加AutoEncoder打底配合CNN做已知异常的细分类。新异常出现时AutoEncoder能兜住积累够样本后再训练专门的CNN分类器。5.3 按产线约束的二次筛选数据条件定了大方向后还要用产线约束做二次筛选。延迟敏感节拍小于1秒CNN或轻量AutoEncoder。Transformer必须做量化或蒸馏否则超时。算力受限边缘设备轻量CNN或MobileNet系列。Transformer基本排除除非用蒸馏后的小模型。可解释性要求高三类模型都可以通过可视化中间特征来提升可解释性。CNN看卷积核激活Transformer看注意力权重AutoEncoder看重构误差的时频分布。相对而言AutoEncoder的重构误差图最直观能直接指出异常发生在哪个时间段和频段。维护成本敏感AutoEncoder维护成本最低新增异常不用重新标注训练。CNN每次新增异常都要重新标注维护成本高。6. 落地实操中的坑与经验6.1 数据采集环节的隐蔽陷阱模型再好数据不行都是白搭。异音检测的数据采集有几个隐蔽陷阱我踩过不止一次。采样率选择很多人默认用16kHz但异音检测里高频成分往往很关键。轴承早期故障的特征频率可能在10kHz以上16kHz采样率下8kHz以上就没了。我一般用48kHz采样保留完整高频信息后续再根据需要降采样。麦克风位置麦克风离声源的距离和角度直接影响采集到的信号。产线上麦克风位置一旦定了训练和推理必须保持一致。我见过一个项目训练数据在A工位采的部署到B工位模型直接失效因为两个工位的声学环境不同。同步问题如果异音和某个动作相关比如机械臂抓取瞬间采集时必须和产线PLC做同步否则标注的时间戳对不上。这个在项目初期就要和产线工程师确认好。背景噪声记录一定要单独录一段产线空转的背景音用于数据增强和后续的噪声抑制。这个很容易被忽略等到模型误报率高的时候才想起来就晚了。6.2 训练集测试集划分的常见错误异音检测的数据划分有个大坑不能随机划分。如果同一件产品的多个音频片段被随机分到训练集和测试集测试集里会有和训练集高度相似的样本导致指标虚高。正确的做法是按产品件划分。同一件产品的所有音频要么全在训练集要么全在测试集。更严格的是按批次划分同一批次的产品全在一侧。这样测试集才能真正反映模型对未见产品的泛化能力。我见过一个项目随机划分下准确率99%按件划分后掉到85%差距就是这么大。所以指标虚高的时候先检查数据划分方式。6.3 模型融合的实战价值单一模型往往有盲区融合能显著提升鲁棒性。异音检测里常用的融合方式有两种。多模型投票CNN、Transformer、AutoEncoder各训一个推理时投票。三个模型都判异常才判异常误报率低任一判异常就判异常漏检率低。具体用哪种看产线更在意误报还是漏检。特征级融合把CNN提取的局部特征和Transformer提取的全局特征拼接送进分类头。这种方式比投票更紧耦合效果通常更好但实现复杂一些。我在一个项目里用CNN加AutoEncoder融合CNN负责已知异常的细分类AutoEncoder负责未知异常的兜底。上线后漏检率比单CNN降低了60%误报率只上升了0.3个百分点产线接受度很高。6.4 上线后的持续监控与迭代模型上线不是终点。产线环境会变设备会老化模型性能会漂移。必须建立持续监控机制。监控指标除了常规的准确率、误报率、漏检率还要监控输入数据的分布。如果输入时频图的统计特征均值、方差、频谱重心发生显著偏移说明数据分布变了模型可能失效。定期复训积累新的正常样本后定期更新AutoEncoder的阈值或者重新训练CNN。我一般建议每月复训一次产线变化快的话两周一次。异常样本回流产线判为异常的样本人工复检后确认是异常的要回流到训练集。这些是宝贵的真实异常样本积累够了就能训练更准的监督模型。A/B测试新模型上线前和旧模型并行跑一段时间对比指标。确认新模型确实更好再切换避免直接替换导致产线波动。7. 一个完整的选型案例复盘7.1 项目背景与约束去年做过一个汽车零部件产线的异音检测项目产品是电动座椅调节电机。产线节拍3秒要求检测电机运转时的异音。客户提供了2000件正常样本异常样本只有30件分属两类齿轮啮合异音和轴承异音。产线用的是工控机算力有限要求推理延迟低于500ms。这个项目的约束很典型异常样本少、算力有限、延迟敏感、异常类型可能增加。7.2 方案设计与迭代过程第一版方案用监督CNN30件异常样本加数据增强扩到300件训练一个5层CNN。测试集准确率92%但上线后误报率高产线反馈每100件误报3到4件无法接受。分析原因异常样本太少模型泛化差对正常样本的细微变化过度敏感。而且两类异常样本不均衡齿轮异音25件轴承异音只有5件轴承类基本没学好。第二版改成AutoEncoder为主、CNN为辅的融合方案。AutoEncoder用2000件正常样本训练负责初筛CNN只用齿轮异音样本训练负责细分类。轴承异音因为样本太少暂时靠AutoEncoder兜底。阈值用正常验证集的99.5百分位配合双阈值机制。上线后误报率降到0.5%漏检率2%产线接受。第三版在运行两个月后积累了80件轴承异音样本补训了一个轴承分类CNN融入融合框架。漏检率进一步降到0.8%。7.3 最终效果与经验总结最终方案在产线稳定运行误报率0.5%以下漏检率1%以内推理延迟平均180ms满足节拍要求。这个项目给我的经验是异音检测的选型不是一次性的而是随数据积累动态演进的。初期异常样本少AutoEncoder打底随着异常样本积累逐步引入监督CNN提升精度。不要指望一个模型从头用到尾。另外双阈值加人工复检的机制在产线落地时非常关键。它给了模型一个缓冲带避免了误报直接冲击产线。很多项目失败不是因为模型精度不够而是因为误报率没控制好产线直接弃用。最后说个细节这个项目里麦克风用的是定向麦克风指向电机正上方距离10cm。这个位置是试了三个方案后定下来的不同位置采集的信号信噪比差异很大。麦克风选型和位置固定是异音检测项目最容易被低估的环节值得花时间做对比实验。如果你正在做异音检测的选型我的建议是先别纠结模型结构把数据采集和划分做扎实跑通一个CNN baseline再根据异常样本的积累情况决定要不要上AutoEncoder或Transformer。模型是工具数据才是根本。