在Simulink中為深度學習網絡生成通用的C/C++代碼
目次
- 引言
- 使用Simulink Coder和Embedded Coder生成通用C和C++代码
- 部署Simulink模型中的深度神经网络
- 在ARM Cortex-M处理器上部署深度学习网络
- 在Simulink中模拟深度学习模型
- 使用生成的代码在硬件上运行深度学习网络
- 使用SIL/PIL模式验证生成代码的准确性
- 结论
- 深度学习代码生成和Simulink中的链接和资源
引言
深度学习在人工智能领域取得了显著的突破,但部署深度学习模型到嵌入式系统中仍然是一个挑战。Simulink提供了一种便捷的方式来设计和模拟深度学习模型,并使用Simulink Coder和Embedded Coder生成通用的C和C++代码。本文将介绍如何使用Simulink和这些代码生成工具来部署深度神经网络到ARM Cortex-M处理器上。
使用Simulink Coder和Embedded Coder生成通用C和C++代码
Simulink Coder和Embedded Coder是MATLAB中的两个强大工具,可以从Simulink模型中生成通用的C和C++代码。这些代码不依赖于第三方库,可以部署到任何编译C和C++代码的嵌入式处理器上,包括ARM Cortex-M系列处理器、DSP和来自各种设备供应商的微控制器。
要生成通用C和C++代码,只需设置适当的配置参数,并使用Simulink Coder和Embedded Coder工具链进行代码生成。在配置参数中,可以选择目标硬件板和目标语言(C或C++),还可以设置深度学习目标库为none,以删除对第三方库的依赖。
生成的代码可以用于生成卷积和循环深度学习神经网络。可以使用深度学习工具箱中的块将网络对象集成到Simulink模型中,其中包括R2021a版本中引入的Stateful Classify和Stateful Predict块,或者可以使用MATLAB函数块进行集成。受支持的网络和层的完整列表可以在Simulink的文档中找到。
部署Simulink模型中的深度神经网络
让我们以一个示例来演示如何将深度学习网络从Simulink部署到ARM Cortex-M处理器上。在本例中,我们将使用一个LSTM网络来预测涡轮引擎的剩余可用寿命。预训练的网络接受来自17个引擎传感器的序列数据,并输出以循环为单位测量的引擎剩余可用寿命的预测值。
在Simulink模型中,我们可以使用FIR块将时间序列输入数据传递给预测神经网络块。使用Deep Network Designer应用程序,我们可以更深入地查看网络的结构,并了解它包含六个层,包括一个LSTM层。通过模拟模型,我们可以看到预训练的神经网络相对准确地预测了这些观测值中涡轮引擎的剩余可用寿命,预测值与实际值非常接近,均方根误差为20.37。
现在让我们生成模型的通用C代码,并将其部署到ARM Cortex-M处理器上。在配置参数中,我们选择了STM32F746G-Discovery开发板作为硬件板,并将系统目标文件设置为使用Embedded Coder和C语言。我们将使用适用于ARM嵌入式处理器的新工具链。为了确保生成的代码不依赖于第三方库,我们将深度学习目标库设置为none。
成功生成代码后,我们将使用处理器循环执行来验证生成代码的输出。在第二个模型中,我们将之前看到的预测块放置在模型引用中,并将其模拟模式设置为PIL。通过SIL/PIL管理器应用程序,我们将模拟模式设置为仅SIL/PIL,以收集在PIL执行时从运行生成的代码获得的结果,并选择以模型块在SIL/PIL模式下的方式作为我们的测试系统。
在模拟后,我们将比较在硬件上运行生成的C代码与Simulink中的预测输出。通过生成PIL模式下的模型引用块的代码来运行生成的代码,与Cortex-M Discovery开发板建立连接,并最终构建和下载源代码。从左侧的图中可以看到,在硬件上运行的生成代码的结果与实际的测试数据非常接近。为了验证代码的数值准确性,我们在右侧创建了第二组图,显示了在Simulink和PIL模式下在目标硬件上运行仿真时的预测差异,所有10个观测值显示的偏差都在一个约为500,000的容差范围内,对神经网络的准确性几乎没有影响。
结论
通过使用Simulink Coder和Embedded Coder来生成通用C和C++代码,并将深度学习模型部署到ARM Cortex-M处理器上,我们可以扩展Simulink的应用范围,使其能够应用于几乎任何嵌入式处理器。通过使用SIL/PIL模式进行测试验证,我们还验证了生成的代码的输出与Simulink仿真的一致性。
要了解更多关于深度学习代码生成和Simulink的信息,请点击以下链接或参考我们的文档。
深度学习代码生成和Simulink中的链接和资源