Python轴承故障诊断 (16)基于CNN-Transformer融合时频域特征的智能诊断模型

张开发
2026/4/12 9:31:31 15 分钟阅读

分享文章

Python轴承故障诊断 (16)基于CNN-Transformer融合时频域特征的智能诊断模型
1. 轴承故障诊断的挑战与机遇轴承作为机械设备中的核心部件其健康状况直接影响整个系统的运行稳定性。传统的故障诊断方法主要依赖专家经验和简单的信号处理技术但在面对复杂工况和非平稳信号时往往力不从心。我曾在某风电场的故障排查中就遇到过这样的情况——常规方法很难准确识别早期微弱的轴承损伤特征。时频域分析技术如STFT和CWT为我们提供了新的视角。这些方法能够同时捕捉信号的时域和频域特征特别适合处理非平稳的轴承振动信号。举个例子当轴承出现早期点蚀故障时振动信号会表现出特定的瞬态冲击特征这些特征在时频域中会形成明显的脊线模式。2. CNN-Transformer融合模型架构解析2.1 模型整体设计思路我们的混合架构采用了两阶段特征提取策略CNN负责捕捉局部时频特征Transformer则建模全局依赖关系。这种设计源于我在实际项目中的一个发现——单纯的CNN模型在处理长序列信号时会丢失重要的上下文信息。模型输入是原始振动信号经过STFT转换后的时频图维度为[32, 1, 1024]。这里有个小技巧我们特意保留了单通道维度这样后续的CNN卷积操作可以更好地保持信号的空间连续性。2.2 CNN模块的优化细节CNN部分采用了4层1D卷积结构每层配置如下nn.Conv1d(in_channels1, out_channels64, kernel_size3, stride1, padding1) nn.BatchNorm1d(64) nn.ReLU() nn.MaxPool1d(kernel_size2)经过实测这种配置在保持足够感受野的同时计算效率也很高。特别要注意的是第一层的kernel_size设置——太大会模糊重要特征太小则无法有效捕捉局部模式。2.3 Transformer模块的关键改进我们将CNN提取的特征序列送入Transformer编码器时做了两个重要调整位置编码改用可学习的参数而不是固定的三角函数在多头注意力机制后添加了残差连接和层归一化这种改进使得模型在处理不同采样率的信号时表现更加鲁棒。在某个工业现场测试中改进后的模型对转速波动的容忍度提升了约30%。3. 时频域特征融合策略3.1 STFT与CWT的特征互补性STFT短时傅里叶变换和CWT连续小波变换各有优势STFT计算效率高适合在线监测CWT具有更好的时频分辨率适合精细诊断我们在模型中设计了一个特征融合层可以自动加权两种时频表示的特征。具体实现时使用了注意力机制class FeatureFusion(nn.Module): def __init__(self): super().__init__() self.attention nn.Sequential( nn.Linear(256, 128), nn.ReLU(), nn.Linear(128, 2), nn.Softmax(dim-1) ) def forward(self, stft_feat, cwt_feat): combined torch.stack([stft_feat, cwt_feat], dim-1) weights self.attention(combined.mean(dim1)) return weights[...,0]*stft_feat weights[...,1]*cwt_feat3.2 多尺度特征提取技巧针对轴承故障信号的多尺度特性我们采用了金字塔式的特征提取策略原始信号经过不同尺度的STFT变换各尺度特征分别送入CNN分支在Transformer层进行跨尺度特征交互这种方法在检测复合故障如同时存在内圈损伤和滚动体剥落时特别有效我在某汽车变速箱测试中验证了其优越性。4. 模型训练与优化实践4.1 数据增强的关键作用轴承故障数据往往存在样本不平衡问题。我们采用了以下几种数据增强手段时域随机裁剪频域随机掩码添加高斯噪声随机时间扭曲特别要强调的是数据增强应该在时频域进行而不是直接在原始信号上操作。这样可以保持关键的物理特征不被破坏。4.2 损失函数的选择与调优标准的交叉熵损失在类别不平衡时表现不佳。我们采用了改进的Focal Lossclass FocalLoss(nn.Module): def __init__(self, alpha0.25, gamma2.0): super().__init__() self.alpha alpha self.gamma gamma def forward(self, inputs, targets): BCE_loss F.cross_entropy(inputs, targets, reductionnone) pt torch.exp(-BCE_loss) loss self.alpha * (1-pt)**self.gamma * BCE_loss return loss.mean()在实际调参时我发现gamma2.0和alpha0.25的组合在大多数情况下都能取得不错的效果。但对于极端不平衡的数据集如正常样本占90%可能需要适当增大alpha值。5. 工业场景下的部署考量5.1 模型轻量化策略工业现场往往需要实时诊断我们对原始模型进行了以下优化知识蒸馏用大模型指导小模型训练量化感知训练将模型权重转为8位整数选择性注意力只计算关键位置的注意力权重经过优化后模型在嵌入式设备上的推理速度提升了5倍而准确率仅下降不到2%。5.2 实际部署中的注意事项在工厂现场部署时有几个容易踩的坑传感器安装位置不同会导致信号特征变化设备负载变化会影响振动信号幅值环境噪声可能淹没微弱故障特征针对这些问题我们开发了自适应归一化模块可以自动调整输入信号的幅度范围。此外建议在部署前收集目标设备的正常状态数据用于模型微调。

更多文章