基于深度学习的通用电力系统故障检测项目,支持不同规模和拓扑的电力网络。
- 通用性: 通过特征工程解决不同网络拓扑的特征维度不一致问题
- 多模型: 支持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.txtpython generate_dataset.py# 训练集成模型
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 cnnpython main.py --mode evaluate --checkpoint results/checkpoints/best_model.pthpython main.py --mode compare主要配置在 config.py 中:
DataConfig: 数据相关配置FeatureConfig: 特征提取配置ModelConfig: 模型结构配置TrainingConfig: 训练超参数配置
项目通过以下方法解决不同网络特征维度不一致的问题:
- 统计特征: 提取各类信号的统计特性(均值、方差、偏度等)
- 频谱特征: 使用FFT和小波变换提取频域特征
- 时序特征: 提取趋势、变化率等时序特性
- 拓扑特征: 提取网络规模和结构特征
- 系统级特征: 聚合设备级特征为系统级特征
项目目前支持以下故障类型(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 + 全连接层
- 适合处理时序特征
- 1D卷积 + 全连接层
- 适合处理频谱特征
- 结合LSTM和CNN
- 支持注意力机制加权融合
本项目支持三种常用且针对不平衡、多标签场景设计的损失函数:
- BCEWithLogitsLoss
- Focal Loss
- Asymmetric Focal Loss (AFL)
- 公式:
L = – ∑ₖ [ wₖ · (yₖ·logσ(xₖ) + (1–yₖ)·log(1–σ(xₖ))) ] - 参数:
pos_weight:用来增大正样本(y=1)的权重,常取N_negative/N_positive。
- 适用场景:轻度不平衡,多标签基线。
-
公式:
L = – α·(1–pₜ)^γ · log(pₜ),
其中 pₜ = σ(x) 当 y=1,否则 1–σ(x) -
超参数:
α:平衡正负样本,一般 0.25~0.75γ:聚焦因子,抑制易分样本梯度(γ=1~4)
-
推荐取值:
α=0.5~0.75, γ=2.0 -
效果:对“难分”样本自动放大梯度,提升模型鲁棒性,但在多标签召回提升有限。
- 思路:对正/负样本分别设置不同聚焦因子,偏向提升少数类召回。
- 公式:
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 |
- 在
config.py中添加故障类型 - 在
generate_dataset.py中实现故障注入逻辑 - 重新训练模型
- 在
feature_extractor.py中实现新特征提取方法 - 在
FeatureConfig中添加相应配置
- 在
models/目录下创建新模型文件 - 继承
BaseModel类 - 在训练脚本中注册新模型
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或联系开发者。
- 统计特征:均值、方差、偏度、峰度等,不依赖网络规模
- 频谱特征:FFT和小波变换,捕捉频域信息
- 时序特征:趋势、变化率、峰值检测等
- 系统级聚合:将设备级特征聚合为固定维度
- LSTM:处理时序依赖关系
- CNN:处理频谱和空间特征
- 集成模型:结合两者优势,支持注意力机制
- 数据生成→特征提取→模型训练→评估分析
- 模块化设计,易于扩展和维护
- 完善的配置管理和日志系统
- 支持命令行操作
- 自动化的实验管道
- 详细的评估和可视化
这个项目可以处理任意规模的电力网络,通过特征工程将变长特征转换为固定维度,实现了真正的通用性。您可以直接使用这个框架进行电力系统故障检测研究。