电子书

第 2 章

使用人工智能设计和部署嵌入式算法


使用传统的算法开发方法时,您需要编写一个程序来处理输入,以生成所需的输出。但有时候,方程要么太复杂,无法依据第一原理推导出来,要么计算量太大,无法加以部署;或者在现实中得出所需的测量值是不可能的或成本高昂的。

在这些情况下,不妨考虑创建人工智能模型。嵌入式人工智能算法可以支持:

  • 控制系统
  • 预测性维护
  • 高级驾驶辅助系统 (ADAS)
  • 路径规划
  • 自然语言处理
  • 信号处理
  • 虚拟传感器
  • 目标检测
小节

创建人工智能虚拟传感器:电池荷电状态估计示例

如今,从可穿戴电子产品、手机、笔记本电脑到电动汽车和智能电网,锂离子电池无处不在。电池管理系统 (BMS) 可确保这些电池安全高效运行。BMS 的一项关键任务是估计荷电状态 (SOC)。

由于种种原因,在现实中不可能构建一个可部署的传感器来直接测量 SOC。除了电池,这也是各行各业的许多系统面临的共同挑战。

在许多应用中,传感器可能:

  • 不准确
  • 成本高
  • 慢速
  • 含噪声
  • 易损坏
  • 不可靠
  • 不切实际

您可以创建虚拟传感器来代替物理传感器。

图中显示了从发动机收集的数据和基于人工智能的虚拟传感器的输出之间的紧密映射关系。

将实际发动机的排放与估计 NOX 排放的人工智能虚拟传感器的输出进行比较。(图片所有权:雷诺)

一种不错的选择是,使用扩展卡尔曼滤波器 (EKF) 估计 SOC。EKF 虽然可以提供极高准确度,但是需要具有电池的非线性数学模型,而创建该模型不一定适用或可行。卡尔曼滤波器的计算成本也很高,如果初始状态错误或模型不正确,则生成的结果可能也会不准确。

另一种选择是使用人工智能开发虚拟传感器。如果用适当的数据进行训练的话,人工智能可能比卡尔曼滤波器能更好地进行泛化,并提供准确的结果。

荷电状态 (SOC) 的人工智能模型以电压、电流和温度作为输入,输出估计的荷电水平。

为了创建基于人工智能的虚拟传感器,需要数据来训练该人工智能模型。通过在实验室的受控环境中收集电池读数,您可以借助电流积分法(即,库仑计数法)来准确地计算 SOC 值。

这种方法也很简单,并且计算成本较低。为什么不在 BMS 中使用它来估计 SOC 呢?如果估计不是在可以精确测量电流的实验室环境中进行的,则该方法很容易出错,因此,在 BMS 中使用它来估计 SOC 并非明智的选择。然而,这又是一种获得构建稳健虚拟传感器所需数据的有效方法。

您一旦收集到精确获得的输入/输出数据,就可以使用该数据集来训练基于人工智能的虚拟传感器模型,然后将该模型部署为电池管理系统的一部分。

要创建人工智能模型并将其集成到 Simulink 中,有下面三种方案可供选择:

1.利用 MATLAB 在机器学习框架中进行训练。

2.从 TensorFlow 或 PyTorch 导入模型。

3.利用 MATLAB 在深度学习框架中进行训练。

人工智能模型的优点在于,它可以直接基于测得的数据进行训练。训练数据会捕获荷电状态与输入(如电流、电压、温度以及电流和温度的移动平均值)之间的复杂关系,从而将智能融入到模型中。

因此,人工智能模型可能比基于第一原理的数学模型更快速也更准确。

一旦投入资源来创建高质量的训练数据集,便可以使用 MATLAB® 或其他工具,并结合不同的机器学习或深度学习方法,以创建多个人工智能模型。通过将模型集成到 Simulink 中并对其进行逐一评估,可以找出表现最佳的模型。

关于获取数据的说明

