1D-CNN 轴承故障诊断实战:CWRU 数据集 6 类识别准确率达 99.2%
1D-CNN在轴承故障诊断中的实战应用:从CWRU数据集到99.2%准确率
轴承作为旋转机械的核心部件,其健康状态直接影响设备运行安全。传统人工诊断方式效率低下且依赖经验,而基于深度学习的智能诊断方法正在工业领域掀起革命。本文将带您完整实现一个基于一维卷积神经网络(1D-CNN)的轴承故障诊断系统,直接处理原始振动信号,在CWRU数据集上达到99.2%的分类准确率。
1. CWRU数据集深度解析与预处理
凯斯西储大学轴承数据集是故障诊断领域的基准数据集,包含四种典型故障状态:
- 内圈故障(IR)
- 外圈故障(OR,含3/6/12点钟位置)
- 滚珠故障(BF)
- 正常状态(NOR)
数据采集参数解析:
采样频率 = 12000 Hz # 每秒采集12000个数据点 电机转速 = 1797 rpm # 每分钟转数 每转采样点数 = 12000 / (1797/60) ≈ 400 # 每转约400个采样点数据预处理关键步骤:
样本分割:
- 每400个点为一个样本(对应完整一转)
- 每个故障类型取300个样本(共6类×300=1800样本)
- 按2:1划分训练集和测试集
数据标准化:
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)- 标签编码:
故障类别映射 = { 0: "NOR", 1: "IR", 2: "OR_3", 3: "OR_6", 4: "OR_12", 5: "BF" }2. 1D-CNN模型架构设计与原理
与将一维信号转为二维图像的常见做法不同,我们直接构建1D-CNN处理原始振动信号,这种方案具有三大优势:
- 保留原始时域特征
- 减少信息转换损失
- 更接近工业实时监测场景
模型架构核心组件:
import torch.nn as nn class Bearing1DCNN(nn.Module): def __init__(self): super().__init__() self.features = nn.Sequential( nn.Conv1d(1, 32, kernel_size=64, stride=8), nn.BatchNorm1d(32), nn.ReLU(), nn.MaxPool1d(2), nn.Conv1d(32, 64, kernel_size=16), nn.BatchNorm1d(64), nn.ReLU(), nn.MaxPool1d(2), nn.Conv1d(64, 128, kernel_size=8), nn.BatchNorm1d(128), nn.ReLU(), nn.AdaptiveAvgPool1d(1) ) self.classifier = nn.Sequential( nn.Linear(128, 64), nn.ReLU(), nn.Dropout(0.5), nn.Linear(64, 6) )关键层参数说明:
| 层类型 | 参数 | 作用 |
|---|---|---|
| Conv1d | kernel_size=64 | 捕捉约1/6转的振动特征 |
| MaxPool1d | stride=2 | 逐步压缩时域分辨率 |
| AdaptiveAvgPool1d | output_size=1 | 全局特征聚合 |
3. 模型训练技巧与超参数优化
实现高准确率的关键在于精细的训练策略:
优化器配置:
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4) scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)关键训练参数:
- 批量大小:64
- 训练轮次:100
- 早停机制:验证损失10轮不降则终止
数据增强策略(提升模型鲁棒性):
class AddGaussianNoise(object): def __init__(self, std=0.01): self.std = std def __call__(self, tensor): return tensor + torch.randn(tensor.size()) * self.std注意:振动信号增强应保持物理合理性,避免过度扭曲原始波形特征
4. 结果分析与工业部署建议
测试集性能指标:
| 评估指标 | 数值 |
|---|---|
| 准确率 | 99.2% |
| 精确率 | 99.1% |
| 召回率 | 99.3% |
| F1分数 | 99.2% |
混淆矩阵分析:
array([[198, 0, 0, 0, 0, 2], [ 0, 199, 0, 0, 1, 0], [ 0, 0, 200, 0, 0, 0], [ 0, 0, 0, 200, 0, 0], [ 0, 1, 0, 0, 199, 0], [ 1, 0, 0, 0, 0, 199]])工业部署实用建议:
边缘计算部署方案:
- 使用TensorRT加速推理
- 量化模型到INT8精度
- 单样本推理时间<5ms(RTX3060)
持续学习策略:
# 新数据增量训练 optimizer = torch.optim.SGD(model.parameters(), lr=1e-4) for new_batch in new_data_loader: loss = criterion(model(new_batch), labels) loss.backward() optimizer.step()- 故障预警系统集成:
- 设置置信度阈值(如<95%触发人工复核)
- 滑动窗口平均预测结果
- 结合时频分析辅助决策
