资讯动态

残差网络多尺度特征轴承故障诊断【附代码】

发布时间:2026/9/29 6:25:16 来源:尧图企业网站定制
✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1双路径时频域特征提取与融合网络针对传统一维卷积神经网络仅从时域提取特征、忽略频域信息的问题设计了一种双路径特征提取网络。第一路径直接以原始一维振动信号作为输入通过一维卷积神经网络提取时域波形特征网络结构包含三个卷积块每个卷积块由卷积层、批归一化、ReLU和最大池化组成。第二路径将原始信号通过短时傅里叶变换转换为二维时频谱图时间-频率-幅值然后利用二维卷积神经网络提取频域特征。二维卷积神经网络采用预训练的ResNet-18作为主干利用其在ImageNet上的迁移学习能力加速收敛。两条路径提取的特征向量经过Concat拼接后送入一个全连接分类器进行分类。在凯斯西储大学轴承数据集上该双路径模型准确率超过99%相比单一的一维卷积神经网络提高了约2个百分点证明频域信息的引入有效增强了特征判别能力。2深度残差收缩网络与多尺度卷积注意力的抗噪声增强为提升模型在强噪声环境下的鲁棒性提出了深度残差收缩网络与多尺度卷积注意力结合的诊断模型。深度残差收缩网络在残差块中嵌入了一个软阈值化子网络该子网络自动学习每个通道的阈值对不重要的小幅值特征进行软阈值收缩从而抑制噪声和冗余信息。每个残差块的输出经过全局平均池化、全连接层和sigmoid激活得到缩放系数再与残差路径相乘实现自适应特征重标定。同时在二维卷积特征提取分支中加入多尺度卷积模块使用三种不同尺寸的卷积核3×3、5×5、7×7和通道注意力机制SENet使模型能够捕捉不同尺度的故障冲击成分并自动增强重要通道。在CWRU数据集中加入信噪比为-6dB的高斯噪声时该模型仍能保持90%以上的准确率而基线模型准确率降至70%以下。3跨数据集泛化性能验证与模型为了验证模型在不同轴承数据集上的泛化能力在凯斯西储大学、东南大学和哈尔滨工业大学三个数据集上进行了交叉测试。采用域自适应微调策略先在源数据集上预训练然后在目标数据集上用少量标注样本进行微调。实验表明所提DRSN-2DCNN模型在东南大学数据集上达到99.60%准确率在哈尔滨工业大学数据集上达到98.25%显著优于对比模型。为了便于工业部署对模型进行轻量化改造将部分标准卷积替换为深度可分离卷积使用全局平均池化替代全连接层并采用知识蒸馏技术将大模型知识迁移到小模型上。压缩后的模型参数量减少80%推理速度提升3倍准确率仅下降0.5%。该轻量模型已成功部署在嵌入式设备上进行实时轴承故障监测。import torch import torch.nn as nn import torch.nn.functional as F import numpy as np # 深度残差收缩块 class ResidualShrinkageBlock(nn.Module): def __init__(self, in_channels, out_channels, stride1): super().__init__() self.conv1 nn.Conv1d(in_channels, out_channels, 3, stride, 1) self.bn1 nn.BatchNorm1d(out_channels) self.conv2 nn.Conv1d(out_channels, out_channels, 3, 1, 1) self.bn2 nn.BatchNorm1d(out_channels) # 阈值学习子网络 self.gap nn.AdaptiveAvgPool1d(1) self.fc nn.Sequential(nn.Linear(out_channels, out_channels//2), nn.ReLU(), nn.Linear(out_channels//2, out_channels), nn.Sigmoid()) self.shortcut nn.Conv1d(in_channels, out_channels, 1, stride) if in_channels ! out_channels else nn.Identity() def forward(self, x): shortcut self.shortcut(x) out F.relu(self.bn1(self.conv1(x))) out self.bn2(self.conv2(out)) # 软阈值 features self.gap(out).squeeze(-1) thresholds self.fc(features).unsqueeze(-1) out out * thresholds out F.relu(out shortcut) return out # 多尺度卷积注意力模块 class MultiScaleChannelAttention(nn.Module): def __init__(self, in_channels, kernel_sizes[3,5,7]): super().__init__() self.convs nn.ModuleList([nn.Conv2d(in_channels, in_channels, (k,1), padding(k//2,0)) for k in kernel_sizes]) self.attn nn.Sequential(nn.AdaptiveAvgPool2d(1), nn.Flatten(), nn.Linear(in_channels, in_channels//4), nn.ReLU(), nn.Linear(in_channels//4, in_channels), nn.Sigmoid()) def forward(self, x): multi_feats [conv(x) for conv in self.convs] fused torch.stack(multi_feats, dim0).mean(dim0) weights self.attn(fused).view(fused.size(0), fused.size(1), 1, 1) return x * weights # 双路径融合模型 class DualPathDRSN(nn.Module): def __init__(self, num_classes10): super().__init__() # 一维路径 self.conv1d nn.Sequential( ResidualShrinkageBlock(1, 32), ResidualShrinkageBlock(32, 64), nn.AdaptiveAvgPool1d(1) ) # 二维路径输入2D时频图 self.conv2d nn.Sequential( nn.Conv2d(1, 32, 3, padding1), nn.ReLU(), MultiScaleChannelAttention(32), nn.Conv2d(32, 64, 3), nn.ReLU(), nn.AdaptiveAvgPool2d(1) ) self.fc nn.Linear(128, num_classes) def forward(self, x1d, x2d): feat1d self.conv1d(x1d).squeeze(-1) feat2d self.conv2d(x2d).squeeze(-1).squeeze(-1) combined torch.cat([feat1d, feat2d], dim1) return self.fc(combined) # 轻量化知识蒸馏示例 def distill(teacher_model, student_model, dataloader, temperature4.0): teacher_model.eval() student_model.train() optimizer torch.optim.Adam(student_model.parameters()) for data, labels in dataloader: with torch.no_grad(): teacher_logits teacher_model(data) student_logits student_model(data) distill_loss F.kl_div(F.log_softmax(student_logits/temperature, dim1), F.softmax(teacher_logits/temperature, dim1), reductionbatchmean) ce_loss F.cross_entropy(student_logits, labels) loss distill_loss * temperature**2 0.5 * ce_loss optimizer.zero_grad() loss.backward() optimizer.step() return student_model ,如有问题可以直接沟通

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