谷谷小师妹 发表于 2023-11-26 12:32:52

MCU与AI——使用NanoEdge AI Studio生成AI模型

MCU与AI——使用NanoEdge AI Studio生成AI模型


之前关于MCU与AI的文章使用自建的数据集,选用并修改已有模型进行训练,通过X-CUBE-AI把训练好的模型转成C语言代码,最终嵌入到MCU工程中,从而实现边缘端AI。这里边存在的问题是建立数据集异常耗时,需要极好的耐心与细致的工作,而且,针对不同的AI应用建立模型需要深厚的人工智能理论基础与实践能力。因而,上述实现边缘端AI的方法存在较高的门槛,对较多人并不适用。
好消息是,ST提供了一种一站式实现边缘端AI的工具——NanoEdge AI Studio(以下简称NanoEdge ),该工具集数据采集与数据集制作,模型训练及最优模型的选择(其内部包含了大量的机器学习模型),模型的测试、验证与部署等工作。简化了数据集制作过程,甚至不需要会用python写或修改模型,我们仅需要知道基本工作原理与流程就能实现边缘端的AI。
NanoEdge跟TouchGFX一样,由ST从其他公司收购而来,可以到这个网站下载(NanoEdge AI Studio - STMicroelectronics - STM32 AI)。使用时需要注册并获得注册码,目前可以在ST的芯片上免费使用。
接下来的几篇文章,将利用NanoEdge完成一个基于边缘端AI的运动状态检测系统。
软硬件环境介绍硬件平台
[*]开发板:ST官方出品的B-U585I-IOT02A,MCU为基于Cotex-M33的STM32U585,板载ST-Link 3.0,WiFi,蓝牙以及各类传感器,包含本次用到的3轴加速度传感器ISM330DHCX
[*]PC
[*]Micro USB线一根
软件平台
[*]Windows 11
[*]STM32CubeMX 6.9.1
[*]STM32CubeIDE 1.13
[*]NanoEdge AI Studio 3.4.2
[*]Tera Term或类似串口终端工具

使用NanoEdge AI Studio生成运动状态检测模型建立NanoEdge 工程
安装好NanoEdge后,在主页面可以看到以下图标,可以建立异常检测,单分类,多分类和外推这四种机器学习工程。很显然,我们这次的运动状态检测属于多分类。点击多分类图标,新建工程。在接下来的设置界面中,可以明显地看出NanoEdge工程总共分为6步,第1步设置工程参数,第2步获取数据并制作数据集,第3步使用数据集对内置的模型进行训练,第4步使用新数据对择优的模型进行测试,第5步根据前面的测试结果选取最终的机器学习模型,第6步转换选取的机器学习模型,生成库文件供边缘端机器学习工程使用。
第1步中要注意的事项是库文件最大内存值的设置,一般默认就行,这个值会限制后续机器学习模型占用的内存量,也就是占用内存过大的模型会被过滤掉;另外,目标板的选择,可供选择的都是ST官方的开发板,如果是自制板,或者是第三方开发板则需要到ST网站申请使用。就实际使用而言,如果自己的开发板上使用的芯片与某一款官方开发板上的芯片正好相同,也可以使用;传感器类型这里选择3轴加速度传感器。
数据集的制作接下来第2步,获取并制作数据集,如下图所示。NanoEdge默认的数据集格式为一个数据样本一行,最少20行数据存在一个csv文件中,作为某个分类的训练数据。对每个数据样本(也即一行数据)而言,假设是3轴传感器数据,那么存储的数据格式为X轴第0个数据,Y轴第0个数据,Z轴第0个数据,X轴第1个数据,Y轴第1个数据,Z轴第1个数据。。。数据间的分隔符建议用空格,因为第4步的时候只认空格(应该是程序BUG),每行每轴的数据个数可以设置,但必须是2的n次幂。点击上图中的ADD SIGNAL,出现下图的弹窗,数据来源有三个选项,可以使用已有的数据,可以用USB连接含有相应传感器的开发板实时获取数据,还可以从ST的某些传感器类开发板获取数据,这些开发板会把数据存到TF卡内,然后读进电脑处理。
这里我们使用第二个选项,连接B-U585I-IOT02A开发板的ST-LINK USB口,通过虚拟串口接收数据。开发板上的数据采集代码可在之前MCU与AI文章中的数据采集代码基础上修改,注意设置数据间隔符为空格,每行数据结束使用换行符,并且每行数据长度与NanoEdge里设置得一致。之前的代码可使用
git下载: git clone https://gitee.com/matchrom/mcu-ai-example.git另外,NanoEdge也提供了Data Logger功能,能够直接生成几款特定开发板对应的数据采集程序固件,注意,不是源代码。选择USB口采集数据后,弹窗如下,选择好串口号,波特率,采集的行数后点开始就能进行采集了。采集完成相应的行数后导入数据,进行下一次采集。数据导入后会生成csv文件,文件应根据采集数据时的状态分类命名。比如“stationary”,“walking”,“running”等。到这里,数据集就制作完成了。
注意:数据采集时每行数据的长度,也即是每轴数据的个数的选择问题。首先需要确定的是数据采集频率,这个应该根据香农定理,采样频率应大于信号最高频率的2倍。运动检测时,采样频率一般设置为26Hz。当每行数据长度设置为32时,每行采样时长为1.2s。1s左右的时长是比较合理的。
那么数据行数也可以根据需要选择,一般选择20行以上,需要更好的精度则可以选择更多的行数。
模型的训练
接下来就可以进行模型的训练了。NanoEdge提供了非常多的机器学习模型,可以使用上一步制作的数据集进行训练,然后根据各个模型的准确度,RAM和Flash的占用量进行打分,择优录用。这个过程比较耗时,尽量使用性能强的电脑来跑。结果如下图所示:一共产生了29个结果,最好的模型的分数达到了99.87,是一种SVM模型,也是后续我们选择的模型。

模型的测试与验证
接下来第4步进行模型的测试,测试数据可以从文件读取,也可以从开发板获取,跟数据集制作时的过程差不多,这里就不多说了。
在验证阶段可以继续选择某一个模型进行额外的验证测试,测试数据集可以从训练数据集以外进行选择,也可以从开发板实时读取。这部分根据需要进行。
模型的生成
最后,就可以生成能够给嵌入式工程使用的模型文件,这里生成的是一个库文件和相关的头文件,如下图所示。下图左边是一些选项,第一个复选框是选择输出多个模型生成库文件,不勾选的话只生成最优的那个;第二个复选框根据目标CPU是否包含硬件浮点单元选择,包含就勾选;勾选第三个和第四个复选框的话能够降低内存用量,但也会降低准确度,根据需要是否勾选。
下图右边是示例代码,指导用户的嵌入式代码该如何调用生成的模型库文件。
点击“COMPILE LIBRARY”就能够生成相应的库文件和头文件。
小结
这篇文章介绍了如何使用NanoEdge获取并制作数据集,训练和验证模型并最终生成用户代码能够调用的库文件的过程,基本上相当于一站式的嵌入式人工智能解决方案了。但是使用过程中肯定会遇到很多问题,而且官方文档读起来也不是那么容易理解,需要下一定的功夫。希望这篇文章对需要的人有所帮助。
接下来将介绍如何在运动状态检测工程中调用这次生成的模型文件,实现在线运动状态检测。
页: [1]
查看完整版本: MCU与AI——使用NanoEdge AI Studio生成AI模型