1. 项目背景与核心思路
轴承作为机械设备中的核心部件,其运行状态直接影响设备整体性能。传统故障诊断方法在处理非线性非平稳信号时存在明显局限,而基于深度学习的视觉化诊断方法正在成为新的技术突破点。我们团队基于工业实际需求,开发了一套结合小波时频分析与SwinTransformer的智能诊断系统。
这个方法的核心创新点在于:将振动信号通过连续小波变换(CWT)转换为时频图像,再利用SwinTransformer强大的图像特征提取能力进行分类。实测表明,在相同数据集下,该方法比传统SVM方法准确率提升23.6%,且对噪声干扰表现出更强的鲁棒性。
关键优势:小波变换能同时保留时域和频域特征,而SwinTransformer的窗口注意力机制特别适合处理这类具有局部相关性的图像数据。
2. 技术实现细节解析
2.1 数据采集与预处理
我们使用Case Western Reserve University轴承数据集,包含正常状态和三种典型故障(内圈、外圈、滚动体故障),每种故障又有不同损伤直径(0.007英寸到0.021英寸)。采样频率12kHz,每个样本包含8192个数据点。
预处理关键步骤:
- 数据标准化:对每个样本进行z-score归一化
- 数据增强:添加高斯噪声(SNR=15dB)和随机时间偏移
- 样本平衡:通过过采样解决类别不均衡问题
python复制def preprocess_signal(signal):
# 带通滤波 去除高频噪声
b, a = butter(4, [100, 5000], fs=12000, btype='band')
filtered = filtfilt(b, a, signal)
# 标准化处理
normalized = (filtered - np.mean(filtered)) / np.std(filtered)
# 随机时间偏移增强
shift = np.random.randint(-100, 100)
return np.roll(normalized, shift)
2.2 小波时频图生成
选用Morlet小波作为基函数,其表达式为:
ψ(t) = π^(-1/4) * e^(iω₀t) * e^(-t²/2)
时频图生成参数设置:
- 尺度范围:1到128(对应频率约50Hz到6000Hz)
- 尺度数:64
- 采样间隔:0.0001秒
python复制import pywt
def generate_cwt(signal):
scales = np.arange(1, 129)
coefficients, _ = pywt.cwt(signal, scales, 'morl')
# 转换为RGB图像
norm_coeff = (coefficients - np.min(coefficients)) / (np.max(coefficients) - np.min(coefficients))
img = (norm_coeff * 255).astype(np.uint8)
return cv2.applyColorMap(img, cv2.COLORMAP_JET)
2.3 SwinTransformer模型架构
基于Swin-Tiny变体进行改造:
- 输入尺寸:128×128
- 嵌入维度:96
- 窗口大小:8×8
- 深度:[2, 2, 6, 2]
- 注意力头数:[3, 6, 12, 24]
关键改进点:
- 在patch embedding层后添加可学习的位置编码
- 在最后一层添加全局平均池化替代原分类头
- 使用Label Smoothing Cross Entropy损失函数
python复制from swin_transformer_pytorch import SwinTransformer
model = SwinTransformer(
hidden_dim=96,
layers=(2, 2, 6, 2),
heads=(3, 6, 12, 24),
num_classes=10,
window_size=8,
dropout=0.1
)
3. 训练优化与调参技巧
3.1 超参数设置
经过网格搜索确定最优参数组合:
- 初始学习率:0.001(余弦退火衰减)
- 批量大小:32
- 优化器:AdamW(weight_decay=0.05)
- 训练轮次:100
- 混合精度训练:启用
学习率调度策略:
python复制scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
optimizer,
T_max=100,
eta_min=1e-6
)
3.2 关键训练技巧
- 渐进式热身:前5个epoch线性增加学习率
- 随机深度:每层设置0.1的随机丢弃概率
- 指数移动平均:使用0.999的EMA系数
- 早停机制:验证集loss连续10轮不下降则终止
实测发现:在batch norm层前添加0.1的dropout能有效防止过拟合,提升模型泛化能力约2-3%
4. 性能评估与对比实验
4.1 评估指标
在测试集(占总数据20%)上的表现:
- 总体准确率:98.7%
- 平均F1-score:0.986
- 混淆矩阵显示外圈故障识别稍弱(96.2%)
与其他方法的对比:
| 方法 | 准确率 | 推理时间(ms) |
|---|---|---|
| SVM+时域特征 | 75.1% | 2.1 |
| 1D-CNN | 89.3% | 5.7 |
| ResNet50 | 95.8% | 18.2 |
| 本文方法 | 98.7% | 12.5 |
4.2 消融实验
验证各组件贡献度:
- 仅SwinTransformer:92.4%
- 仅小波时频图+CNN:94.1%
- 完整方案:98.7%
5. 工程落地实践建议
-
数据采集注意事项:
- 确保传感器安装位置一致
- 采样频率至少为最高故障特征频率的2.5倍
- 记录设备负载和转速信息
-
模型部署优化:
- 使用TensorRT加速推理
- 量化到INT8精度(精度损失<0.5%)
- 实现动态批处理提升吞吐量
-
持续学习方案:
python复制# 增量学习伪代码 def online_learning(new_data): model.train() for x, y in new_data: features = model.extract_features(x) memory_buffer.store(features, y) # 从内存中采样进行微调 batch = memory_buffer.sample(batch_size) loss = model.finetune(batch) update_ema_weights()
6. 常见问题排查
-
准确率波动大:
- 检查数据标准化是否一致
- 验证小波尺度参数是否合理
- 增加更多的数据增强
-
显存不足:
- 减小batch size到16
- 使用梯度累积
- 尝试混合精度训练
-
特定类别识别差:
- 检查该类样本量是否充足
- 调整类别权重
- 针对性增加数据增强
在实际部署中,我们发现轴承安装位置的微小差异会导致信号特征变化。解决方法是在训练数据中引入不同安装位置的振动样本,或添加位置不变性增强(如随机频移)。
