Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

基于三动作 DQN-TA 的 PU 轴承序贯故障检测项目

Last updated: 2026-06-04

本项目研究 PU(Paderborn University)轴承数据集上的二值故障检测,并将诊断过程建模为序贯决策问题。模型不仅要判断 normal / fault,还可以选择 continue observing,在更多观察证据和更早诊断之间做权衡。

README 用于说明项目结构、运行方式和当前论文实验口径。具体实验开关和路径以 training/project_config.py 为准;实验结论必须来自正式运行结果,不应直接从 README 推断。


1. 项目定位

当前任务为二值故障检测:

  • normal = 0
  • fault = 1

DQN 动作空间为:

  • 0:predict normal
  • 1:predict fault
  • 2:continue observing

与固定帧数静态分类器不同,DQN-TA 关注的是“何时判断”和“是否继续观察”。因此项目评估不只看分类指标,还关注:

  • decision_rate
  • timeout_rate
  • avg_observe_steps
  • avg_used_frames
  • 不同使用帧数下的决策分布
  • 噪声鲁棒性
  • 跨工况泛化鲁棒性

2. 当前论文实验主线

当前论文叙事以 实验方案.md 为准,核心逻辑为:

DQN-TA-clean 证明序贯决策有效
-> 噪声测试暴露 clean 训练鲁棒性不足
-> 引入训练期噪声增强并选择 DQN-TA-Aug0.5
-> 与同样 0-0.5 噪声训练的 2frames RF / SVM / CNN 公平对比
-> 验证跨工况泛化鲁棒性
-> 用消融实验验证 TA 机制有效性

当前主 baseline 口径为:

ML_ACTIVE_N_FRAMES = 2

也就是说,论文重点比较 2frames RF、2frames SVM、2frames CNN 与 DQN-TA。这样做是为了让静态 baseline 的固定观察帧数更接近 DQN 的平均观察成本。

同时,数据构建仍保留:

ML_STATIC_N_FRAMES_OPTIONS = [1, 2, 3, 4, 5]

这些多帧数 baseline 版本主要用于补充展示固定帧数模型的性能趋势,而不是全文主对比口径。

3. 最终论文结果摘要

最终论文与答辩 PPT 的实验结论统一为:三动作 DQN-TA 可以在保持接近强静态基线分类性能的同时,输出静态模型不具备的观察成本、超时率和决策步数分布,并在加入 0-0.5 训练期噪声增强后取得更均衡的噪声与跨工况鲁棒性。

clean 主工况下,DQN-TA-clean 与 2 帧静态 baseline 的核心结果如下:

模型 Accuracy F1 Recall FPR
DQN-TA-clean 0.9122±0.0048 0.9341±0.0041 0.9265±0.0095 0.1135±0.0043
RF-2F-clean 0.9014±0.0010 0.9259±0.0008 0.9267±0.0008 0.1486±0.0015
SVM-2F-clean 0.8993±0 0.9237±0 0.9163±0 0.1344±0
CNN-2F-clean 0.9127±0.0024 0.9340±0.0018 0.9289±0.0034 0.1194±0.0072

DQN-TA-clean 的超时率为 0.0018±0.0006,平均使用帧数为 1.6324±0.2185;相比固定 2 帧 baseline,平均观察帧数减少约 18.38%。

噪声增强实验最终选择 DQN-TA-Aug0.5。在同等 0-0.5 噪声增强训练下,各方法 F1 对比如下:

Noise DQN-TA-Aug0.5 RF-2F-Aug0.5 SVM-2F-Aug0.5 CNN-2F-Aug0.5
0 0.9277 0.9159 0.9085 0.9160
0.1 0.9262 0.9110 0.9083 0.9124
0.3 0.9146 0.8989 0.9014 0.8955
0.5 0.9012 0.8928 0.8918 0.8802
0.8 0.8816 0.8785 0.8736 0.8580
1.0 0.8694 0.8663 0.8625 0.8445