收集优质的训练数据是一项非常艰巨的任务。在人工智能领域,公开可用的数据集推动了人工智能研究的发展。通过使用相同的数据集,研究人员可以轻松地对不同的人工智能方法进行比较和基准测试。共享的数据集和模型将有利于实现可再现性,并建立对人工智能的信任。

但在工业领域,数据往往来自于精心整理的数据集,有时是由专用的实际测试平台或基于第一原理的复杂高保真仿真所生成的。虽然这些试验可能既耗时又成本高昂,但是,经过良好训练的人工智能模型是很有用的,值得前期投入。具有领域专业知识的工程师可以通过设计生成高质量训练数据的试验,在人工智能模型创建过程中实现增值。

小节

仿真和测试基于人工智能的虚拟传感器

一旦训练好人工智能模型,便可以将它们集成到 Simulink 中并对其进行测试。使用 Simulink,可以了解表现最佳的人工智能模型,并确定它是否优于其他备选方法,例如不基于人工智能的 EKF 方法。如前所述,卡尔曼滤波器需要有一个内部电池模型,而这可能无法实现。

以下示例包括一个 EKF 和三个人工智能模型,它们全都使用相同数据但不同人工智能方法进行训练:

  • 精细回归树:一种机器学习方法,构建用于解释输入数据的越来越具体的指标值树。一个精细回归树有许多小叶子,用于实现高度灵活的响应函数。
  • 前馈网络 (DL-FFN):一种深度学习自适应系统,它通过使用互连的节点对输入进行聚类或分类来进行学习。推断期间,信息在网络中向前移动,从不倒退。
  • 长短期记忆网络 (DL-LSTM):一种深度学习自适应系统,使用互连的节点,通过网络中的反馈不仅可以处理单个输入,而且还可以处理相互关联的输入序列。
 Simulink 截图显示接受相同输入并生成不同输出的四个模块以进行比较。

将虚拟传感器模型(EKF、ML、DL-FFN 和 DL-LSTM)集成到 Simulink 中以比较性能。这些模型以电压、电流和温度作为输入,并估计电池的荷电状态。

要评估这些模型,请在 Simulink 中运行同步并排比较。可视化并度量准确度,再将每个模型的输出拟合到一个验证数据集。使用这些信息,在部署到系统硬件之前,便可确定模型是否满足准确度要求。

Simulink 截图,其中包含四个虚拟传感器模型的输出图。这些线条重叠,但 E K F 模型输出的线条偏离最大。M L 输出的线条也偏离了其他输出的线条。

使用 Simulink 将四个虚拟传感器模型的输出绘制在一幅图上,以了解准确度的差异。

此外,您可以将人工智能模型与其他算法结合使用,以进行系统级仿真。例如,可以在整个系统仿真过程中运行人工智能模型,该模型中包括与其他子系统(如发动机或变速器)一起工作的 BMS 子系统。您还可以测试和完善您的模型和其他集成组件,以确保它们能够互操作并且通过了系统级要求。

Simulink 中的电池管理系统原理图,显示了将三个模块互连的输入和输出:状态机、S O C 估计和平衡逻辑。

使用 Statistics and Machine Learning Toolbox™ 和 Deep Learning Toolbox 模块库,将 SOC_Estimation 模块的人工智能模型融入 Simulink 中,以进行系统级测试。

小节

部署嵌入式人工智能模型

下一步是在最终要部署到的硬件上测试人工智能模型。在此步骤中,可以完成模型性能的实际评估。

使用 MATLAB 和 Simulink 代码生成工具,为深度学习网络或机器学习模型生成无库的 C/C++ 代码。将该代码部署到处理器,以在处理器在环 (PIL) 测试过程中测试其操作。在这种情况下,该处理器与使用 Simscape™ 和 Simscape Electrical™ 组件开发的仿真被控对象(在本例中是指仿真的电池动态)互连。

人工智能模型转换为代码、部署到芯片并在仿真测试环境中测试的流程图。

