Realistic fault detection of li-ion battery via dynamical deep learning

昇科能源、清华大学欧阳明高院士团队等的最新研究成果《动态深度学习实现锂离子电池异常检测》,用已经处理的整车充电段数据,分析车辆当前或近期是否存在故障。

思想步骤:

  1. 用正常电池的充电片段数据构造训练集,用如下的方式构造损失函数训练模型。
    损失函数构造:
    (1)计算mean_pred(由encoder输出)和里程之间的mse损失;
    (2)计算log_p(由decoder输出)和("min_temp", "max_single_volt", "max_temp", "min_single_volt", "volt")之间的SmoothL1Loss损失;
    (3)计算log_v和mean的kl损失。
    (4)最终的损失由(1)(2)(3)加权得出。
  2. 用1中的模型计算训练集和部分故障车充电数据(result)的误差(这里的误差指的是如上(2)所示)。
  3. 获得误差阈值,误差阈值的选取方式为:误差排序后((2)所示)的第千分之n的result数据所对应的误差值,n是使得result数据中故障车的比例最高时的取值。
  4. 按照真实故障标签和同一辆车前百分比误差均值计算auroc,按照误差阈值计算混淆矩阵、召回率等。
  5. 用剩余正常电池的充电片段数据和剩余故障电池的充电片段数据构建测试集
  6. 用3中所述误差阈值计算5中测试集的故障标签,计算混淆矩阵、召回率等,按照真实故障标签和同一辆车前百分比误差均值计算auroc

数据介绍

  1. 文章发布了从清华大学EV数据平台收集的三个大规模数据集,这些数据集包括来自347辆电动汽车的69万多个LiB充电片段,包括55辆异常车辆(LiB故障车辆)和292辆正常车辆(LiB无故障车辆),为相同品牌的车辆。

  2. 车级故障标签由驾驶员报告生成,工程师根据镀锂、续航里程过低、温度过高或电压异常变化(过低、电池间不一致等)的识别进行确认。这些标签是逐案创建的,不能用基于规则的数据表达式来描述。

  3. 电池故障时或故障附近的异常数据被删除。

  4. 发布的数据已经被清洗过,数值的大小不能再反映电池本身的特性,但数据变化的趋势仍然符合电池的规律,每个样本数据(对应于作者给的每个pkl文件)具有(128, 8)的时序数据。

  5. 字段名称:包含两部分,第一部分的列名为:volt, current, soc, max_single_volt, min_single_volt, max_temp, min_temp, timestamp;第二部分的列名为:fault label, car number, charge segment number and mileage
    timestamp:时间戳
    fault label:故障标签,多种故障类型在数据中统一标注为1
    样本数据案例:

    (array([[ -1.54891411, -107.14166667, 46.97083333, ..., 29. ,
    26. , 0. ],
    [ -1.54891411, -107.1625 , 47.16875 , ..., 29. ,
    26. , 10. ],
    [ -1.54891411, -107.18333333, 47.36666667, ..., 29. ,
    26. , 20. ],
    ...,
    [ 1.59613311, -90.29166667, 72.91666667, ..., 34. ,
    31. , 1250. ],
    [ 1.62806252, -90.02083333, 73.08333333, ..., 34. ,
    31. , 1260. ],
    [ 1.65999193, -89.6875 , 73.25 , ..., 34. ,
    31. , 1270. ]]), OrderedDict([('label', '00'), ('car', 168), ('charge_segment', '122'), ('mileage', 1728.670740234375)]))

    复制代码
         样本案例中取出第一条数据:
         [  -1.54891411 -107.14166667   46.97083333    3.76328125    3.74908854
       29.           26.            0.        ]

模型

复制代码
model DynamicVAE(
  (encoder_rnn): GRU(7, 128, num_layers=2, batch_first=True, bidirectional=True)
  (decoder_rnn): GRU(2, 128, num_layers=2, batch_first=True, bidirectional=True)
  (hidden2mean): Linear(in_features=512, out_features=8, bias=True)
  (hidden2log_v): Linear(in_features=512, out_features=8, bias=True)
  (latent2hidden): Linear(in_features=8, out_features=512, bias=True)
  (outputs2embedding): Linear(in_features=256, out_features=5, bias=True)
  (mean2latent): Sequential(
    (0): Linear(in_features=8, out_features=64, bias=True)
    (1): ReLU()
    (2): Linear(in_features=64, out_features=1, bias=True)
  )

结果

battery_brand1五折交叉验证后的结果,感觉召回率不理想啊,忧愁。

论文的疑问

  1. 最大的疑问就是召回率咋那么低,该咋调
  2. 训练集是由正常车数据组成的?给的源码我理解是这样的。
  3. 代码和文章不同之处-里程损失定义和模型定义:代码中里程损失是encoder输出结果和真实里程之间计算mse,文章中写的是decoder结果和真实里程之间计算mse;代码中隐藏层是128维,num_layers是2,文章中是32维3层。
  4. 正常充电片段数据定义规则,故障片段数据定义规则
    如距故障发生时间点算起,向前推多久的数据算作故障数据?
    数据集中的每辆车只有一个确定的故障标签,在样本数据构造过程中,同一辆车不能同时取故障和正常两个时期的数据吗(文章未明确,数据分析得出)
    epochs超过3,loss就不行了?
相关推荐
轻松Ai享生活3 分钟前
GitHub Repo 骨架:Makefile + CUDA 入门程序
人工智能
用户51914958484520 分钟前
对抗性工程实践:利用AI自动化构建GitHub仓库的虚假提交历史
人工智能·aigc
riveting1 小时前
重塑工业设备制造格局:明远智睿 T113-i 的破局之道
人工智能·物联网·制造·t113·明远智睿
zzywxc7871 小时前
详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
开发语言·javascript·人工智能·深度学习·金融·prompt·流程图
算家计算1 小时前
32K上下文开源语音理解、40分钟深度交互——Voxtral-Small-24B-2507本地部署教程
人工智能·开源·aigc
聚客AI2 小时前
📝工程级开源:PyTorch手搓LLaMA4-MoE全栈指南
人工智能·llm·掘金·日新计划
TechubNews2 小时前
加密资产投资的六种策略:稳定币合规后的 Web3 投资和 RWA
人工智能·web3
机器之心2 小时前
7年了,OpenAI官方给出五代GPT对比,网友却怀念起「狂野」初代
人工智能·openai
后端小肥肠2 小时前
Coze+ComfyUI 实战:视频制作成本降10 倍,高质量成片这么做
人工智能·aigc·coze
爱分享的飘哥2 小时前
第七十章:告别“手写循环”噩梦!Trainer结构搭建:PyTorch Lightning让你“一键炼丹”!
人工智能·pytorch·分布式训练·lightning·accelerate·训练框架·trainer