联系方式

    深圳市英瑞尔芯科技有限公司

    电话:

    186 6591 0262

    E-mail:

    sally@szinter.com.cn

    地址:

    深圳市福田区振华路现代之窗A座7B

嵌入式MCU也能跑AI?STM32 Cube.AI工具包使用初探

发布时间:2022-08-08 16:24:00

来源:http://www.szinter.com.cn/news850379.html

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

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

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

Cube.AI的主要特点:

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

更多相关信息,请参看:

>st.com/en/embedded-software/x-cube-ai.html?icmp=tt9145_gl_pron_dec2018

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

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

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

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

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

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

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

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会损失部分精度,应在硬件能承受的范围内,尽量选择小的压缩率。

AI模型选择界面

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

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

在Additional Software中进一步配置AI库

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

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

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

输出Validation OK,说明模型没有问题

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

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

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

将CPU ICache与CPU DCache使能

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

时钟配置界面

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

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

将代码输出

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

工程的文件结构

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

板上实际效果

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

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

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

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

相关标签: