基于多传感器信号融合的滚动轴承故障诊断(Pytorch)
为了解决单一传感器数据无法全面反映滚动轴承故障状态信息的问题,本文提出了一种基于多传感器数据融合的故障诊断技术。
该方法首先通过通道拼接技术整合振动信号与电流信号,形成多通道数据,从而更全面地描述设备运行状况;然后,采用CBAM注意力机制对不同通道的数据进行自适应加权处理,有效减少无关信息的干扰,提高特征提取的准确性。最后,在分类器中加入softmax层,以输出最终的故障诊断结果。
实验结果显示,本方法的分类准确率高达99.96%,展现了良好的鲁棒性和自适应性能。参考文献包括《基于卷积神经网络的智能故障诊断方法研究》中北大学博士论文第四章。
具体实现方面,数据预处理支持一维原始数据,使用的网络模型包括1DCNN、1DResNet及1DRsNet,数据集选用的是德国帕德博恩开源滚动轴承数据集(PN_Dataset),整个项目基于PyTorch框架开发。输出结果包含损失曲线图、准确率曲线图、混淆矩阵以及t-SNE图等。
为了使数据预处理更加直观,我们直接展示了相关代码示例:
class SensorFusionDataset(Dataset):
def __init__(self, vib_signals, current_signals, labels):
self.data = torch.stack([vib_signals, current_signals], dim=1) # 通道维度拼装
self.labels = labels
def __getitem__(self, index):
return self.data[index], self.labels[index]
这一过程类似于为模型配备了一个VR眼镜,使其能够同时感知振动强度和电流变化。注意这里使用了dim=1沿通道维度进行拼接,生成一个二维张量(样本数量×通道数量×序列长度)。
模型架构的设计是整个项目的重点,主要包括三个核心组件:1DCNN作为基础层,ResNet用于增强模型,最后通过CBAM注意力机制完成。请参见以下残差块的设计示例:
class ResidualBlock(nn.Module):
def __init__(self, in_channels):
super().__init__()
self.conv1 = nn.Conv1d(in_channels, in_channels*2, 3, padding=1)
self.bn1 = nn.BatchNorm1d(in_channels*2)
self.conv2 = nn.Conv1d(in_channels*2, in_channels, 1)
self.cbam = CBAM(in_channels) # 注意力开关
def forward(self, x):
residual = x
x = F.relu(self.bn1(self.conv1(x)))
x = self.conv2(x)
x = self.cbam(x) # 关键在此!
return F.relu(x + residual)
在残差结构内部嵌入了CBAM模块,这相当于为每个特征通道安装了一个智能调节器。首先通过通道注意力计算各个通道的重要性,随后通过空间注意力确定关键区域,避免模型在无关噪声中迷失方向。
在模型训练过程中,一个小技巧是先使用AdamW优化器快速收敛,后期切换至SGD进行精细化调整。对于损失函数的选择,建议采用混合策略:
class HybridLoss(nn.Module):
def __init__(self, alpha=0.7):
super().__init__()
self.ce = nn.CrossEntropyLoss()
self.focal = FocalLoss()
self.alpha = alpha
def forward(self, preds, targets):
return self.alpha*self.ce(preds, targets) + (1-self.alpha)*self.focal(preds, targets)
这种损失函数组合如同经验丰富的驾驶员带领新手,交叉熵确保了总体方向的正确性,而Focal Loss则专注于处理困难样本,经实践验证,这种方法可提升0.3%的准确率。
在可视化部分,生成t-SNE图的代码尤为关键:
def visualize_tsne(features, labels):
tsne = TSNE(n_components=2, perplexity=15)
embedded = tsne.fit_transform(features.detach().cpu().numpy())
plt.scatter(embedded[:,0], embedded[:,1], c=labels, cmap='jet', alpha=0.6)
plt.colorbar(ticks=range(10))
请注意,perplexity参数设置为15是经过网格搜索验证的最佳选择,过大的值可能导致类别边界模糊,过小则可能引起分布碎片化。实际运行结果呈现出类似彩色银河系的效果,不同故障类别清晰地聚集在一起。
在实验过程中还发现了一个有趣的现象:振动信号在低频段(<500Hz)的特征比高频段更具区分力。这提示我们在频率域处理时增加动态带通滤波器,进一步提升了0.02%的准确率。虽然这只是一个小技巧,但值得单独撰写一篇文章详细介绍。
最终,模型在测试集上的准确率达到了99.96%,这一成绩并非依赖于增加网络深度,而是得益于多传感器特征的天然互补性和注意力机制的精准定位。对于未来遇到的类似多源数据问题,推荐尝试本方案,同时确保数据对齐的质量,避免传感器间产生冲突。



雷达卡


京公网安备 11010802022788号







