首先,利用短时傅里叶变换将原始振动信号转换为时频图像,并通过动态阈值增强故障特征;然后,采用预训练的VGG16网络进行迁移学习,在保留通用视觉特征的基础上微调分类层,实现对10种健康状态的高精度识别。

为了增强模型的可信度,算法引入Grad-CAM热力图可视化模型的决策依据,并设计Faithfulness指标量化解释的忠实性。
此外,结合故障机理知识和大语言模型,自动生成符合专家习惯的诊断报告,并在检测到严重故障时通过邮件实时告警。
该方法在CWRU轴承数据集上表现出优异的分类性能,同时为工业场景下的智能运维提供了透明、可解释的决策支持。
算法步骤
数据加载与类别映射遍历指定,请根据实际情况修改
file_list
get_label_from_filename(filename):
'Normal'
get_label_from_filename(file_name)
label
mat_data[signal_key[0]].flatten()
展平为一维数组
====================
信号预处理:下采样
====================
ORIGINAL_FS
downsampled_signals.append(resampled)
print(f"信号已下采样至
{target_fs/ORIGINAL_FS*100:.1f}%")
3.2
enumerate(downsampled_signals):
current_label
stft_labels.append(current_label)
=
====================
数据集划分
====================
将标签转换为
====================
构建迁移学习模型
====================
base_model
VGG16(weights='imagenet',
224,
冻结所有卷积层(初期不更新这些权重)
for
activation='relu')(x)
=
activation='softmax')(x)
个输出类别
Model(inputs=base_model.input,
编译模型
model.compile(optimizer=Adam(learning_rate=0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
====================
模型训练
====================
history
====================
模型评估
====================
绘制训练曲线
plt.plot(history.history['accuracy'],
plt.plot(history.history['val_accuracy'],
plt.legend()
plt.plot(history.history['loss'],
plt.plot(history.history['val_loss'],
plt.legend()
print(classification_report(y_true_classes,
y_pred_classes,
target_names=target_names))
混淆矩阵
confusion_matrix(y_true_classes,
y_pred_classes)
label=f'{target_names[i]}
(AUC
====================
(Grad-CAM)
====================
def
make_gradcam_heatmap(img_array,
model,
[model.get_layer(last_conv_layer_name).output,
model.output]
make_gradcam_heatmap(img_batch,
model,
====================
Faithfulness
====================
def
Faithfulness(删除最显著像素后置信度下降百分比)
"""
make_gradcam_heatmap(img_batch,
model,
layer_name=last_conv_layer,
num_samples=50)
====================
10.
====================
def
extract_heatmap_evidence(heatmap,
target_fs=6000):
generate_llm_report(predicted_label,
evidence):
"继续正常运行,30天后重新评估。
"
elif
"滚动体表面出现剥落或点蚀,产生以滚动体自转频率为特征的冲击。
"
"007"
"早期(0.007英寸)"
action
"密切监视,可在下次维护窗口安排检查。
"
elif
"发展期(0.014英寸)"
action
"计划维护,建议两周内更换轴承。
"
elif
"严重(0.021英寸)"
action
"立即停机更换,存在失效风险。
"
elif
"内圈滚道出现损伤,球体通过缺陷时产生以BPFI为特征的冲击。
"
"007"
"早期(0.007英寸)"
action
"密切监视,可在下次维护窗口安排检查。
"
elif
"发展期(0.014英寸)"
action
"计划维护,建议两周内更换轴承。
"
elif
"严重(0.021英寸)"
action
"立即停机更换,存在失效风险。
"
elif
"外圈滚道出现损伤,产生以BPFO为特征的冲击。
"
"007"
"早期(0.007英寸)"
action
"密切监视,可在下次维护窗口安排检查。
"
elif
"发展期(0.014英寸)"
action
"计划维护,建议两周内更换轴承。
"
elif
"严重(0.021英寸)"
action
"立即停机更换,存在失效风险。
"
else:
datetime.now().strftime("%Y-%m-%d")
prompt
显著频率:~{evidence['dominant_freq']}
模型置信度:{evidence['peak_confidence']}%
物理背景:
维护建议请严格遵循:"{action}"
"""
ollama.chat(model='llama3.2',
'user',
response['message']['content']
def
sendgrid.SendGridAPIClient(api_key=api_key)
from_email
sg.client.mail.send.post(request_body=mail)
response.status_code
extract_heatmap_evidence(heatmap,
target_fs=6000)
generate_llm_report(true_label_name,
evidence)
"YOUR_SENDGRID_API_KEY"
FROM_EMAIL
"sender@example.com"
TO_EMAIL
"recipient@example.com"
send_plain_text_email("【轴承故障告警】严重故障需立即处理",
report,
print("未检测到严重故障,不发送邮件")
/>
Processing》《中国电机工程学报》《宇航学报》《控制与决策》等期刊审稿专家,擅长领域:信号滤波/降噪,机器学习/深度学习,时间序列预分析/预测,设备故障诊断/缺陷检测/异常检测
参考文章:
DeepBear-Health:基于迁移学习和可解释时频分析的滚动轴承故障诊断(Python)
/>https://zhuanlan.zhihu.com/p/2006621128815294039