跨工况泛化中,DQN-TA-Aug0.5 在 N15_M01_F10 的 F1 为 0.9175 / 0.8956 / 0.8649(Noise=0 / 0.5 / 1.0),在 N15_M07_F04 的 F1 为 0.8931 / 0.8768 / 0.8454。时间感知奖励消融表明,TA 的主要贡献不是单纯抬高 F1 上限,而是在相近分类性能下减少平均使用帧数,改善诊断时机。

4. 总体流程

PU 原始 .mat 信号
    -> 数据加载与清洗
    -> 滑动窗口分帧
    -> 人工特征提取
    -> 状态构建
       -> 静态多帧 states(RF / SVM / CNN)
       -> 序贯 episodes(DQN-TA)
    -> 模型训练
       -> DQN-TA
       -> Random Forest / SVM / CNN
    -> 评估
       -> clean / noisy final test
       -> cross-condition generalization
       -> TA ablation

主要步骤:

  1. 从 ../Dataset/PU Dataset/ 读取 PU 原始振动信号。
  2. 在 preprocessing/ 中完成信号清洗、分帧与 15 维人工特征提取。
  3. 构建两类输入:
    • 静态多帧 states:供 RF、SVM、CNN 使用;
    • 序贯 episodes:供 environment/FaultDiagnosisEnv 和 DQN 使用。
  4. 在 training/ 中训练 DQN 与监督学习基线。
  5. 在 evaluation/ 中完成最终测试、噪声评估和跨工况泛化评估。

5. 项目结构

fault_detection_rl_dqn_code/
├─ agents/                    # DQN、特征编码器、RF / SVM / CNN 定义
├─ environment/               # Gymnasium 环境、三动作交互、奖励与 timeout
├─ evaluation/                # final test、噪声测试、泛化评估
├─ preprocessing/             # PU 数据加载、特征提取、dataset.pkl 构建
├─ training/                  # 配置、训练入口、数据加载兼容层
├─ outputs/                   # 模型、日志、评估记录
├─ tests/evaluation/          # 轻量 pytest 测试
├─ main.py                    # 总入口
├─ 实验方案.md                # 论文实验叙事方案
├─ README.md
├─ AGENTS.md
└─ CLAUDE.md

6. 环境准备

推荐使用 Conda 环境 rl_sb3:

conda activate rl_sb3
pip install -r requirements.txt
python -c "import numpy, scipy, sklearn, gymnasium, stable_baselines3, torch; print('environment ready')"

核心依赖固定在 requirements.txt,包括 numpy、scipy、scikit-learn、gymnasium、stable-baselines3、torch、tqdm、rich、tensorboard 和 pytest。

7. 数据目录约定

项目默认数据位于仓库上一级目录:

Design_for_Graduation/
├─ Dataset/
│  ├─ PU Dataset/
│  └─ processed/
└─ fault_detection_rl_dqn_code/

关键路径:

  • 原始 PU 数据:../Dataset/PU Dataset/
  • 处理后主数据集:../Dataset/processed/dataset.pkl
  • 泛化缓存:../Dataset/processed/generalization_cache/
  • DQN 输出:outputs/dqn/
  • baseline 输出:outputs/ml/nf{ML_ACTIVE_N_FRAMES}/
  • TensorBoard 日志:outputs/logs/tb/

8. 运行方式

8.1 总入口

python main.py

main.py 不接收 CLI 参数,执行哪些阶段由 training/project_config.py 中的布尔开关控制。运行前重点检查:

  • RUN_BUILD_DATASET
  • RUN_TRAIN_DQN
  • RUN_TRAIN_BASELINES
  • RUN_DQN_FINAL_TEST
  • RUN_BASELINE_FINAL_TEST
  • ENABLE_DQN_GENERALIZATION
  • ENABLE_ML_GENERALIZATION
  • FORCE_RETRAIN_DQN
  • GENERALIZATION_CACHE_FORCE_REBUILD

8.2 分阶段入口

python preprocessing/build_dataset.py
python training/train_dqn.py
python training/train_supervised_baselines.py
python evaluation/run_final_test_dqn.py
python evaluation/run_final_test_baselines.py
python evaluation/run_generalization_dqn.py
python evaluation/run_generalization_baselines.py

