官方公众号:52phm,与工业互联网人一起成长

2021-12-10 18:15:00    互联网    884    当前专栏:故障诊断    分类:算法开发    本站官网:www.52phm.cn   

公众号 ...

手把手教你:基于深度学习的滚动轴承故障诊断

系列文章

手把手教你:玩转图像分类和目标检测系统

手把手教你:图像识别的垃圾分类系统

手把手教你:基于粒子群优化算法(PSO)优化卷积神经网络(CNN)的文本分类

一、项目简介

本文主要介绍如何使用python搭建:一个基于深度学习的滚动轴承故障诊断系统

项目中涉及使用了多种方法对比检测结果,包括: - 传统机器学习方法:随机森林- 深度学习方法:CNN- 增加残差模块后的深度学习方法:CNNResBlock *如各位童鞋需要更换训练数据,完全可以根据源码将图像和标注文件更换即可直接运行。*

博主也参考过网上故障检测的相关文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个基于深度学习的轴承故障预测系统即可。

也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。

如果您有以上想法,那就找对地方了!

不多废话,直接进入正题!

二、数据介绍

本次项目的数据是使用的凯斯西储大学(Case Western Reserve University)轴承数据中心的开源数据集。

数据文件采用Matlab格式。每个文件都包含风扇和驱动端振动数据以及电机转速。对于所有文件,变量名称中的以下项表示:

  • DE - 驱动端加速计数据- FE - 风扇端加速计数据- BA - 基础加速计数据- time - 时间序列数据- RPM- 测试期间的转速

2.1 故障类型图示

故障类型图示

2.2 数据图示

数据图示

2.3 查看单个数据文件情况

单个数据文件情况

2.4 数据分布情况

博主对: 1. 正常1. 内圈故障1. 外圈故障1. 滚动体故障

四种不同情况下轴承的数据分布进行了可视化展示,由于图示较多,这里只展示内圈故障的一个文件的数据分布情况,其他情况感兴趣的同学可以下载完整代码运行看看。

数据分布情况

三、数据预处理

通过可视化观察发现数据波长周期基本上为100-200左右,博主这边使用1000作为采样长度,对所有轴承数据进行采样,并构建label。我们这次需要学习并预测的是输入的轴承数据是为:正常、内圈故障、外圈故障、滚动体故障。中哪一类,因此是一个4分类的任务。处理后数据分布如下:

  • 正常样本:1696个- 内圈故障样本:1455个- 滚动体故障样本:1457个- 外圈故障样本: 1457个

然后对数据进行采样,保证每类数据1400个。

data_train = np.asarray(data_normal[:1400]  data_inner[:1400]  data_ball[:1400]  data_outer[:1400],dtype = 'float64')
label = np.asarray(label_normal[:1400]  label_inner[:1400]  label_ball[:1400]  label_outer[:1400],dtype = 'int64')

print("处理后样本shape:",data_train.shape)
print("处理后数据类别分布:",Counter(label))

# 保存数据
np.save("train_data/train_data.npy",data_train)
np.save("train_data/label.npy",label)
print("数据保存成功,位置:/train_data/")

数据情况

四、模型训练及评估

4.1 加载数据

def load_data():
    # 读取数据
    x = np.load('train_data/train_data.npy')
    y = np.load('train_data/label.npy')
    num = len(Counter(y))
    print("类别数量为:", num)
    return x, y, num

# 读取数据
data, label, label_count = load_data()
# 生成训练集测试集,70%用作训练,30%用作测试
train_data, train_label, val_data, val_label = create_train_data(data, label, 0.7)
print("*"*10)
print("训练集数量:",len(train_label))
print("测试集数量:",len(val_label))

4.2 随机森林

# 模型参数设置
rfc = RandomForestClassifier(n_estimators = 50,min_samples_split = 5,min_samples_leaf = 4,max_depth = 5)

# 模型准确率和损失值
acc_list = []
loss_list = []
train_acc_list = []
print("开始训练")
for i in range(1,epoch 1):

    # 模型训练
    rfc.fit(m_train,train_label)

    # # 训练集
    # y_train = rfc.predict(m_train)

    # 测试集
    y_pred = np.asarray(rfc.predict(m_val),dtype = 'int64')

    # 计算准确率
    acc = round(accuracy_score(val_label, y_pred),3)

    # 训练集
    y_pred = np.asarray(rfc.predict(m_train),dtype = 'int64')
    # 计算准确率
    train_acc = round(accuracy_score(train_label, y_pred),3)

    # print('测试集准确率:', round(accuracy_score(val_label, y_pred),3))
    acc_list.append(acc)
    train_acc_list.append(train_acc)

    # 计算损失值
    # 使用one-hot编码计算损失值
    noe_hot = OneHotEncoder(sparse = False)

    y_pred_o = noe_hot.fit_transform(y_pred.reshape(1, -1))
    val_label_o = noe_hot.fit_transform(val_label.reshape(1, -1))
#     loss = round(log_loss(val_label_o,y_pred_o),3)
    # print("loss:",round(log_loss(val_label,y_pred),3))
#     loss_list.append(loss)
    print("完成第",i,"轮训练,测试集准确率:",acc)

4.2.1 模型训练

随机森林训练

4.2.2 模型测试

随机森林测试

4.3 CNN

构建一个CNN网络,结构如下:
CNN网络结构

4.3.1 模型训练

CNN训练

4.3.2 模型测试

cnn测试
可以看到,使用原始cnn模型训练后准确率只有83。类标2即“内圈故障”的召回率较低,无法准确有效识别。

4.4 CNNResBlock

模型构建:

import n_model as md
import tensorflow as tf
# 模型参数
model_param = {<!-- -->
    "a_shape": 1000,
    "b_shape": 2,
    "label_count": 4,
    "num_b":5
}

data_shape=(model_param['a_shape'],model_param['b_shape'])
# 模型实例化
model = md.CNN_ResNet_model(model_param['label_count'] , model_param['num_b'] , data_shape=data_shape)
# 使用学习率进行训练
res_model = model.model_create(learning_rate = 1e-4)
# 模型网络结构
print("实例化模型成功,网络结构如下:")
print(res_model.summary())
# 设置模型log输出地址
log_dir = os.path.join("logs/ResNet")
if not os.path.exists(log_dir):
    os.mkdir(log_dir)

4.4.1 模型训练

resnet训练

4.4.2 模型测试

ResNet模型测试
可以看到,增加了残差模块的CNN网络已经能准确对不同故障类型进行分类,准确率和召回率均在95分以上。

五、完整代码地址

由于项目代码量和数据集较大,感兴趣的同学可以下载完整代码,使用过程中如遇到任何问题可以在评论区评论或者私信我,我都会一一解答。

完整代码下载:
【代码分享】手把手教你:基于深度学习的滚动轴承故障诊断



版权声明:遵循 CC 4.0 BY-SA 版权协议
原文链接:https://blog.csdn.net/weixin_43486940/article/details/120324335

免责声明:信息来源于互联网聚合整理或者作者原创,非原创文章标示"互联网",原创文章标示"作者昵称",本文仅代表文章作者的个人观点,且文中陈述文字和内容的时效性、真实性与本站无关,请读者仅作参考,如发现有害或侵权内容,请联系我们将在第一时间进行核实处理。


[推荐] 一种基于CNN的数据驱动故障诊断方法

2021-12-09 14:46:03    互联网    1564    分类:算法开发    专栏:故障诊断   


[推荐] 一篇关于轴承故障诊断的综述

2021-12-13 13:17:35    互联网    2397    分类:算法开发    专栏:故障诊断   


[推荐] 故障诊断之基于振动信号的阶比谱分析

2022-05-31 11:08:40    互联网    1285    分类:算法开发    专栏:振动信号预处理   



转发此文章到社区


进群

让志同道合读者学习交流



美国西储大学滚动轴承实验数据集

本文章介绍了美国西储大学滚动轴承实验数据集,并提供下载入口,欢迎阅读~

2021-12-04 23:42:15    博客笔记    2256    分类:边缘感知    专栏:轴承   


滚动轴承故障特征频率计算公式

依据滚动轴承的结构参数,可以计算出轴承滚道外圈故障、滚道内圈故障、滚动体故障和保持架故障所产生的特征频率,具体的计算公式如下:(1)外圈故障(2)内圈故障(3)滚动体故障(4)保持架故障式中:ddd代表滚动体直径,DDD表示滚道节径,α\alphaα表示轴承接触角,zzz表示滚动体个数,fff表示转频...

2021-12-08 10:24:10    互联网    1375    分类:算法开发    专栏:故障诊断   


故障诊断技术体系阐述

1.引言 智能故障诊断(IFD)是指将机器学习理论,如人工神经网络(ANN)、支持向量机(SVM)和深度神经网络(DNN)应用于机器故障诊断。这种方法利用机器学习理论,从采集的数据中自适应地学习机器的诊断知识,而不是利用工程师的经验和知识。具体而言,IFD需要构建一个诊断模型,该模型能够自动将收集的数据与机器的健康状态之间的关系连接起来。 机器学习的早期研究可追溯到1950年,1980年左右成为了人工智能的一个重要方向,并于2010年开始得到了广泛的应用。在此期间发明了许多传统理论,如AN...

2021-12-09 11:31:41    互联网    979    分类:算法开发    专栏:故障诊断   


智能故障诊断方法总结

1.故障诊断方法可分为三个步骤:信号处理、特征提取、模式分类。2.信号处理方法通常包括:时域处理(提取振动信号的相关指标);频域处理(包络谱分析,频谱分析);时频域分析(小波分析,傅里叶变换)3.故障诊断方法:专家系统故障诊断法,模糊故障诊断、灰色关联度故障诊断、神经网络故障诊断、数据融合故障诊断。...

2021-12-09 11:32:32    互联网    1467    分类:算法开发    专栏:故障诊断   


故障诊断的性能评估指标

评价一个故障诊断系统的性能指标有:   1)故障检测的及时性:是指系统在发生故障后,故障诊断系统在最短时间内检测到故障的能力。故障发生到被检测出的时间越短说明故障检测的及时性越好。   2)早期检测的灵敏度:是指故障诊断系统对微小故障信号的检测能力。故障诊断系统能检测到的故障信号越小说明其早期检测的灵敏度越高。   3)故障的误报率和漏报率:误报指系统没有出去故障却被错误检测出发生故障

2021-12-13 13:51:37    互联网    1670    分类:算法开发    专栏:故障诊断   


旋转机械故障诊断学基础知识

1. 机械故障诊断涉及哪些学科?做哪方面的科学研究?包含了哪些技术?形成了哪些方法?解决什么工程问题?(1) 涉及的学科有:机械、力学、电子、计算机、信号处理、人工智能等。(2) 机械故障诊断是研究机器或机组运行状态的变化在诊断信息中的反映,因此包括信号获取与传感技术、故障机理与征兆联系、信号处理与特征提取、识别分类与智能决策等方面的研究,根据基础和关键科学问题又可细分为机械系统运行状态下故障动态演化机理、机械系统动态信号处理的内积匹配原理与微弱信号特征增强机制、故障定量识别和剩余寿命预测原理、

2021-12-13 14:30:26    互联网    1602    分类:算法开发    专栏:故障诊断   


机械故障诊断方法论

1. 故障诊断概念故障诊断主要研究如何对系统中出现的故障进行检测、分离和辨识 , 即判断故障是否发生 , 定位故障发生的部位和种类 , 以及确定故障的大小和发生的时间等 。2. 故障诊断方法故障诊断防范可分为定性分析和定量分析两大类 , 如图 1 所示。 其中 , 定量分析方法又分为基于解析模型的方法和数据驱动的方法 , 后者又进一步包括机器学习类方法、多元统计分析类方法、信号处理类方...

2021-12-13 14:48:01    互联网    1735    分类:算法开发    专栏:故障诊断   


故障诊断期刊文献分析

看看故障诊断研究重点方向在哪?故障诊断总发文量统计如下:前20个主要主题词分布情况:前20个次要主题词分布情况:录用期刊分布:期刊类型:学科分布情况:发文机构分布:基金分布情况:...

2021-12-13 17:11:53    互联网    2717    分类:算法开发    专栏:故障诊断   


旋转设备故障诊断轴心轨迹分析

轴心位置分析:         1、轻微不对中,轴心轨迹则呈椭圆形;         2、在不对中方向上加一个中等负载,轴心轨迹变为香蕉形;         3、严重不对中故障会使转子的轴心轨迹图呈现外“8”字形,这种具有8字形的轴心轨迹,一般表现为二倍频或四倍频的成分较大。         4、轴心轨迹呈“8”字型,是典型的不对中故障所致。最大的可能是2号轴承附近的发电机与同

2021-12-13 17:31:46    互联网    1782    分类:算法开发    专栏:故障诊断   


深度学习对振动类光谱信息的处理论文笔记

光谱原始数据通常存在伪影,噪声等问题,而预处理步骤可能对准确率造成影响,同时对不同数据的适应性差,神经网络能提供端到端的方法(或者省去某个预处理步骤),因而具有一定前景。数据驱动的深度学习技术可以发现大数据集中复杂的结构,并从数据中提取关键特征。一.综述文章:Deep learning for vibrational spectral analysis: Recent progress and a practical guide(2019)自2017年提出,将深度学习应用于光谱处理这一领域,迄

2021-12-14 22:12:02    互联网    549    分类:论文速递    专栏:未分组