良许Linux教程网 干货合集 我在STM32单片机上跑神经网络算法

我在STM32单片机上跑神经网络算法

image-20231013215336268
image-20231013215336268

摘要:为什么在STM32上运行神经网络是可行的?简言之,我们可以使用STM32CubeMX中的X-Cube-AI扩展包将当前热门的AI框架转换为C代码,以便在嵌入式设备上使用。目前,使用X-Cube-AI需要使用STM32CubeMX的5.0版本以上,并支持转换的模型包括Keras、TFlite、ONNX、Lasagne、Caffe和ConvNetJS。Cube-AI将模型转换为一系列数组,然后解析这些数组以构建模型,与TensorFlow中的模型转换为数组后的原理相同。

为什么可以在STM32上运行神经网络呢?简单来说,这是因为STM32CubeMX中引入了一个名为X-Cube-AI的扩展包,可以将目前热门的AI框架转化为适用于嵌入式设备的C代码。当前使用X-Cube-AI需要使用STM32CubeMX的5.0版本以上,支持转化的模型包括Keras、TFlite、ONNX、Lasagne、Caffe和ConvNetJS等多种。Cube-AI会将模型转化为一系列的数组,然后通过解析这些数组内容来构建模型。这个过程与Tensorflow中将模型转化为数组后使用的原理是一样的。

一、环境安装和配置

  1. STM32CubeMX
  2. MDK/IAR/STM32CubeIDE
  3. F4/H7/MP157开发板

二、AI神经网络模型搭建

这里使用官方提供的模型进行测试,用keras框架训练:

image-20231013215340409
image-20231013215340409
https://github.com/Shahnawax/HAR-CNN-Keras

模型介绍

在Keras中使用CNN进行人类活动识别:此存储库包含小型项目的代码。该项目的目的是创建一个简单的基于卷积神经网络(CNN)的人类活动识别(HAR)系统。该系统使用来自3D加速度计的传感器数据,并识别用户的活动,例如:前进或后退。HAR意为Human Activity Recognition(HAR)system,即人类行为识别。这个模型是根据人一段时间内的3D加速度数据,来判断人当前的行为,比如走路,跑步,上楼,下楼等,很符合Cortex-M系列MCU的应用场景。使用的数据如下图所示。

image-20231013215351450
image-20231013215351450

HAR用到的原始数据

存储库包含以下文件

  1. HAR.py,Python脚本文件,包含基于CNN的人类活动识别(HAR)模型的Keras实现,
  2. actitracker_raw.txt、包含此实验中使用的数据集的文本文件,
  3. model.h5,一个预训练模型,根据训练数据进行训练,
  4. evaluate_model.py、Python 脚本文件,其中包含评估脚本。此脚本在提供的 testData 上评估预训练 netowrk 的性能,
  5. testData.npy,Python 数据文件,包含用于评估可用预训练模型的测试数据,
  6. groundTruth.npy,Python 数据文件,包含测试数据的相应输出的地面真值和
  7. README.md.

这么多文件不要慌,模型训练后得到model.h5模型,才是我们需要的。

三、新建工程

1.这里默认大家都已经安装好了STM32CubeMX软件。

在STM32上验证神经网络模型(HAR人体活动识别),一般需要STM32F3/F4/L4/F7/L7系列高性能单片机,运行网络模型一般需要3MB以上的闪存空间,一般的单片机不支持这么大的空间,CUBEMX提供了一个压缩率的选项,可以选择合适的压缩率,实际是压缩神经网络模型的权重系数,使得网络模型可以在单片机上运行,压缩率为8,使得模型缩小到366KB,验证可以通过;

image-20231013215356398
image-20231013215356398

然后按照下面的步骤安装好CUBE.AI的扩展包

image-20231013215359640
image-20231013215359640

这个我安装了三个,安装最新版本的一个版本就可以。

image-20231013215402451
image-20231013215402451

接下来就是熟悉的新建工程了

image-20231013215405876
image-20231013215405876

因为安装了AI的包,所以在这个界面会出现artificial intelligence这个选项,点击Enable可以查看哪一些芯片支持AI

image-20231013215409103
image-20231013215409103

接下来就是配置下载接口和外部晶振了。

image-20231013215412966
image-20231013215412966
image-20231013215416929
image-20231013215416929

然后记得要选择一个串口作为调试信息打印输出。

image-20231013215421020
image-20231013215421020

选择Software Packs,进入后把AI相关的两个包点开,第一个打上勾,第一个选择Validation

image-20231013215425448
image-20231013215425448
image-20231013215428291
image-20231013215428291
  • System Performance工程:整个应用程序项目运行在STM32MCU上,可以准确测量NN推理结果,CP∪U负载和内存使用情况。使用串行终端监控结果(e.g.Tera Term)
  • Validation工程:完整的应用程序,在桌面PC和基于STM32 Arm Cortex-m的MCU嵌入式环境中,通过随机或用户测试数据,递增地验证NN返回的结果。与 X-CUBE-A验证工具一起使用。
  • Application Template工程:允许构建应用程序的空模板项目,包括多网络支持。

之后左边栏中的Software Packs点开,选择其中的X-CUBE-AI,弹出的Mode窗口中两个复选框都打勾,Configuration窗口中,点开network选项卡。

image-20231013215434146
image-20231013215434146

选择刚刚配置的串口作为调试用。

image-20231013215437354
image-20231013215437354

点击add network,选择上述下载好的model点h5模型,选择压缩倍数8;

image-20231013215443622
image-20231013215443622

点击分析,可从中看到模型压缩前后的参数对比

image-20231013215446873
image-20231013215446873

点击validation on desktop 在PC上进行模型验证,包括原模型与转换后模型的对比,下方也会显示验证的结果。

image-20231013215450192
image-20231013215450192

至此,模型验证完成,下面开始模型部署

四、模型转换与部署

时钟配置,系统会自动进行时钟配置。按照你单片机的实际选型配置时钟就可以了。

image-20231013215455290
image-20231013215455290
image-20231013215458307
image-20231013215458307
image-20231013215501228
image-20231013215501228

最后点击GENERATE CODE生成工程。

image-20231013215504165
image-20231013215504165

然后在MDK中编译链接。

image-20231013215513927
image-20231013215513927

选择好下载器后就可以下载代码了。

image-20231013215517915
image-20231013215517915
image-20231013215527358
image-20231013215527358

然后打开串口调试助手就可以看到一系列的打印信息了。

image-20231013215538871
image-20231013215538871

代码烧写在芯片里后,回到CubeMX中下图所示位置,我们点击Validate on target,在板上运行验证程序,效果如下图,可以工作,证明模型成功部署在MCU中。

image-20231013215542543
image-20231013215542543
image-20231013215545782
image-20231013215545782

这次就这样先跑一下官方的例程,以后再研究一下,跑跑自己的模型。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部