超高创新模型!TF-SAX-Llama 轴承故障诊断

近年来,大语言模型火得一塌糊涂,写文案、敲代码、做图样样都行。于是很多人开始琢磨:能不能把大模型用在工业故障诊断上?

国内外研究团队已在该方向取得诸多进展:

西南交通大学团队提出的 DiagLLM 发表于《中国科学:信息科学》(SCI 一区);北京科技大学的 KG-SR-LLM 发表于 SCI 期刊《Sensors》;清华大学团队研发的 MaintAGT 在通用测试集上达到 ISO 三级振动分析师水平;华南理工大学的 FaultGPT、中国矿业大学的 FD-LLM 等工作也相继发表。相关成果覆盖中文核心、EI、SCI 等多个层级,呈现出蓬勃发展的态势。

然而,在实际落地中一个核心问题始终绕不开:

振动信号不是自然语言,而且用上亿参数的大模型训练开销太大!

直接将连续振动数值序列输入大模型,既不符合其预训练阶段的文本输入范式,也会面临序列过长、噪声干扰严重、物理语义不明确等诸多挑战。

具体而言:

  • 序列长度问题:一段 1 秒的振动信号通常包含上万个采样点,直接输入大模型会导致序列长度急剧膨胀,计算开销巨大且关键特征被稀释。

  • 噪声干扰问题:工业现场采集的振动信号往往夹杂大量环境噪声,原始数据中有效故障特征与干扰信息混叠,大模型难以直接区分。

针对这一痛点,本项目提出了一种更契合机械信号特性的技术路线:先将连续振动信号编码为紧凑的故障符号语言,再通过轻量级 Llama 模型学习符号模式与故障类别之间的映射关系,从而实现大模型在工业故障诊断场景下的高效适配。

项目名称:

TF-SAX-Llama

全称可以理解为:

Time-Frequency SAX enhanced Lightweight LLM for Bearing Fault Diagnosis

核心思想一句话概括:

"

连续机械振动信号 → 时频双域 SAX 符号语言 → 物理特征符号 → Llama-1B + LoRA → 轴承故障分类


一、为什么这个思路值得做?

传统轴承故障诊断方法里,常见做法包括:

  • 直接用 1D-CNN 读取原始振动;

  • 把信号转换成时频图,再用 2D-CNN 或 ViT;

  • 提取人工特征,再接 SVM、MLP、随机森林等分类器;

  • 用 Transformer、Mamba 等模型直接建模序列。

这些方法都能做,但它们通常存在一个问题:

模型读到的是数值,而不是一种更高层次的"故障语言"。

而 TF-SAX-Llama 的出发点是:

机械振动信号虽然是连续数值,但故障模式本身往往具有结构性,例如周期冲击、幅值突变、包络谱峰值变化、冲击强度增强等。

如果我们能把这些结构压缩成一组离散符号,再交给大语言模型,那么模型学习的就不再是原始波形点,而是:

复制代码
TIME SAX 符号模式
FREQ SAX 符号模式
RMS / Kurtosis / Crest 等物理状态符号

这就让轴承诊断任务更接近一种"故障符号阅读理解"。


二、整体框架

整个方法流程如下:

复制代码
原始振动信号
    ├── 时域分支:Raw waveform → Z-normalization → PAA → SAX
    ├── 频域分支:Hilbert envelope → Envelope spectrum → SAX
    └── 物理分支:RMS / Kurtosis / Crest → 等级符号化

最终组合成 Fault Symbolic Prompt
    ↓
本地 Llama-1B
    ↓
LoRA 参数高效微调
    ↓
故障分类结果

【图 1 整体方法框架图】


三、创新点 1:不是让 Llama 直接读原始振动s数据,而是读"故障符号语言"

本项目没有把 Llama 当成普通的数值序列模型使用。原始窗口长度经过SAX后,得到分支SAX符号,再加上少量 Prompt 标签和物理状态描述,实际 Llama tokenizer 后平均长度约为:

数据集 TIME SAX FREQ SAX 总 SAX 符号 平均 Token 长度 最大 Token 长度
CWRU 西储大学 64 64 128 约 166.50 168
江南大学 64 64 128 约 166.51 168

这比直接输入 2048 个连续数值更紧凑,也更符合 Llama 对离散符号序列的建模习惯。

【图 2 :原始振动 + PAA + SAX 符号化示意图】


四、创新点 2:时域 SAX + 包络频谱 SAX,兼顾冲击形态与故障频率信息

只看原始时域波形,能够捕捉冲击和波形形态,但轴承故障诊断中,频率结构同样重要。

因此本项目设计了双分支 SAX:

1. Time-SAX

2. Freq-SAX

这样可以把包络频谱的形态也转换成符号序列,让 Llama 同时看到:

  • 时域冲击模式;

  • 频域包络结构;

  • 不同故障类型对应的符号组合。

