基于CWT与深度学习的轴承故障诊断:五种模型实战对比

发布时间:2026/10/29 17:15:49
基于CWT与深度学习的轴承故障诊断:五种模型实战对比 1. 项目缘起与整体设计思路1.1 为什么选这个题目从工业现场的真实痛点说起旋转机械的故障诊断说白了就是给机器“听诊”。轴承、齿轮箱、电机这些设备在长期运转中一旦出现点蚀、裂纹、磨损振动信号里就会混进周期性的冲击成分。问题在于现场采集到的原始振动信号往往被强噪声淹没而且不同故障类型之间的特征差异非常微妙——内圈故障和外圈故障的时域波形可能长得差不多但在频域上却有本质区别。传统做法是人工提取特征时域统计量峭度、均方根、峰值因子、频域特征特征频率幅值、时频域特征小波包能量熵。这套流程我做了很多年说实话特征工程的质量极度依赖经验换一台设备、换一个工况之前调好的特征可能就完全失效了。更麻烦的是凯斯西储大学CWRU的轴承数据虽然是公开基准但真正拿它做多分类任务时不同故障直径0.007、0.014、0.021英寸和不同负载0、1、2、3马力的组合会让类别数迅速膨胀手工特征根本不够用。这个项目的核心思路很直接用**连续小波变换CWT**把一维振动信号转成二维时频图然后让深度学习模型自己去学特征。我同时跑了五种模型——纯CNN、ResNet、CNN-SVM、CNN-BiGRU、CNN-LSTM——目的不是证明哪个“最好”而是想搞清楚在CWRU这个特定数据集上不同架构的归纳偏置到底带来多大差异残差连接对深层网络是否必要注意力机制和循环结构谁更适合捕捉时频图中的时序依赖这些问题光看论文是看不出来的必须自己跑一遍。1.2 五种模型的分工与选型逻辑先说说为什么是这五个模型而不是随便凑数。CNN是基线。时频图本质上是图像卷积核天然适合提取局部纹理——故障冲击在CWT尺度图里表现为特定频率带的能量集中浅层卷积就能捕捉到。但纯CNN的局限也很明显感受野有限对全局周期性的建模能力弱。ResNet解决的是退化问题。我试过把普通CNN堆到20层以上训练准确率反而下降这不是过拟合而是梯度消失导致底层参数更新不动。残差连接让梯度可以“抄近路”回传深层网络才真正可训练。在CWRU数据上ResNet-18的深度已经足够再深就是浪费算力。CNN-SVM是个混合方案。CNN负责特征提取把倒数第二层的特征向量拿出来喂给SVM做分类。这么做的好处是SVM在小样本高维空间里的泛化能力比Softmax强尤其当某些故障类别的训练样本偏少时SVM的间隔最大化策略更稳健。但缺点也明显——不能端到端训练CNN提取的特征未必对SVM最优。CNN-BiGRU和CNN-LSTM都是“卷积循环”的混合架构。CNN先提取局部时频特征然后双向GRU或LSTM沿时间轴建模。区别在于GRU参数更少训练更快对短序列更友好LSTM门控更复杂理论上能捕捉更长程的依赖。但在CWT时频图上时间轴的长度取决于尺度参数通常不会太长所以两者差距可能不大——这正是我想验证的。注意选模型不是越复杂越好。我见过太多人上来就堆Transformer结果在CWRU这种几千样本的数据集上过拟合得一塌糊涂。模型容量要和数据规模匹配这是铁律。1.3 数据预处理CWT参数怎么定CWT的核心参数是小波基和尺度范围。小波基我选了Morlet因为它的时频局部化特性最平衡——高斯包络保证时域集中复指数保证频域集中。尺度范围从1到256覆盖了CWRU数据中故障特征频率的主要区间内圈故障特征频率约162Hz外圈约107Hz采样频率12kHz。这里有个坑尺度范围不是越大越好。尺度太大低频分辨率高但时间分辨率差故障冲击的瞬态特征会被抹平尺度太小高频细节多但频域模糊。我试过1-128和1-512最终1-256在验证集上表现最稳。转换后的时频图统一缩放到224×224这是为了兼容ResNet的预训练输入尺寸——虽然我不建议用ImageNet预训练权重因为振动时频图和自然图像的统计分布差异太大微调反而可能引入负迁移。2. 核心细节解析与实操要点2.1 CWT时频图生成Matlab代码逐行拆解先上核心代码。这段是我反复调试后最稳定的版本% 参数设置 fs 12000; % 采样频率 waveletName morl; % Morlet小波 scales 1:256; % 尺度范围 imgSize [224 224]; % 输出图像尺寸 % 读取CWRU数据以12k驱动端内圈故障为例 load(IR007_0.mat); % 包含X123_DE_time变量 signal X123_DE_time(1:4096); % 取前4096个点 % 连续小波变换 cwtStruct cwtft({signal, 1/fs}, ... wavelet, waveletName, ... scales, scales); % 取模值并归一化 scalogram abs(cwtStruct.cfs); scalogram scalogram / max(scalogram(:)); % 缩放到目标尺寸 img imresize(scalogram, imgSize); % 保存为灰度图也可映射到jet色图 imwrite(img, IR007_0_CWT.png);这段代码有几个关键点。第一cwtft比老版的cwt更灵活支持自定义尺度和小波。第二归一化必须做否则不同样本的能量差异会让网络学偏。第三imresize默认用双线性插值对时频图来说够用但如果追求极致可以用interp2做样条插值。实操心得CWRU数据里每个文件包含多个通道驱动端DE和风扇端FE的故障特征频率不同。做诊断时最好固定用DE通道混用会导致类别标签混乱。另外每个文件只取前4096个点可能不够我后来改成滑动窗口切分每个样本2048点重叠50%这样数据量翻了十几倍模型泛化明显更好。2.2 五种模型的网络结构设计纯CNN的结构我设计得比较克制3个卷积块每个块是Conv-BN-ReLU-MaxPool卷积核3×3通道数32-64-128最后全局平均池化接全连接层。为什么不用更大的卷积核因为时频图里的故障特征表现为细密的纹理5×5或7×7会过度平滑。ResNet我用了标准的BasicBlock两个3×3卷积加跳跃连接。层数设为18层2222输入层把7×7卷积改成3×3因为224×224的时频图不需要那么大的感受野起步。这里有个细节ResNet的初始池化层我保留了但把stride从2改成1避免过早丢失时频分辨率。CNN-SVM的CNN部分和纯CNN一样但去掉最后的Softmax层把128维的全局平均池化输出作为特征向量。SVM用Matlab的fitcecoc核函数选RBF用贝叶斯优化自动调参。注意特征向量一定要做L2归一化否则SVM的核矩阵计算会不稳定。CNN-BiGRU和CNN-LSTM的CNN部分只保留前两个卷积块输出特征图后沿时间轴展开成序列。BiGRU隐藏层设为128双向拼接后256维LSTM同样128隐藏单元。这里的关键是CNN输出的特征图尺寸要合适太大则循环层参数爆炸太小则信息损失严重。我最终把CNN输出控制在16×16×64展开后序列长度256每个时间步64维。2.3 训练策略学习率、批大小与早停所有模型统一用Adam优化器初始学习率1e-3每20个epoch衰减0.5。批大小设为32——CWRU数据量不大批太大梯度估计不准批太小训练不稳定。损失函数用交叉熵但CNN-SVM例外它用SVM的铰链损失。早停策略我设了patience15监控验证集准确率。实测下来纯CNN在30个epoch左右收敛ResNet需要50个epochCNN-BiGRU和CNN-LSTM因为循环层的存在收敛更慢大概80个epoch。这里有个反直觉的现象CNN-SVM虽然不能端到端训练但收敛最快因为SVM的优化是凸的不存在局部极小值问题。注意不要用测试集调参我见过有人拿测试集准确率来选模型这是典型的学术不端。正确做法是划分训练集/验证集/测试集比例6:2:2验证集用于早停和超参搜索测试集只在最后评估一次。3. 实操过程与核心环节实现3.1 数据准备从CWRU原始文件到训练集CWRU数据的目录结构比较乱我写了个脚本统一整理。以12kHz驱动端数据为例正常样本Normal有4个文件内圈故障IR有3种直径×4种负载12个文件外圈故障OR同样12个滚动体故障B12个。总共40个文件每个文件取前120000个点滑动窗口切分后得到约2000个样本。标签编码我用了两种方案一种是按故障类型分4类Normal, IR, OR, B另一种是按故障类型直径分10类。前者准确率普遍在99%以上后者会降到95%左右——这才是真正有区分度的任务。我建议做10分类4分类太简单了模型之间拉不开差距。数据增强方面我试过加高斯噪声、时间平移、幅度缩放。结论是加噪声最有效信噪比降到5dB时ResNet的准确率只掉2个百分点纯CNN掉5个百分点。时间平移和幅度缩放基本没用因为CWT本身对平移和缩放就有一定不变性。3.2 训练过程实录Loss曲线与准确率变化以ResNet-18为例训练集Loss从初始的2.3降到0.05用了约40个epoch验证集Loss在35个epoch后开始反弹触发早停。最终测试集准确率98.7%混淆矩阵显示主要混淆发生在IR007和IR014之间——这两种故障的直径差异只有0.007英寸时频图上的能量分布确实接近。CNN-BiGRU的训练曲线更平滑但收敛更慢。前20个epoch验证集准确率一直在85%左右徘徊直到第45个epoch才突破95%。这说明循环层需要更长时间来学习时序依赖。最终测试准确率98.2%比ResNet略低但训练时间多了近一倍。CNN-SVM的“训练”分两阶段CNN部分训练30个epoch后冻结提取所有样本的特征向量然后训练SVM。SVM的训练只用了不到10秒但特征提取花了5分钟。最终准确率98.9%略高于ResNet但推理时需要同时加载CNN和SVM部署稍麻烦。3.3 结果对比五种模型的硬指标模型测试准确率训练时间分钟推理时间ms/样本参数量MCNN97.3%123.20.8ResNet-1898.7%258.511.2CNN-SVM98.9%180.212.10.8SVCNN-BiGRU98.2%4515.32.1CNN-LSTM98.4%5216.82.8从表里能看出几个有意思的点。第一ResNet的参数量是纯CNN的14倍但准确率只提升了1.4个百分点边际效益递减明显。第二CNN-SVM准确率最高但推理最慢因为SVM的决策函数涉及大量支持向量的核计算。第三CNN-LSTM比CNN-BiGRU略好但训练时间多了15%这个代价是否值得取决于你的算力预算。实操心得如果追求部署轻量化纯CNN足够如果追求极致准确率且不在乎推理延迟CNN-SVM是首选ResNet是平衡点但要注意参数量。CNN-BiGRU和CNN-LSTM在CWRU数据上优势不明显因为时频图的时间轴长度有限循环结构的优势发挥不出来。如果换成原始振动信号直接输入循环结构可能会更好。4. 常见问题与排查技巧实录4.1 训练不收敛从Loss曲线诊断问题问题一Loss震荡剧烈准确率上不去。最常见的原因是学习率太大。我一开始用1e-2Loss在2.0附近来回跳降到1e-3后立刻平稳。如果降学习率还不行检查数据归一化——CWT时频图如果不做max归一化不同样本的能量差异会让梯度尺度不一致。问题二训练集准确率高但验证集低。典型过拟合。解决方案加Dropout我设在0.5、加L2正则化权重衰减1e-4、减少模型参数量。ResNet-18在CWRU上已经偏大换成ResNet-10可能更合适。问题三Loss突然变成NaN。检查SVM特征提取时的归一化如果特征向量有零范数RBF核会除零。另外CWT的尺度范围如果包含0cwtft会报错尺度必须从1开始。4.2 类别不平衡CWRU数据的隐藏陷阱CWRU数据里正常样本远少于故障样本如果直接训练模型会偏向预测故障类。我的做法是对正常样本做过采样用SMOTE在特征空间插值生成合成样本。注意SMOTE要在CWT转换之后做不能在原始信号上做否则插值出的信号没有物理意义。另一个陷阱是负载混淆。0马力负载下的故障特征频率和3马力不同如果训练集只包含0马力测试集包含3马力准确率会暴跌。正确做法是按负载分层抽样确保每个负载在训练集和测试集中都有代表。4.3 常见问题速查表现象可能原因排查方法解决方案Loss不下降学习率过小/数据未归一化打印梯度范数调大学习率/加归一化验证集准确率波动大批大小太小/数据量不足增大批大小重跑批大小调到64/加数据增强推理速度慢模型参数量大/SVM支持向量多用profiler分析剪枝/换线性核SVM混淆矩阵对角线外值高类别特征相似/标签错误可视化时频图检查标签/增加特征维度训练时间过长循环层序列太长检查CNN输出尺寸减小序列长度/用GRU替代LSTM4.4 独家避坑技巧技巧一CWT的尺度参数不要用默认值。Matlab的cwt默认尺度是2^(1/16)到2^10这个范围对CWRU数据偏大低频段分辨率过剩。手动设1:256更合适。技巧二ResNet的预训练权重慎用。ImageNet的权重是在自然图像上训练的振动时频图的纹理统计完全不同。我试过冻结前几层微调准确率反而比从头训练低0.5个百分点。如果数据量确实少可以考虑用CWT时频图预训练一个自编码器再迁移到分类任务。技巧三CNN-SVM的SVM核函数选RBF但gamma要调。默认gamma1/n_features在128维特征上就是1/128这个值偏小导致决策边界过于平滑。我用贝叶斯优化搜到的最优gamma在0.01左右准确率提升了0.8个百分点。技巧四循环层的双向拼接方式影响很大。BiGRU的forward和backward输出我试过相加、平均、拼接三种方式拼接效果最好但参数量翻倍。如果算力有限相加也能用准确率只差0.3个百分点。技巧五测试集评估要跑多次取平均。深度学习模型有随机性单次测试准确率可能波动±0.5%。我通常跑5次取均值和标准差这样对比模型才公平。5. 模型部署与工程化考量5.1 从Matlab到C的推理加速Matlab训练完模型后可以用codegen生成C代码但只支持部分网络层。更通用的做法是导出ONNX模型然后用ONNX Runtime推理。ResNet-18导出ONNX后在Intel i7上单样本推理只要2ms比Matlab快4倍。CNN-SVM的部署麻烦一些因为SVM不在ONNX标准里。我的做法是把SVM的决策函数用C重写支持向量和系数从Matlab导出成CSV。RBF核的计算就是指数函数实现起来不难。5.2 在线诊断的滑动窗口策略实际部署时振动信号是连续采集的需要滑动窗口切分。窗口长度2048点步长512点这样每0.17秒出一个诊断结果。如果连续5个窗口都判为同一故障才触发报警避免误报。注意在线诊断的CWT计算量不小1到256尺度的小波变换在嵌入式设备上可能跑不动。可以考虑用快速小波变换近似或者降低尺度分辨率到1:2:256。5.3 模型更新与增量学习设备运行工况会变化模型需要定期更新。全量重训太慢我用的是弹性权重巩固EWC做增量学习在新数据上微调时对重要参数加约束防止遗忘旧知识。实测下来增量学习5轮后旧故障类别的准确率只掉了1.2个百分点而全量重训需要8倍的时间。6. 个人实操体会与后续扩展方向这套代码我前后调了三个月踩过的坑比写过的代码还多。最大的体会是数据质量比模型架构重要得多。CWRU数据虽然干净但滑动窗口的切分方式、归一化的策略、标签的编码方案每一个细节都会影响最终结果。我见过有人用同样的ResNet准确率差5个百分点问题就出在数据预处理上。另一个体会是不要迷信SOTA。CNN-BiGRU和CNN-LSTM在论文里经常被吹得天花乱坠但在CWRU这个特定任务上它们并没有显著优于ResNet。模型选型要基于数据特性而不是论文热度。后续我打算往两个方向扩展。一是多传感器融合CWRU只有单通道振动信号实际工业场景还有温度、电流、声发射多模态融合应该能提升鲁棒性。二是域自适应把CWRU上训练的模型迁移到其他轴承数据集比如帕德博恩大学的数据解决跨工况泛化问题。这两个方向都比单纯换模型架构更有价值。最后分享一个小技巧训练时把验证集的混淆矩阵实时画出来能直观看到哪些类别在混淆。我就是在混淆矩阵里发现IR007和IR014容易混后来专门对这两类做了数据增强准确率提升了1.5个百分点。这个技巧不花哨但很实用。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询