为人工智能模型生成代码,并将其部署到处理器,以进行处理器在环测试。

通过 PIL 测试之后,该模型便可部署到生产硬件。该硬件将运行车内的电池管理系统。

人工智能模型转换为代码、部署到芯片并在车辆上测试的流程图。

为人工智能模型生成代码,并将其部署到硬件,以进行车内测试。

小节

评估性能

PIL 测试揭示了与实际系统相关的性能权衡。例如,虽然精细回归树模型提高了可能有助于故障排除的可解释性,但其大小和准确度可能不在项目要求的范围内。在这种情况下,前馈网络可能是更好的选择。

其他相关属性包括:

  • 推断速度,这是人工智能模型计算预测所需的时间
  • 训练速度,这是使用训练数据训练人工智能模型所需的时间
  • 预处理工作,因为某些模型需要计算移动平均值等额外特征,才能获取以往的预测变量信息
性能权衡表,提供四列数据,每个模型对应一列,用于比较训练速度、可解释性、推断速度、模型大小和准确度。例如,DLL STM 模型的推断速度慢,模型较大,准确度高。

不同虚拟传感器建模方法的重要属性之比较。DL-FNN 提供较快的推断速度和较高的准确度,但需要完成预处理工作,也需要更长的训练时间,并且不可解释。

小节

压缩人工智能模型

模型压缩是一种需要分析、理解、迭代和优化的权衡行为。但对嵌入式软件工程师来说,这通常是必不可少的,因为在某些情况下,人工智能模型占用的内存会超出硬件的内存限制。

工程师们正在想方设法通过剪枝、量化和定点转换等做法来减少模型占用的内存。

在 Deep Learning Toolbox™ 中,一种减少模型大小的新方法是,使用投影来压缩深度学习网络。这种方法让我们能够在模型大小、推断速度和准确度之间做出权衡。对于此示例,准确度没有明显的损失。使用投影层进行压缩减少了 91% 的内存占用,并使推断速度提高了一倍。

表中比较了未压缩和压缩后的 D L L S T M 模型。与未压缩的模型相比,压缩后模型的推断速度更快,且大小也小得多,而其准确度并没有任何损失。

压缩可以将极其准确但又大又慢的模型转换为较小但运行速度快得多的模型,而不会损失准确度。

小节

客户为电动汽车设计的 BMS 述评

Gotion 是一家专注于下一代储能技术的公司。该公司希望创建一个神经网络模型,用于在电动汽车充电过程中估计荷电状态。该模型的准确度需要在 3% 的裕度内,并且所占用的内存足够小,以便它可用于生产部署。该模型还需要在车载测试中进行验证。

Deep Learning Toolbox 为该团队提供了一种使用以往电池充电数据训练神经网络的低代码方法。他们使用迭代工作流仿真、改进和验证了模型。借助 Simulink,工程师们将模型与系统的其余部分集成到一起并对其进行了测试。在仿真过程中,他们使用 Simulink Test™ 来验证模型是否满足准确度要求。

对模型的性能感到满意后,他们自动生成了用于 HIL 测试和车载测试的代码。

工程师们指出,使用 MATLAB 和 Simulink 具有以下几大好处:

  • 使用 Requirements Toolbox、Deep Learning Toolbox、Simulink、Embedded Coder 和 Simulink Test 可将人工智能融入现有的验证和确认工作流中
  • 执行从需求捕获到模型开发、系统集成、模型部署和生产硬件的整个工作流
  • 通过仿真和 HIL 测试,确信模型在部署前能够满足准确度要求
  • 从神经网络自动生成代码,且内存占用小(<2 KB ROM、<100 B RAM)
四幅图显示,在不断变化的电压、电流、温度等不同条件下,目标荷电状态和估计荷电状态相似。

Simulink Test 可用于在各种条件下对准确度进行系统级测试,包括在现实测试(例如极寒天气测试)中难以仿真的条件。

知识测试