8.3 轻量测试

当前存在少量 pytest 可发现测试,主要覆盖评估输出格式和指标标签:

python -m pytest tests/evaluation

更接近 smoke check 的脚本入口:

python preprocessing/load_data.py
python preprocessing/feature_extract.py
python preprocessing/build_dataset.py

9. dataset.pkl 结构

preprocessing/build_dataset.py 当前一次构建“baseline 多版本 + DQN 单版本”数据:

  • baseline_by_n_frames[1] 到 baseline_by_n_frames[5]
  • 每个 baseline 版本包含 X_train、y_train、X_val、y_val、X_test、y_test、scaler
  • DQN 使用 X_train_seq、y_train_seq、X_val_seq、y_val_seq、X_test_seq、y_test_seq、dqn_scaler
  • meta.dataset_schema_version 用于校验缓存是否与当前代码布局一致

training/dataset_loader.py 会根据 ML_ACTIVE_N_FRAMES 自动选择当前 baseline 版本,并暴露为兼容旧接口的 X_train / X_val / X_test / baseline_scaler。

如果修改特征、窗口、帧数、stride、schema、训练工况或 repeat 划分,需要重新运行:

python preprocessing/build_dataset.py

10. 噪声增强与泛化

训练期噪声增强由以下配置控制:

TRAIN_ENABLE_NOISE_AUG
TRAIN_NOISE_STD_MIN = 0.0
TRAIN_NOISE_STD_MAX = 0.5

最终测试噪声水平为:

NOISE_LEVELS = [0.1, 0.3, 0.5, 0.8, 1.0]

当前论文最终模型选择为 DQN-TA-Aug0.5,即使用 0-0.5 训练期噪声增强的 DQN-TA。后续与 baseline 对比时,RF、SVM、CNN 也应使用相同 0-0.5 噪声增强训练,保证公平。

泛化工况来自:

PU_GENERALIZATION_CONDITIONS = ["N15_M01_F10", "N15_M07_F04"]

泛化评估不在目标工况上重新训练模型,也不重新拟合 scaler。

11. TA 机制

本项目中的 TA 指 time-aware reward,核心开关是:

ENABLE_TIME_AWARE_REWARD = True

TA 不是额外模型结构,而是奖励函数中的时间感知项。它通过早期正确奖励、早期错误惩罚和随观察进度增长的继续观察代价,引导 DQN 学会:

  • 证据充分时尽早决策;
  • 证据不足时继续观察;
  • 拖到上限仍不判断需要付出 timeout 代价。

TA 消融建议对比:

DQN-clean vs DQN-TA-clean
DQN-Aug0.5 vs DQN-TA-Aug0.5

12. 建议实验顺序

论文主实验建议按以下顺序整理:

  1. 构建数据集。
  2. 训练并评估 DQN-TA-clean,完成 clean 主工况对比。
  3. 对 DQN-TA-clean 做噪声测试,说明 clean 训练鲁棒性不足。
  4. 比较 DQN-TA-Aug0.2 到 DQN-TA-Aug0.6,选择 DQN-TA-Aug0.5。
  5. 在相同 0-0.5 噪声增强条件下训练 2frames RF / SVM / CNN。
  6. 比较 DQN-TA-Aug0.5 与同噪声训练 baseline。
  7. 运行 N15_M01_F10、N15_M07_F04 跨工况泛化实验。
  8. 运行 TA 机制消融。

13. 结果解释注意事项

  • 不要根据测试集挑选最佳 seed。
  • DQN 使用验证集做选模和早停,测试集只用于最终报告。
  • clean 对比中所有模型应使用 clean 训练。
  • 噪声鲁棒性公平对比中所有模型应使用相同 0-0.5 训练噪声增强。
  • DQN 的 strict_* 指标会把 timeout 视为未成功诊断。
  • baseline 没有 continue observing 或 timeout 机制,不能直接报告 DQN 的序贯指标。
  • 不要宣称 DQN 在所有指标、所有噪声、所有工况下绝对优于传统模型;应围绕自适应观察、鲁棒性和 TA 机制贡献做克制结论。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages