har文件解析工具_嵌入式MCU也能跑AI?STM32 Cube.AI工具包使用初探

STM32近日推出了Cube.AI人工智能神经网络开发工具包,目标是将AI引入微控制器供电的智能设备,位于节点边缘,以及物联网,智能建筑,工业和医疗应用中的深度嵌入式设备。

简而言之,以后就可以在嵌入式MCU上跑AI模型了,买了一块开发板来做一些尝试,做一下记录。

fba5124b54c7060888260dc910ae39fc.png
我所使用的Nucleo开发板,MCU为STM32F767ZIT

Cube.AI的主要特点:

  • 从预先训练的神经网络模型生成STM32优化的库。
  • 支持各种深度学习框架,如Keras,Caffe,ConvnetJS和Lasagne.
  • 通过STM32Cube™集成,可轻松实现不同STM32微控制器系列的便携性。
  • 免费,用户友好的许可条款。

更多相关信息,请参看:

https://www.st.com/en/embedded-software/x-cube-ai.html?icmp=tt9145_gl_pron_dec2018​www.st.com

如果电脑上没有安装过STM32的开发环境,需要首先安装STM32 CubeMX与IAR。STM32 CubeMX可以在STM32官网上下载。

以下为教程部分,建议有条件的小伙伴结合官方视频进行观看,https://www.youtube.com/watch?v=grgNXdkmzzQ&t=396s 。

先安装好CubeMX,打开后,在最右边栏的Manage software installations中选择INSTALL/REMOVE,安装其中的X-CUBE-AI,约700M大小。

94946321a90fd5d18411cfb2c463609b.png
在主界面最右边的这里选择安装AI库

之后创建工程,在左上角输入所用的MCU型号,以我的板子为例,输入STM32F767。选择好型号以后,把左边栏的Artificial Intelligence勾选Enable。

我们使用官方提供的模型进行测试,https://github.com/Shahnawax/HAR-CNN-Keras

HAR意为Human Activity Recognition (HAR) system,即人类行为识别。这个模型是根据人一段时间内的3D加速度数据,来判断人当前的行为,比如走路,跑步,上楼,下楼等,很符合Cortex-M系列MCU的应用场景。使用的数据如下图所示。

863b6ecd3a9113e0745c4e51e4e3a35d.png
HAR用到的原始数据主要包含动作分类、x、y、z轴加速度等

我们下载其中的model.h5文件,虽然还没有细看这个网络的结构,但从模型大小就能略知一二,只有8.48MB,果然MCU还是只能运行小一点的网络。

按下图配置进行选择,注意Compression要选择为4,如果选择不压缩的话,需要的Minimum Flash为2.8MB,就连F767也无法满足。进行Compression为4的压缩后,需要的Minimum Flash为775.52KB。Cortex-M3-M7系列大部分MCU的片上Flash均为1M~2M,可以满足。但Compression会损失部分精度,应在硬件能承受的范围内,尽量选择小的压缩率。

f79af3847cbc3b6f06530b94d07b96fb.png
AI模型选择界面

配置完成后,点击右上角的Start Project进行下一步。

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

660eaf38a4a93329dd0fb50f7086d7a8.png
在Additional Software中进一步配置AI库

之后左边栏中的Additional Software点开,选择其中的X-CUBE-AI,弹出的Mode窗口中两个复选框都打勾,Configuration窗口中,点开network选项卡,配置应该和创建工程时输入的一样。

d69d8833fd2e7783979d6bb2522acf8f.png
检查network选项卡中模型文件配置是否正确

可以点击Validate on desktop进行验证,下方Output选项卡中会输出Validation OK,还有一些验证的细节。

5bef17818440b9a8d75f46fc29f4dc8b.png
输出Validation OK,说明模型没有问题

接下来配置MCU,实际烧写一下,看看能不能work。

首先配置USART串口,我们通过串口来查看板子打印的信息,我这里使用USART3,分别是PD8与PD9。在右边芯片中找到这两个引脚,配置成USART3_TX与USART3_RX。然后在最左的Connectivity中找到USART3,设置为Asynchronous,右边引脚变绿,证明配置完成。

然后在System Core中进行配置,点击CORTEX_M7,将CPU ICache与CPU DCache均设为Enabled。

186d3a1c69ea5d969a1fb21368cd6d99.png
将CPU ICache与CPU DCache使能

最后进行时钟的配置,在最上方选择Clock Configuration,把HCLK配置为板子的最大时钟,F767最大支持216MHz。

90d5bf1649221ec572f54501ba8c4c04.png
时钟配置界面

时钟配置完后,回到Pinout&Configuration选项卡,在Additional Software中(就是我们刚刚检查network模型文件的地方)选择PlatformSettings,COM Port选择为我们刚刚配置的USART3。

至此配置完毕,选择Project Manager,进行代码导出,需要注意的是Linker Settings中Minimum Heap Size要设为0x2000。最后点击最上方GENERATE CODE。

3ea3842f172c10caa479e8e6a3b7f8e8.png
将代码输出

生成代码后,选择Open Project,若已安装IAR,会自动使用IAR打开。可以看到工程的文件结构如下图所示,里面包含了生成好的可以在STM32上运行的模型文件和模型数据。

fc78afdd54fa468c13a828079d402f9e.png
工程的文件结构

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

23e0ee51820aad10f13f1e38a0bf8ddb.png
板上实际测试效果

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

之后有空会把它和Intel计算棒还有显卡做一个对比,对比一下功耗、速度、支持模型的大小、模型部署难易程度等,看看边缘计算各种设备的优劣之处。

以后这个专栏还会出些有趣的实践项目,欢迎大家关注。

转载请联系作者并注明出处,侵权必究。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值