独家整理 滚动轴承数据集 故障诊断,预测、分类 最全套数据集 可做对比实验 拍就发自动发货 1.CWRU西储大学轴承数据集 2.MFPT机械故障协会数据集 3.XJTU西安交通大学数据集 4.渥太华变速轴承轴承数据集 5.江南大学轴承数据集
滚动轴承故障诊断、预测与分类综合数据集
数据集描述
该数据集是一个全面的滚动轴承故障诊断、预测与分类的数据集合,旨在帮助研究人员和开发者训练和评估基于深度学习的故障检测、预测和分类模型。数据集涵盖了多个知名机构和大学的研究成果,包括CWRU西储大学轴承数据集、MFPT机械故障协会数据集、XJTU西安交通大学数据集、渥太华变速轴承数据集以及江南大学轴承数据集。通过高质量的数据和详细的标注信息,该数据集为开发高效且准确的故障检测和诊断系统提供了坚实的基础。
数据规模
- 总数据量:根据各子数据集的具体内容而定
- 数据类型:
- 时间序列数据(振动信号、声发射信号等)
- 标签数据(故障类型、故障程度等)
数据特性
- 多样化场景:覆盖了多种类型的滚动轴承在不同工况下的运行数据。
- 高质量手工标注:每条数据都有详细的标签信息,支持直接用于训练故障检测和诊断模型。
- 多类别支持:涵盖多种故障类型和不同程度的故障,丰富了数据集的多样性。
- 无需预处理:数据集已经过处理,可以直接用于训练,无需额外的数据预处理步骤。
应用场景
- 智能监控:自动检测滚动轴承的故障情况,辅助管理人员及时发现并采取应对措施,提高设备的安全性和可靠性。
- 故障诊断:通过分析轴承的运行数据,进行详细的故障诊断,提前预警潜在的故障风险。
- 科研分析:用于研究时间序列分析算法在特定工业应用场景中的表现,特别是在复杂背景和噪声条件下的鲁棒性。
- 教育与培训:可用于安全相关的教育和培训项目,帮助学生和从业人员更好地识别和理解滚动轴承的故障模式。
- 自动化管理:集成到工业系统的管理系统中,实现对设备状态的自动化监测和管理,预防设备故障。
数据集结构
典型的数据集目录结构如下:
1rolling_bearing_fault_dataset/
2├── CWRU/
3│ ├── data/
4│ │ ├── vibration_signal_001.mat
5│ │ └── ...
6│ ├── labels/
7│ │ ├── fault_labels_001.csv
8│ │ └── ...
9├── MFPT/
10│ ├── data/
11│ │ ├── vibration_signal_001.mat
12│ │ └── ...
13│ ├── labels/
14│ │ ├── fault_labels_001.csv
15│ │ └── ...
16├── XJTU/
17│ ├── data/
18│ │ ├── vibration_signal_001.mat
19│ │ └── ...
20│ ├── labels/
21│ │ ├── fault_labels_001.csv
22│ │ └── ...
23├── Ottawa/
24│ ├── data/
25│ │ ├── vibration_signal_001.mat
26│ │ └── ...
27│ ├── labels/
28│ │ ├── fault_labels_001.csv
29│ │ └── ...
30├── Jiangnan_University/
31│ ├── data/
32│ │ ├── vibration_signal_001.mat
33│ │ └── ...
34│ ├── labels/
35│ │ ├── fault_labels_001.csv
36│ │ └── ...
37├── README.txt # 数据说明文件
各子数据集介绍
1. CWRU 西储大学轴承数据集
- 数据来源:Case Western Reserve University (CWRU)
- 数据内容:包含正常和故障状态下滚动轴承的振动信号。
- 故障类型:内圈故障、外圈故障、滚动体故障。
- 采样频率:12,000 Hz 或 48,000 Hz
- 数据格式:MAT 文件
- 特点:广泛应用于滚动轴承故障诊断研究,是业界标准数据集之一。
2. MFPT 机械故障协会数据集
- 数据来源:Machinery Failure Prevention Technology (MFPT) Society
- 数据内容:包含正常和故障状态下滚动轴承的振动信号。
- 故障类型:内圈故障、外圈故障、滚动体故障。
- 采样频率:20 kHz
- 数据格式:MAT 文件
- 特点:提供了丰富的实验数据,适用于多种故障诊断方法的验证。
3. XJTU 西安交通大学数据集
- 数据来源:Xi'an Jiaotong University (XJTU)
- 数据内容:包含正常和故障状态下滚动轴承的振动信号。
- 故障类型:内圈故障、外圈故障、滚动体故障。
- 采样频率:25.6 kHz
- 数据格式:MAT 文件
- 特点:数据集包含了长时间运行的轴承数据,适用于寿命预测和故障演化研究。
4. 渥太华变速轴承数据集
- 数据来源:University of Ottawa
- 数据内容:包含正常和故障状态下滚动轴承的振动信号,特别是在变速条件下。
- 故障类型:内圈故障、外圈故障、滚动体故障。
- 采样频率:20 kHz
- 数据格式:MAT 文件
- 特点:数据集涵盖了不同转速下的轴承数据,适用于研究转速变化对故障诊断的影响。
5. 江南大学轴承数据集
- 数据来源:Jiangnan University
- 数据内容:包含正常和故障状态下滚动轴承的振动信号。
- 故障类型:内圈故障、外圈故障、滚动体故障。
- 采样频率:10 kHz
- 数据格式:MAT 文件
- 特点:数据集提供了多种故障类型的详细数据,适用于多种故障诊断方法的验证和比较。
数据说明
- 数据内容:
- 每个子目录下包含相应的轴承数据。
data/
目录下存放的是原始传感器数据,通常为MAT文件格式。labels/
目录下存放的是对应的标签数据,通常为CSV文件格式。
- 标签类型:
- 故障类型
- 故障程度
- 其他相关特征
- 数据增广:数据集未做数据增广,用户可以根据需要自行进行数据增广。
- 无需预处理:数据集已经过处理,可以直接用于训练,无需额外的数据预处理步骤。
示例代码
以下是一些常用脚本的示例代码,包括加载数据、数据可视化、特征提取、模型训练和评估。
脚本1: 加载数据
1import scipy.io as sio
2import pandas as pd
3import os
4
5def load_data(data_dir, label_dir):
6 data_files = [f for f in os.listdir(data_dir) if f.endswith('.mat')]
7 label_files = [f for f in os.listdir(label_dir) if f.endswith('.csv')]
8
9 data_list = []
10 label_list = []
11
12 for data_file, label_file in zip(data_files, label_files):
13 data_path = os.path.join(data_dir, data_file)
14 label_path = os.path.join(label_dir, label_file)
15
16 data = sio.loadmat(data_path)['vibration_signal']
17 labels = pd.read_csv(label_path)
18
19 data_list.append(data)
20 label_list.append(labels)
21
22 return data_list, label_list
23
24# 示例
25data_dir = 'path/to/CWRU/data'
26label_dir = 'path/to/CWRU/labels'
27data, labels = load_data(data_dir, label_dir)
脚本2: 数据可视化
1import matplotlib.pyplot as plt
2
3def visualize_data(data, labels):
4 fig, ax = plt.subplots(figsize=(10, 5))
5 ax.plot(data, label='Vibration Signal')
6 ax.set_xlabel('Time (samples)')
7 ax.set_ylabel('Vibration (m/s^2)')
8 ax.legend()
9 plt.show()
10
11# 示例
12visualize_data(data[0], labels[0])
脚本3: 特征提取
python
深色版本
1from scipy.signal import welch
2
3def extract_features(data, fs=12000):
4 f, Pxx_den = welch(data, fs, nperseg=1024)
5 features = {
6 'mean': data.mean(),
7 'std': data.std(),
8 'max': data.max(),
9 'min': data.min(),
10 'psd_mean': Pxx_den.mean(),
11 'psd_std': Pxx_den.std(),
12 'psd_max': Pxx_den.max(),
13 'psd_min': Pxx_den.min()
14 }
15 return features
16
17# 示例
18features = extract_features(data[0])
19print(features)
脚本4: 训练模型
1import tensorflow as tf
2from sklearn.model_selection import train_test_split
3from sklearn.preprocessing import StandardScaler
4
5def prepare_data(data, labels):
6 X = []
7 y = []
8
9 for d, l in zip(data, labels):
10 features = extract_features(d)
11 X.append(list(features.values()))
12 y.append(l['fault_type'][0])
13
14 X = np.array(X)
15 y = np.array(y)
16
17 scaler = StandardScaler()
18 X = scaler.fit_transform(X)
19
20 return X, y
21
22def build_model(input_shape, num_classes):
23 model = tf.keras.Sequential([
24 tf.keras.layers.Dense(64, activation='relu', input_shape=input_shape),
25 tf.keras.layers.Dropout(0.2),
26 tf.keras.layers.Dense(32, activation='relu'),
27 tf.keras.layers.Dropout(0.2),
28 tf.keras.layers.Dense(num_classes, activation='softmax')
29 ])
30
31 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
32 return model
33
34def train_model(X, y):
35 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
36
37 num_classes = len(np.unique(y))
38 input_shape = (X_train.shape[1],)
39
40 model = build_model(input_shape, num_classes)
41 history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)
42
43 return model, history
44
45# 示例
46X, y = prepare_data(data, labels)
47model, history = train_model(X, y)
脚本5: 评估模型
python
深色版本
1import matplotlib.pyplot as plt
2
3def evaluate_model(model, X_test, y_test):
4 loss, accuracy = model.evaluate(X_test, y_test)
5 print(f'Test Loss: {loss:.4f}')
6 print(f'Test Accuracy: {accuracy:.4f}')
7
8 y_pred = model.predict(X_test)
9 y_pred_classes = np.argmax(y_pred, axis=1)
10
11 from sklearn.metrics import confusion_matrix, classification_report
12 cm = confusion_matrix(y_test, y_pred_classes)
13 cr = classification_report(y_test, y_pred_classes)
14
15 print('Confusion Matrix:')
16 print(cm)
17 print('Classification Report:')
18 print(cr)
19
20 return cm, cr
21
22# 示例
23X, y = prepare_data(data, labels)
24X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
25cm, cr = evaluate_model(model, X_test, y_test)
改进方向
如果您已经使用上述方法对该数据集进行了训练,并且认为还有改进空间,以下是一些可能的改进方向:
-
数据增强:
- 进一步增加数据增强策略,例如添加噪声、改变采样频率、插值等,以提高模型的泛化能力。
- 使用混合增强技术,如MixUp、CutMix等,以增加数据多样性。
-
特征工程:
- 尝试更多的特征提取方法,例如小波变换、傅里叶变换、时频分析等,以提取更丰富的特征。
- 结合领域知识,设计更具针对性的特征。
-
模型优化:
- 调整模型超参数,例如学习率、批量大小、优化器等,以找到最佳配置。
- 尝试使用不同的网络架构,例如LSTM、GRU、CNN等,以提高模型性能。
- 引入注意力机制,如SENet、CBAM等,以增强模型对关键区域的关注。
-
损失函数:
- 尝试使用不同的损失函数,例如Focal Loss、Dice Loss、IoU Loss等,以改善模型的收敛性能。
- 结合多种损失函数,例如分类损失和回归损失的组合,以平衡不同类型的任务。
-
后处理:
- 使用非极大值抑制(NMS)的改进版本,如Soft-NMS、DIoU-NMS等,以提高检测结果的质量。
- 引入边界框回归的改进方法,如GIoU、CIoU等,以提高定位精度。
-
迁移学习:
- 使用预训练模型进行微调,利用大规模数据集(如COCO、ImageNet)上的预训练权重,加快收敛速度并提高性能。
-
集成学习:
- 使用多个模型进行集成学习,通过投票或加权平均的方式提高最终的检测效果。
通过上述方法,可以进一步提升模型在滚动轴承故障检测任务上的性能。如果您需要具体的代码示例或更详细的指导,请告诉我,我可以为您提供更多的帮助。