Skip to content

luozixin2/power_system_fault_detection

Repository files navigation

电力系统故障检测项目

基于深度学习的通用电力系统故障检测项目,支持不同规模和拓扑的电力网络。

目录

项目特点

  • 通用性: 通过特征工程解决不同网络拓扑的特征维度不一致问题
  • 多模型: 支持LSTM、CNN和集成模型
  • 完整流程: 从数据生成到模型训练、评估的完整流水线
  • 可扩展: 模块化设计,易于扩展新功能

项目结构

power_system_fault_detection/
├── generate_dataset.py          # 数据生成脚本
├── config.py                   # 配置文件
├── utils.py                    # 工具函数
├── feature_extractor.py        # 通用特征提取器
├── models/                     # 模型定义
│   ├── __init__.py
│   ├── base_model.py
│   ├── lstm_model.py
│   ├── cnn_model.py
│   └── ensemble_model.py
├── data_loader.py              # 数据加载器
├── train.py                    # 训练脚本
├── evaluate.py                 # 评估脚本
├── main.py                     # 主执行脚本
├── requirements.txt            # 依赖包
└── README.md                   # 项目说明

安装依赖

pip install -r requirements.txt

使用方法

1. 生成数据集

python generate_dataset.py

2. 训练模型

# 训练集成模型
python main.py --mode train --model_type ensemble

# 训练LSTM模型
python main.py --mode train --model_type lstm

# 训练CNN模型
python main.py --mode train --model_type cnn

3. 评估模型

python main.py --mode evaluate --checkpoint results/checkpoints/best_model.pth

4. 比较多个模型

python main.py --mode compare

配置说明

主要配置在 config.py 中:

  • DataConfig: 数据相关配置
  • FeatureConfig: 特征提取配置
  • ModelConfig: 模型结构配置
  • TrainingConfig: 训练超参数配置

特征提取方法

项目通过以下方法解决不同网络特征维度不一致的问题:

  1. 统计特征: 提取各类信号的统计特性(均值、方差、偏度等)
  2. 频谱特征: 使用FFT和小波变换提取频域特征
  3. 时序特征: 提取趋势、变化率等时序特性
  4. 拓扑特征: 提取网络规模和结构特征
  5. 系统级特征: 聚合设备级特征为系统级特征

支持的故障类型

项目目前支持以下故障类型(FAULT_TYPES):

  • normal
    正常状态,无故障发生。

  • single_line_outage
    单线路故障,一条线路跳闸。

  • double_line_outage
    双线路故障,两条线路同时跳闸。

  • generator_outage
    发电机故障,一台发电机失去服务。

  • load_spike_moderate
    中等负荷冲击,若干母线负荷突然增大(1.5–2.5 倍)。

  • load_spike_severe
    严重负荷冲击,若干母线负荷突然增大(3–5 倍)。

  • transformer_outage
    变压器故障,一台变压器跳闸。

  • bus_fault
    母线故障,跳闸该母线及其所有连接设备。

  • generator_instability
    发电机不稳定,发电机出力大幅波动。

  • line_impedance_drift
    线路阻抗漂移,线路电阻/电抗缓慢累积变化。

  • insulation_degradation
    绝缘性能退化,线路绝缘水平下降导致参数变化。

  • protection_malfunction
    保护误动作,保护装置误跳闸。

  • voltage_regulator_fault
    电压调节器故障,发电机调压器失效导致电压偏离。

  • cascading_failure
    连锁故障,初始故障引发多条线路或设备的接连跳闸。

  • intermittent_fault
    间歇性故障,线路接触不良时断时续(阻抗突变)。

模型架构

LSTM模型

  • 多层LSTM + 全连接层
  • 适合处理时序特征

CNN模型

  • 1D卷积 + 全连接层
  • 适合处理频谱特征

集成模型

  • 结合LSTM和CNN
  • 支持注意力机制加权融合

损失函数(Loss Functions)

本项目支持三种常用且针对不平衡、多标签场景设计的损失函数:

  1. BCEWithLogitsLoss
  2. Focal Loss
  3. Asymmetric Focal Loss (AFL)

1. BCEWithLogitsLoss

  • 公式:
    L = – ∑ₖ [ wₖ · (yₖ·logσ(xₖ) + (1–yₖ)·log(1–σ(xₖ))) ]
  • 参数:
    • pos_weight:用来增大正样本(y=1)的权重,常取 N_negative/N_positive
  • 适用场景:轻度不平衡,多标签基线。

