内容简介
本文章主要介绍如何将AI模型部署到单片机上,并实现一些基础的逻辑功能,本次文章主要从模型获取,模型部署以及模型使用三个层次进行介绍
模型获取
在模型部署的前期阶段我们并没有独立制造模型的能力,但本阶段我们的目标是去使用模型而非创造模型,只要能够成功部署并调用模型本阶段的任务就圆满完成了,因此本阶段我们的模型只能自己想办法去获取,主要途径如下
意法半导体官方获取
在STM32CubeMXAI的官方下载页面中下拉就可以找到对应的官方模型库
网址如下
下拉后可以看到对应的STM32 Model Zoo的相关信息,点击了解更多信息
在新弹出的页面中选择前往Model Zoo
随后我们便跳转到了意法半导体官方在GitHub上提供的模型仓库,
下拉即可找到不同类型的开源模型
同时意法半导体官方还在Hugging Face上提供了相应的AI模型

网址如下
通过观察不难发现官方提供的AI模型大多用于进行图像处理相关操作,这对开发板的板载芯片性能要求较高,且需要使用到对应的摄像头模块,最重要的部署难度也很高,因此对本阶段的学习并不友好,如果后面大家熟练掌握了如何进行模型部署后,或需要使用单片机进行图像处理的相关工作时可以回来再看看有没有满足自己使用需求的AI模型
如何流畅访问Github和Hugging Face
意法半导体提供的AI模型分别存放在GIthub和Hugging Face网站中,一般情况下大家访问这两个网站时会出现网站响应超时,或者网站访问失败等类似报错,因此为了能够流畅的访问这两个网站最好且最容易操作的方法就是在后台挂载相应的加速器
使用Watt Toolkit加速器进行加速
该软件下载方式较为简单,只需要在Windows自带的软件商店中收索对应的软件即可进行下载

该软件的使用方法也较为简单选择进入网络加速页面,在该页面中选择需要加速的网站,并点击一键加速即可
这个加速器可以解决绝大部分情况下Github网站无法访问以及访问卡顿的问题
使用Steamcommunity软件进行加速
Steamcommunity相较于Watt Toolkit功能更加强大,且可加速的平台数量也更多,该软件的下载地址如下:
进入网站后下拉,找到对应的下载渠道,结合自己当前使用的操作系统下载对应的软件版本
下载完成后解压压缩包后打卡解压后的文件夹,在其中找到对应的可执行程序,右键以管理员身份运行即可
使用方法与Watt Toolkit类似,在主界面中选择对应的加速平台后点击开始加速即可
此加速器主要用于访问Hugging Face
浏览器收索获取
现在在各大浏览器中收索TInyML,Edge AI等关键词都能获得相应的教程,一般情况下对应教程中也会提供相应的模型供我们去复现相关操作,当然在微信公众号以及B站等平台都可以尝试收索相关内容,这里就给大家推荐一个微信公众号
模型部署
环境搭建
将AI模型部署到MCU上有手动和自动两种方式,绝大多数情况下我们选择自动化部署方式,自动化部署就需要使用到STM32CubeMX软件进行相关的自动化操作,但STM32CubeMX并不能做到开箱即用,需要在原有基础上进行一些改动,这里默认大家都以及成功安装好了CubeMX,并且能够正常使用CubeMX进行单片机程序的初始化操作
- 打开软件在初始界面中选择Help选项,并在随后的弹窗中选择Manager embedded software packages选项,或者直接按下键盘快捷键Alt+U

- 在新弹出的界面中选择STMicroeletcronics选项,并在下面的选项框中下拉找到X-CUBE-AI选项,点开折叠区并在下方选择需要安装的版本,随后选择install选项即可

- 至此基本的AI模型环境搭建操作就完成了
模型部署流程
单片机型号选择
我们打开CubeMX像往常一样尝试创建一个新的MCU工程,随后来到了芯片选型界面,在左侧的选项栏中一直下拉,就可以在最后一栏看到对应AI模型使能选项,勾选对应选项即可实现AI功能的使能
但是如果此时我们选取的是F1系列的芯片我们就会发现,此时对应的选项框为无法选择状态

由此可以看出CubeMX并不支持对F1系列芯片进行AI模型的自动化部署功能,主要原因是F1系列芯片性能较差,因此CubeMX就默认不支持对F1系列芯片的自动化操作,但是这并不意味着我们不能在F1系列芯片上运行AI模型,我们可以手动将较小型的AI模型移植到F1系列芯片中,但是操作流程也会非常复杂
模型选择与部署
- 本次我使用的是正点原子的F7系列开发板,在工程创建后通过图形化界面对工程项目进行一系列的初始化操作(这里不做过多介绍)
- 当时钟以及串口等相关基础配置设置完成后即可进行AI模型的部署,在图形化界面中选择Software Packs,并在弹出的选项框中选择Select Components,或者直接按下键盘上的Alt+O快捷键

在弹出的新窗口中进行相应模型功能的使能和添加工作,在对应的选项框中打勾,并选择对应的模式
选择X-CUBE-AI折叠选项中的Core之后即可激活对应的AI功能,随后下面的选项框中就是在选择不同的模式,三种模式的应用场景各不相同
- SystemPerformance模式主要用于评估在STM32硬件上的实时性能指标(如推理时间、CPU负载等),主要应用于模型部署前的性能分析
- Validation模式主要用于验证模型转换后的准确性,该模式可以在桌面环境和MCU中进行验证,主要应用于模型转换后的可靠性检查,防止压缩以及量化导致的精度损失
- Application Template模式主要目的为提供AI模型的框架,便于用户添加对应的业务逻辑,相应的功能需要用户自行扩展,例如传感器数据采集等等,此模式应用于实际的落地项目中
根据我们目前的需求来说,我们不需要进行AI模型的可靠性检测,因为别人已经完成了这一部分操作,因此我们只需要进行模型的部署,以及模型的调用工作即可,在此我们选择Application Template模式模式
选择成功后在左侧的侧边栏中选择最底部的折叠选项卡,在随后弹出的新选项中选择X-CUBE-AI,并在侧边栏右侧的新窗口中点击Add network选项为当前项目中添加新的AI神经网络模型
接下来我们就可以在弹出的新窗口中进行AI模型的相关配置
当前界面中的选项作用依次如下: - network所在栏代表的是当前AI模型的名称,支持用户自定义
- Keras所在栏代表AI模型文件的格式,当前CubeMX支持三种AI模型的格式,分别是Keras(对应AI模型文件后缀为.h5)、TFLite(对应AI模型文件后缀为.tflite)以及ONNX(对应AI模型后缀为.onnx),我们在使用这些AI模型的时候只需要注意选择合适的文件类型以及相应对应的文件格式即可
- Compression代表压缩等级,当当前AI模型体积较大无法完整写入MCU时可以使用当前选项,对AI模型进行适当的压缩,以减少资源消耗
- Optimization代表优化等级,即会对当前AI模型进行空间优化以及推理时间优化等
- Validation inputs作用为提供验证数据源,当选则Random numbers时代表使用随机生成的数据进行验证,当然我们也可以使用自己提前准备好的数据进行验证
- Validation outputs控制验证输出结果的处理方式,这个选项使用到的频率较低
- 下面的Complexity'Used Flash以及Used Ram在没有选择AI模型时展示了当前的MCU的硬件资源,即当前真展示的当前使用的MCU有着1MB的Flash以及512kb的Ram,用电脑的概念来类推就是当前MCU有1MB的磁盘和512KB的内存
- Analyze选项的作用为验证当前AI模型能否在MCU上正常运行,例如倘若AI模型的体积较大时便会出现警告
- validate on desktop以及validate on target就是分别在PC端的MCU端进行模型的可靠性验证
了解了AI模型配置面板的基本功能后选择合适的AI模型类型,本次我们使用的AI模型类型文件的后缀为.tflite,依次需要选择TFLite类型的AI,选择完成后点击Browse选项,随后在对应的文件夹中找到下载好的AI模型
随后点击Analyze选项,当结果不报错时即代表模型可以正确烧录到MCU中
从分析界面中可以查看到AI模型占用的AI资源,Flash和Ram等
如果AI模型占用的资源超过了当前选型的芯片则可以尝试使用Compression选项对模型进行压缩,随后我们点击进入项目配置界面填写相应的工程名称以及使用的IDE(本次使用MDK_ARM)

随后点击对应的Code Generator栏目并进行相应改进
最后即可点击右上角的Generator CODE即可一键生成对应的工程
模型使用
项目生成后我们用keil5打开项目后发现当前项目于先前的项目不同的地方在于多了一个新的文件夹,文件夹中的文件都为与AI模型相关的文件
因此我们只需要了解新增文件中的内容就可以轻松实现AI模型的调用
新增文件中有4个.c文件,每个C文件又对应一个头文件,因此相当于新增了8个与AI模型有关的新文件,但是这并不意味着我们需要详细了解每一个文件中的内容,这几个文件的作用各不相同:
- network.c/network.h文件:这两个文件的名称与我们在添加AI模型时自定义的AI模型名称相同,因此不难推出这两个文件中主要存储了模型的结构、接口函数