【图 3 :包络频谱图】

【图 4 预留:TIME SAX 与 FREQ SAX 符号序列图】

当前项目已生成示例图:


五、创新点 3:加入物理特征符号,补偿 SAX 标准化后的幅值信息损失

标准 SAX 在处理时通常会进行 Z-normalization。

这一步有利于消除量纲差异,但也可能削弱振动幅值、冲击强度等物理信息。

所以项目额外从未经 Z-score 标准化的原始窗口中提取:

  • RMS:反映整体能量;

  • Kurtosis:反映冲击性;

  • Crest Factor:反映峰值冲击强度。

但这些物理特征并不直接以小数形式输入 Llama,而是离散成等级符号:

复制代码
LOW
MEDIUM
HIGH
VERY_HIGH

最终 Prompt 中会出现类似:

复制代码
<RMS> HIGH
<KURTOSIS> VERY_HIGH
<CREST> HIGH

这种设计有两个好处:

  1. 保留机械诊断里非常重要的幅值和冲击信息;

  2. 让输入形式保持"符号语言",不破坏 Llama 的文本建模习惯。


六、最终输入给 Llama 的 Prompt 长什么样?

本项目默认使用紧凑 Prompt,避免大量无关自然语言占据上下文。

示例:

复制代码
Bearing vibration diagnosis.
<TIME>
D E D E E D E D E D E D D E ...
<FREQ>
H H H H H H H H G F F E E F ...
<RMS> MEDIUM
<KURTOSIS> LOW
<CREST> LOW
Classify the fault.

注意,这里不会在 Prompt 中泄露真实标签。

标签只作为分类目标参与训练。

在我的代码中,会直接将提示词生成一个表格,方便查阅:


七、模型训练方式:Llama-1B + LoRA,不做全参数微调

本项目使用本地 Llama-1B 作为主干模型,并通过 LoRA 做参数高效微调。

  • Llama-1B 是 Meta Llama 系列中的轻量级大语言模型,参数规模约为 10 亿级别。相比 7B、13B 等更大的模型,1B 模型对显存和算力要求更低,更适合在个人 GPU 或普通实验环境中进行 LoRA 微调。本项目使用的是 Llama-3.2-1B-Instruct,它是指令微调版本,适合处理结构化文本 Prompt。在本项目中,Llama-1B 并不是直接读取原始振动数值,而是读取由 Time-SAX、Freq-SAX 和物理特征符号共同构成的故障诊断 Prompt。Llama-1B模型在本地大约只有4个G左右的空间,训练需要英伟达显卡,并不会要求过多算力。我的电脑是4060ti,8G显卡,运行此模型非常快,毫无压力!关于此模型的下载方式,我放在代码介绍里了。

实际训练中,模型参数统计如下:

数据集 总参数量 可训练参数量 可训练比例
CWRU 10 分类 1,236,707,328 872,448 0.0705%
江南大学 4 分类 1,236,682,752 860,160 0.0696%

可以看到,虽然底座是 1B 级别的大语言模型,但真正参与更新的参数不到 0.1%。

这也是 LoRA 的意义:

复制代码
保留大模型的符号建模能力
同时大幅减少训练参数量与模型保存体积

八、实验设置

本项目当前包含两个数据集实验。

1. CWRU 西储大学轴承数据集

采用 DE 端信号。

当前设置为 10 分类任务,每类 400 个窗口样本,总计 4000 个样本。

类别包括:

  • Normal

  • Ball_007_1797

  • Ball_014_1797

  • Ball_021_1797

  • IR_007_1797

  • IR_014_1797

  • IR_021_1797

  • OR_007_1797

  • OR_014_1797

  • OR_021_1797

数据划分:

复制代码
每类 train: 280
每类 val: 60
每类 test: 60

2. 江南大学轴承数据集

当前实验设置只使用 600 转工况。

设置为 4 分类任务,每类 400 个窗口样本,总计 1600 个样本。

类别包括:

  • Normal

  • Ball

  • Inner

  • Outer

数据划分:

复制代码
每类 train: 280
每类 val: 60
每类 test: 60

3. 防止数据泄漏

项目中特别注意了一个轴承故障诊断里很容易被忽略的问题:

不能先切窗口再随机划分训练集和测试集。

因为同一条长振动记录中相邻窗口非常相似,如果随机打散,会造成严重的数据泄漏。

本项目采用:

复制代码
原始记录 / 连续记录块
→ 先做 group split
→ 再分别滑窗

训练集、验证集、测试集之间的 group 没有交集。这个设计让实验结果更可信。


九、实验结果展示

下面结果为当前项目在本地配置下得到的参考结果。

1. CWRU 10 分类结果