2. Focal Loss

  • 公式:
    L = – α·(1–pₜ)^γ · log(pₜ),
    其中 pₜ = σ(x) 当 y=1,否则 1–σ(x)

  • 超参数:

    • α:平衡正负样本,一般 0.25~0.75
    • γ:聚焦因子,抑制易分样本梯度(γ=1~4)
  • 推荐取值:α=0.5~0.75, γ=2.0

  • 效果:对“难分”样本自动放大梯度,提升模型鲁棒性,但在多标签召回提升有限。

3. Asymmetric Focal Loss (AFL)

  • 思路:对正/负样本分别设置不同聚焦因子,偏向提升少数类召回。
  • 公式:
    L = – ∑ₖ αₖ·(1–pₖₜ)ᵞᵏ · log(pₖₜ)
    • αₖ = α (正样本) / (1–α) (负样本)
    • γₖ = γ_pos (正样本) / γ_neg (负样本)
  • 超参数:
    • α:正样本权重,推荐 0.6~0.8
    • γ_pos:正样本聚焦系数,推荐 0.5~1.0
    • γ_neg:负样本聚焦系数,推荐 2.0~4.0
  • 效果:
    • 提升召回:γ_pos<γ_neg,对少数故障样本更“宽松”
    • 保持精度:γ_neg 较大时,抑制海量正常样本的误报

实验结果

默认超参数的模型在IEEE标准测试系统(case9、case14、case30、case39、case57、case118、case145、case300)的仿真数据集上的性能:

模型 汉明Acc 子集Acc Jaccard 宏 F1 微 F1 宏 Prec 微 Prec 宏 Rec 微 Rec
LSTM + BCE 0.9883 0.8675 0.4815 0.4469 0.6500 0.6214 0.7647 0.3853 0.5652
CNN + BCE 0.9890 0.8750 0.4752 0.4473 0.6443 0.6723 0.8421 0.3617 0.5217
Ensemble + BCE 0.9885 0.8725 0.4860 0.4497 0.6541 0.5479 0.7761 0.3936 0.5652
LSTM + FL 0.9890 0.8775 0.4536 0.3573 0.6241 0.5475 0.8980 0.2851 0.4783
CNN + FL 0.9875 0.8650 0.3814 0.3197 0.5522 0.5322 0.8810 0.2462 0.4022
Ensemble + FL 0.9892 0.8825 0.4639 0.4038 0.6338 0.6308 0.9000 0.3172 0.4891
LSTM + AFL 0.9858 0.8450 0.4380 0.4246 0.6092 0.5182 0.6463 0.3894 0.5761
CNN + AFL 0.9873 0.8575 0.4649 0.4584 0.6347 0.5552 0.7067 0.4130 0.5761
Ensemble + AFL 0.9898 0.8875 0.5288 0.5255 0.6918 0.6218 0.8209 0.4672 0.5978

扩展功能

添加新的故障类型

  1. config.py 中添加故障类型
  2. generate_dataset.py 中实现故障注入逻辑
  3. 重新训练模型

添加新的特征

  1. feature_extractor.py 中实现新特征提取方法
  2. FeatureConfig 中添加相应配置

添加新的模型

  1. models/ 目录下创建新模型文件
  2. 继承 BaseModel
  3. 在训练脚本中注册新模型

常见问题

Q: 训练时出现内存不足 A: 减小batch_size或window_size

Q: 模型收敛慢 A: 调整学习率或使用预训练权重

Q: 某些故障类型检测效果差 A: 检查数据平衡性,考虑使用类别权重或数据增强。也可以使用Focal Loss或 Asmmetric Focal Loss作为损失函数。

参考文献

  • Lin et al. “Focal Loss for Dense Object Detection” (ICCV 2017)
  • Noh et al. “Asymmetric Loss for Multi-Label Classification” (CVPR 2021)

许可证

MIT License

联系方式

如有问题请提交Issue或联系开发者。

项目总结

1. 通用特征提取

  • 统计特征:均值、方差、偏度、峰度等,不依赖网络规模
  • 频谱特征:FFT和小波变换,捕捉频域信息
  • 时序特征:趋势、变化率、峰值检测等
  • 系统级聚合:将设备级特征聚合为固定维度

2. 多模型融合

  • LSTM:处理时序依赖关系
  • CNN:处理频谱和空间特征
  • 集成模型:结合两者优势,支持注意力机制

3. 完整工作流程

  • 数据生成→特征提取→模型训练→评估分析
  • 模块化设计,易于扩展和维护
  • 完善的配置管理和日志系统

4. 实用性

  • 支持命令行操作
  • 自动化的实验管道
  • 详细的评估和可视化

这个项目可以处理任意规模的电力网络,通过特征工程将变长特征转换为固定维度,实现了真正的通用性。您可以直接使用这个框架进行电力系统故障检测研究。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages