4. 特征工程与数据集构建
轴承故障诊断模型能否在ONNX Runtime端侧稳定落地,其性能上限往往在数据集构建阶段就已注定。原始振动信号是时间序列的一维数组,直接输入神经网络虽然可行,但会显著增加模型参数量与推理延迟,且对噪声和转速波动敏感。特征工程的核心任务是将原始信号转换为更具判别力、更紧凑的表示,同时保证训练集、验证集、测试集的分布一致性,并为后续ONNX导出与INT8量化做好准备。本章将系统讲解时域、频域、时频域特征提取方法,数据集划分策略,标签编码方案以及针对振动信号的数据增强技术,并结合滚动轴承故障诊断的典型场景给出可落地的操作流程。
4.1 时域特征提取:统计量与冲击指标
时域特征直接对原始振动信号进行统计分析,计算开销极小,非常适合端侧实时推理。对于轴承故障诊断,时域特征主要分为有量纲参数和无量纲参数两类。有量纲参数包括均值、峰值、均方根值(RMS)、方差等,它们反映信号的能量和幅值水平;无量纲参数包括峭度、波形因子、峰值因子、脉冲因子、裕度因子等,它们对故障冲击引起的波形变化更为敏感,且不受绝对幅值影响,在变工况条件下具有更好的鲁棒性。
在实际工程中,峭度(Kurtosis)是最常用的早期故障指标。正常轴承振动信号近似服从高斯分布,峭度值约为3;当轴承出现局部剥落或裂纹时,周期性冲击会使信号分布尾部变厚,峭度值显著增大。但峭度对随机冲击干扰也较敏感,因此常与RMS值联合使用——RMS反映整体能量,峭度反映冲击特性。特征提取窗口长度建议覆盖至少10个旋转周期,例如在1500rpm(25Hz)下,窗口长度取0.4秒(即10个周期),采样率25.6kHz时对应10240个采样点。
import numpy as np
def extract_time_features(signal):
features = {}
features['rms'] = np.sqrt(np.mean(signal**2))
features['peak'] = np.max(np.abs(signal))
features['kurtosis'] = np.mean((signal - np.mean(signal))**4) / (np.std(signal)**4)
features['crest_factor'] = features['peak'] / features['rms']
features['impulse_factor'] = np.max(np.abs(signal)) / np.mean(np.abs(signal))
features['margin_factor'] = np.max(np.abs(signal)) / (np.mean(np.sqrt(np.abs(signal))))**2
return features
时域特征提取的常见误区是直接使用原始信号的全部统计量而不做筛选。实际上,均值、方差等低阶矩对故障不敏感,且容易受传感器偏置影响。建议优先选择峭度、峰值因子、裕度因子等无量纲指标,并结合RMS构成3-5维的时域特征向量。对于端侧部署,特征维度不宜过高,否则会增加模型输入层的计算量。
4.2 频域与包络谱特征:揭示故障特征频率
频域特征通过傅里叶变换(FFT)将时域信号转换到频域,能够揭示轴承故障特征频率(如外圈BPFO、内圈BPFI、滚动体BSF、保持架FTF)及其谐波。对于滚动轴承,故障冲击会调制在高频固有振动上,直接对原始信号做FFT难以识别低频故障特征,因此通常采用包络分析(Envelope Analysis):先对信号进行带通滤波(中心频率选在共振频带),再通过Hilbert变换提取包络信号,最后对包络信号做FFT得到包络谱。
包络谱中,故障特征频率处的幅值及其谐波是诊断的关键指标。以深沟球轴承6205为例,在转速1500rpm(转频fr=25Hz)下,若外圈故障特征频率BPFO≈3.05×fr≈76.3Hz,则包络谱中76.3Hz处应出现明显峰值。频域特征向量可以选取包络谱中前5个主要峰值频率及其幅值,或者计算特定频带内的能量占比。对于ONNX Runtime部署,FFT计算建议使用128点或256点短时FFT,避免过大的计算开销。
| 特征类型 | 计算方式 | 故障敏感性 | 端侧计算开销 |
|---|---|---|---|
| 时域统计量 | 直接对时域信号计算 | 峭度对冲击敏感 | 极低(O(n)) |
| FFT频谱 | 全频带FFT | 可识别转频谐波 | 中等(O(n log n)) |
| 包络谱 | 带通滤波+Hilbert+FFT | 对早期故障最敏感 | 较高(需滤波) |
| 小波包能量 | 小波分解后各频带能量 | 可区分多故障类型 | 高(需小波变换) |
频域特征提取的工程要点是:带通滤波器的中心频率和带宽需要根据轴承固有频率预先标定,不同型号轴承的共振频带差异较大。在端侧部署时,滤波器系数可以离线计算并固化为常量,避免在线计算。
4.3 时频域特征:小波变换与短时傅里叶变换
时频域特征能够同时反映信号在时间和频率上的变化,特别适合非平稳工况下的轴承故障诊断。短时傅里叶变换(STFT)通过加窗分段处理获得时频矩阵,但受海森堡不确定性原理限制,时间分辨率和频率分辨率无法同时提高。小波变换(WT)通过可变窗宽实现多分辨率分析,在低频段获得高频率分辨率,在高频段获得高时间分辨率,更匹配轴承故障冲击的瞬态特性。
在工程实践中,离散小波变换(DWT)或小波包变换(WPT)更为常用。小波包变换将频带进行多层次划分,对高频细节也进行分解,能够提取更精细的频带能量特征。以三层小波包分解为例,原始信号被分解为8个频带,每个频带的能量占比构成8维特征向量。对于端侧部署,小波变换的运算量较大,建议使用Daubechies-4(db4)小波基,分解层数控制在3-4层,并预先计算滤波器系数。
4.4 数据集划分与标签编码
数据集划分是影响模型泛化能力的关键环节。对于轴承故障诊断,必须按照工况分层划分,即确保训练集、验证集、测试集中都包含不同转速、不同负载下的样本,避免因工况分布不均导致模型过拟合到特定工况。推荐比例为训练集70%、验证集15%、测试集15%。验证集用于模型超参数调优和早停(Early Stopping),测试集仅在最终评估时使用一次,严禁用测试集反复调参。
标签编码方面,轴承故障诊断通常采用One-Hot编码。假设有4种状态:正常(Normal)、外圈故障(OF)、内圈故障(IF)、滚动体故障(BF),则标签分别为[1,0,0,0]、[0,1,0,0]、[0,0,1,0]、[0,0,0,1]。对于ONNX Runtime部署,模型输出层使用Softmax激活函数,输出维度等于类别数。如果类别数较多(如10类以上),可以考虑使用LabelEncoder将标签编码为整数,但需要在模型输出层后增加ArgMax操作,并维护类别映射表。
4.5 数据增强:提升模型鲁棒性
轴承故障数据往往存在类别不平衡问题——正常样本远多于故障样本,且故障样本采集成本高。数据增强技术可以有效扩充训练集,提升模型泛化能力。针对振动信号,常用的增强方法包括:
- 时域增强:添加高斯白噪声(SNR 10-20dB)、时间拉伸(缩放0.9-1.1倍)、幅值扰动(缩放0.8-1.2倍)、随机裁剪拼接。
- 频域增强:频率掩蔽(随机屏蔽部分频带)、谐波叠加(叠加转频谐波)、频谱平移。
- 时频域增强:STFT时频掩蔽(SpecAugment)、小波系数扰动。
- 样本混合:Mixup(按比例混合两个样本及其标签)、CutMix(在时域上拼接不同样本片段)。
需要特别注意的是,数据增强必须在特征提取之后进行,且增强样本不能进入测试集。对于端侧部署,增强后的训练集规模建议控制在原始数据的3-5倍,过度的增强会引入噪声,反而降低模型性能。
4.6 实战案例:某风电齿轮箱轴承故障诊断数据集构建
某风电企业需要部署一套轴承故障诊断系统,目标是在边缘网关(ARM Cortex-A53,1GB内存)上实现轴承状态实时监测。原始数据来自振动传感器,采样率25.6kHz,转速范围1200-1800rpm,包含正常、外圈故障、内圈故障、滚动体故障4类状态,每类状态采集200个样本,每个样本时长1秒(25600点)。
初始现象:直接使用原始信号训练1D-CNN模型,在测试集上准确率仅82%,且模型参数量达2.3M,ONNX导出后INT8量化精度下降至78%。分析发现,原始信号直接输入导致模型过多关注噪声和转速波动,且不同工况下信号幅值差异大,模型难以收敛。
优化过程:首先提取时域特征(RMS、峭度、峰值因子、裕度因子)和频域特征(包络谱前5个峰值频率及幅值),构成9维特征向量。然后按工况分层划分数据集,确保每个转速下4类样本比例一致。针对类别不平衡,对故障类样本进行时域加噪(SNR=15dB)和幅值扰动增强,每类扩充至500个样本。最后使用随机森林分类器(100棵树),模型参数量仅120KB,ONNX导出后INT8量化精度损失小于1%。
结果对比:优化后测试集准确率提升至96.5%,单次推理时间从原始CNN的15ms降至0.8ms,内存占用从45MB降至3.2MB。复盘发现,特征工程的核心价值在于将原始信号的高维冗余信息压缩为低维判别特征,同时消除了工况变化对模型的影响。
特征维度:9维(4时域 + 5频域)
训练集:4类 × 500样本 = 2000
验证集:4类 × 75样本 = 300
测试集:4类 × 75样本 = 300
模型:随机森林(100棵树,max_depth=12)
ONNX导出:int8量化,精度损失 < 1%
风险与代价:特征提取增加了离线数据处理工作量,但换来了端侧推理效率的大幅提升。需要注意的是,包络谱特征依赖带通滤波器的准确标定,若轴承型号更换,需要重新标定滤波器参数。建议在系统中预留特征提取参数配置接口,便于现场调整。
4.7 常见误区与总结复盘
在特征工程与数据集构建中,以下误区需要特别警惕:
- 特征维度越高越好:高维特征会增加模型复杂度和过拟合风险,且端侧推理时特征计算开销增大。建议通过特征重要性排序(如随机森林的feature_importance)筛选Top-N特征。
- 忽略工况变化:轴承故障特征频率与转速成正比,不同转速下同一故障的特征频率不同。如果训练集和测试集转速分布不一致,模型性能会大幅下降。解决方案是提取无量纲特征(如峭度、峰值因子)或进行转速归一化。
- 数据增强过度:增强样本过多会导致模型对噪声模式过拟合,建议通过验证集准确率监控增强效果,当验证集准确率不再提升时停止增强。
- 标签编码错误:使用LabelEncoder将类别编码为0,1,2,3时,模型可能学习到类别间的顺序关系,导致错误预测。对于分类任务,应使用One-Hot编码或Embedding层。
总结而言,特征工程与数据集构建是ONNX Runtime端侧部署成功的基础。时域特征提供快速诊断能力,频域特征揭示故障机理,时频域特征应对非平稳工况。合理的数据集划分和标签编码确保模型评估的可靠性,数据增强则解决数据稀缺问题。在实际项目中,建议先构建一个包含时域+频域特征的基线模型,验证端侧推理性能后,再逐步加入时频域特征和更复杂的增强策略。