CWRU 10 分类任务中,模型在测试集上取得了非常高的识别效果。

测试集指标如下:

指标 结果
Accuracy 100.00%
Macro Precision 100.00%
Macro Recall 100.00%
Macro-F1 100.00%
Weighted-F1 100.00%

这说明 TF-SAX-Llama 对 CWRU 中不同故障直径、不同故障部位的符号模式具有较强区分能力。从结果上看,时频双域 SAX 符号能够较好地保留不同故障严重程度对应的模式差异。

【图 5 :CWRU 混淆矩阵】

【图 6 :CWRU 训练损失曲线】

【图 7 :CWRU 验证准确率 / Macro-F1 曲线】


2. 江南大学 600 转数据结果

江南大学这个数据的难度比较高,因此本项目采用这个数据来验证一下TF-SAX-Llama 模型的效果。江南大学数据集只选用 600 转工况,进行 4 分类实验。

测试集指标如下:

指标 结果
Accuracy 92.92%
Macro Precision 93.18%
Macro Recall 92.92%
Macro-F1 92.83%
Weighted-F1 92.83%

分类报告中可以看到:

  • Normal 类识别效果较好,F1 约为 95.73%;

  • Inner 类和 Outer 类整体表现稳定;

  • Ball 类相对更难,说明滚动体类在该数据设置下与其他类别存在一定符号模式交叠;

  • 即便如此,整体 Macro-F1 仍能达到 92% 以上。

这组结果说明,该方法并不是只在 CWRU 这类常用公开数据上有效,在另一套轴承数据上同样能够得到较好的分类表现。

【图 8 :江南大学轴承数据混淆矩阵】

【图 9 预留:江南大学训练损失曲线】

【图 10 预留:江南大学验证准确率 / Macro-F1 曲线】


十、代码截图

这份代码不仅包含模型训练,还包含完整实验流程。

主要功能包括:

  • CWRU 数据自动读取;

  • 江南大学数据自动读取;

  • MATLAB .mat 文件扫描;

  • CWRU DE 端信号选择;

  • 江南大学 600 转工况筛选;

  • 严格 group split,避免窗口泄漏;

  • Time-SAX 自实现;

  • Envelope Spectrum + Freq-SAX;

  • RMS / Kurtosis / Crest 物理特征符号化;

  • Fault Symbolic Prompt 自动构建;

  • 本地 Llama-1B 加载;

  • LoRA 参数高效微调;

  • 训练日志保存;

  • 测试指标输出;

  • 混淆矩阵绘制;

  • 训练曲线绘制;

  • SAX 可视化;

  • 单样本预测;

  • 消融实验入口;

  • SAX 参数敏感性实验入口;

  • Symbol Masking Importance 可解释性分析。


十一、项目核心点总结

一句话总结:

"

这不是一个简单把 Llama 套到轴承数据上的项目,而是把机械振动信号先转换成时频双域符号语言,再利用 Llama 学习故障符号组合规律。

核心点包括:

  • 方法新:SAX 符号化 + Llama 故障诊断;

  • 结构清晰:Time-SAX、Freq-SAX、Physical Symbols 三分支;

  • 实验完整:CWRU 与江南大学两个数据集;

  • 结果直观:自动输出混淆矩阵、训练曲线、分类报告;

  • 训练轻量:LoRA 微调,训练参数不到 0.1%;

  • 可解释:支持 Symbol Masking Importance;

  • 工程完整:配置化、脚本化、可直接运行。

代码获取!

代码环境配置起来并不复杂,实在配不好的可以后台私信,免费帮你远程配置!

获取此代码方式:关注 :g~z~h~ 《淘个代码》

相关推荐
prog_61036 小时前
【笔记】用cursor手搓cursor(九)
人工智能·笔记·大语言模型·agent
这张生成的图像能检测吗8 小时前
(综述)基于遗传神经网络的不平衡故障诊断技术综述
人工智能·生成对抗网络·故障诊断
Geek-Chow1 天前
02 多模态 LLM 是什么:定义、边界与生态位置
人工智能·大语言模型·多模态
明月千里赴迢遥1 天前
Node搭建代理清洗API请求
llama
Rei22481 天前
使用llama.cpp的Qwen3.6-27B-Q8本地部署详解【Linux GPU】
linux·运维·llama
蛋先生DX2 天前
大模型本地部署神器的瘦身进阶原理,就这两招?
llm·llama·ollama
爱学习的小白柏3 天前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
Geek-Chow3 天前
12 开源 vs 闭源:同一份权重,两种交付
人工智能·llm·大语言模型
qy2016skq3 天前
OpenClaw 源码解读——入门与破局9 双插件协同:Quota Guard 负责“停“,Model Router 负责“绕“
langchain·prompt·aigc·embedding·ai编程·llama·agi