0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何基于STM32Cube.AI 从零开始创建AI项目

意法半导体中国 来源:意法半导体中国 作者:意法半导体中国 2022-07-30 09:31 次阅读

在之前的文章中,我们介绍了没有AI基础知识的工程师如何使用NanoEdge AI快速训练一个用于风扇异常检测的模型。

该模型根据来自电机控制板的电流信号,检测风扇过滤单元的堵塞百分比。我们知道,当风扇发生堵塞时,电机的电流信号形状会与正常时不同,而传统算法很难有效地处理这种差异。因此,机器学习算法成为解决该问题的明智选择。对于机器学习算法,我们通常使用scikit-learn库来训练模型。今天我们将展示如何自行训练机器学习模型,然后使用STM32Cube.AI 将其部署到同一设备上,以便让大家充分了解两种工具的不同之处。

NanoEdgeAI是一款端到端工具,允许对数据进行一些预处理,并进行训练和算法选择,而STM32Cube.AI 则需要工程师具备一定的AI建模经验,因为STM32Cube.AI 暂不支持模型训练。

硬件和软件准备

用于驱动风扇的P-NUCLEO-IHM03电机控制套件包括一块NUCLEO-G431RB主板、一块电机控制扩展板,以及一台无刷电机

在软件准备方面,您需要配置anaconda环境,并安装sklearn、pandas、ONNX等必要的库。

让我们回顾一下创建AI项目的一些关键步骤,然后据此逐步演示如何基于STM32Cube.AI 从零开始创建AI项目。

在步骤1中,用户需要收集用于机器学习模型创建的数据。该数据集的一部分(训练数据集)将用于训练模型,另一部分(测试数据集)稍后将用于评估所构建模型的性能。机器学习的数据集中的典型比率为:训练数据集占80%,测试数据集占20%。我们此次试验用的数据集与之前NanoedgeAI训练模型使用的数据是一样的。

在步骤2中,用户需要对数据进行标记;基本上,我们需要告诉机器收集的数据属于哪一类(例如“跑步”、“散步”、“静止”……) 分类指的是根据您认为重要的属性对数据进行分组:这种属性在机器学习领域被称为“类”。

接下来,在步骤3中,用户使用预先准备的数据集训练机器学习模型。该任务也称为“拟合”。训练结果的准确性在很大程度上取决于用于训练的数据的内容和数量。

在步骤4中,用户将训练过的机器学习模型嵌入到系统中。对于在计算机上执行的机器学习,用户可以利用Python库直接执行模型。对于在MCU等器件上运行的机器学习,用户可以在执行之前将该库转换为C代码。

最后在步骤5中,用户验证机器学习模型。如果验证结果与预期的结果不匹配,则用户必须确定上述步骤中需要改进的部分,以及如何改进。比如增加数据,更改模型,调整模型超参数等。

至此,我们已经帮大家重新梳理了一次AI项目的建模过程。接下来我们将按照这样的过程完成我们今天的实验。

首先,导入一些必要的库

304a7cc8-0f1f-11ed-ba43-dac502259ad0.png

为了便于对比,我们使用了之前NanoEdgeAI训练模型中使用的数据集。我们使用pandas从csv文件读取数据,然后用于模型训练。

在训练之前,让我们先来了解一下该数据集。让我们打印出数据集的维度。

305fe658-0f1f-11ed-ba43-dac502259ad0.png

可以看到,该数据集一共有119条数据和128个特征,最后一列实际上是我们的数据标签

接下来,我们将数据集分为训练集和测试集,训练集用于训练模型,测试集用于检验模型的泛化能力。我们将80%的数据用于训练,20%的数据用于测试

30738e6a-0f1f-11ed-ba43-dac502259ad0.png

一旦数据集准备就绪,我们就可以开始训练模型。

30810e1e-0f1f-11ed-ba43-dac502259ad0.png

训练完成后,我们可以在测试集上验证模型的性能。我们发现,该模型在测试集上可以达到约83%的准确率。

30931334-0f1f-11ed-ba43-dac502259ad0.png

最后,我们保存经过训练的模型,将得到一个ONNX格式的文件random_forest.onnx

30abcf5a-0f1f-11ed-ba43-dac502259ad0.png

我们使用netron查看模型的结构如下

30bd1fb2-0f1f-11ed-ba43-dac502259ad0.png

STM32Cube集成使得STM32Cube.AI 用户能够有效地在广泛的STM32微控制器系列产品之间移植模型,并且(在相似型号适用于不同产品的情况下)在STM32产品之间轻松迁移。

该插件扩展了STM32CubeMX功能,可自动转换训练好的AI模型,生成的优化库集成到用户项目中,而不是人工构建代码,并支持将深度学习解决方案嵌入到广泛的STM32微控制器产品组合中,从而为每个产品添加新的智能化功能。

STM32Cube.AI 原生支持各种深度学习框架,如Keras、TensorFlow Lite、ConvNetJs,并支持可导出为ONNX标准格式的所有框架,如PyTorch、Microsoft Cognitive Toolkit、MATLAB等。

此外,STM32Cube.AI 支持来自广泛ML开源库Scikit-Learn的标准机器学习算法,如随机森林、支持向量机(SVM)、K-Means。

30d25724-0f1f-11ed-ba43-dac502259ad0.png

现在,我们准备将模型部署到MCU。我们使用STM32Cube.AI 的命令行模式将模型转换为经过优化的C代码。我们运用以下命令执行模型转换。

stm32ai generate -m random_forest.onnx

如果转换成功,我们将看到以下消息。

30f52556-0f1f-11ed-ba43-dac502259ad0.png

在stm32ai_output文件夹中,我们将看到有以下文件生成。其中,network.c/.h包含关于模型拓扑的一些信息,而network_data.c/.h则记录了关于模型权重的一些信息。

310a0c78-0f1f-11ed-ba43-dac502259ad0.png

此时,我们准备好将生成的模型集成到stm32项目中。在CLI模式下,我们需要手动添加STM32Cube.AI 的运行环境到项目,所以我们可以调用network.h中的函数来运行模型。

当然,STM32Cube.AI 提供一种更简便的方式来集成AI模型。假设您的项目从一个ioc文件开始,我们可以将AI模型添加到cubeMX的代码生成阶段,然后一起生成代码。

311b84ee-0f1f-11ed-ba43-dac502259ad0.png

启用cubeMX中的AI功能如下,选择对应的STM32Cube.AI 的版本。

31449866-0f1f-11ed-ba43-dac502259ad0.png

我们可借此将AI模型集成到项目中。

就这样,在我们生成代码后,AI模型转化为优化的C代码,然后与STM32Cube.AI 运行环境的对应版本一起集成到项目中。

31555d18-0f1f-11ed-ba43-dac502259ad0.png

这样,我们就可以调用network.h中的函数将模型运行起来。

最终,我们通过这种方式顺利地将模型集成到了项目中。通过比较这两种不同的方法,我们可以发现STM32Cube.AI 和NanoEdgeAI之间的差异。NanoEdgeAI更简单、高效,而STM32Cube.AI 则更加灵活且可定制。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355700
  • AI
    AI
    +关注

    关注

    87

    文章

    30725

    浏览量

    268869
  • 机器学习
    +关注

    关注

    66

    文章

    8406

    浏览量

    132552

原文标题:AI技术专题之十三:用STM32Cube.AI 部署ONNX 模型实操示例:风扇堵塞检测

文章出处:【微信号:STMChina,微信公众号:意法半导体中国】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在STM32f4系列开发板上部署STM32Cube.AI

    已下载STM32Cube.AI扩展包,但是无法使用,感觉像是没有部署AI模型,我是想要通过摄像头拍照,上传图像后,经过开发板处理器进行AI模型处理识别过后,告诉我识别结果,显示在TFLCD屏幕上
    发表于 11-18 09:39

    STM32CubeMX在F7子板上从零开始创建TouchGFX UI项目

    -software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html从零开始创建TouchGFX UI
    发表于 03-23 16:30

    Cube ai简介

    )。stm32cube.ai是广泛使用的stm32cubemx配置和代码生成工具的扩展包,支持基于stm32 arm cortex -m的微控制器上的ai。要访问它,请下载并安装
    发表于 08-03 06:38

    如何使用stm32cube.ai部署神经网络?

    如何用stm32cube.ai简化人工神经网络映射?如何使用stm32cube.ai部署神经网络?
    发表于 10-11 08:05

    STM32Cube.AI工具包使用初探

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

    X-CUBE-AI STM32Cube扩展包精选资料推荐

    【X-CUBE-AI】是一个STM32Cube扩展包,它是STM32Cube.AI生态系统的一部分。它扩展了STM32CubeMX的功能,自动转换预训练的人工智能算法,包括神经网络和经
    发表于 11-29 07:43

    请问STM32WL可以与STM32Cube.AI一起使用吗?

    新手问题 - 我可以将 AISTM32WL SoC 一起使用吗?我想训练一个模型,然后用STM32Cube.AI放到STM32WLE5CC上。这样我就可以在终端设备上使用
    发表于 12-07 07:45

    ST MCU边缘AI开发者云 - STM32Cube.AI

    STM32微控制器生成优化的C代码,无需事先安装软件。数据科学家和开发人员受益于STM32Cube.AI久经考验的神经网络优化性能,以开发边缘AI项目。• 访问
    发表于 02-02 09:52

    STM32Cube.AI库的高级特性

    STM32Cube.AI是意法半导体AI生态系统的一部分,是STM32Cube的一个扩展包,它可以自动转换和优化预先训练的神经网络模型并将生成的优化库集成到用户项目中,从而扩展了
    的头像 发表于 11-16 16:59 3100次阅读
    <b class='flag-5'>STM32Cube.AI</b>库的高级特性

    小白初学者从零开始创建stm32工程(包括带着的FreeRTOS实时操作系统快速入门)

    小白初学者从零开始创建stm32工程(包括带着的FreeRTOS实时操作系统快速入门)
    发表于 12-05 18:21 20次下载
    小白初学者<b class='flag-5'>从零开始创建</b><b class='flag-5'>stm32</b>工程(包括带着的FreeRTOS实时操作系统快速入门)

    STM32Cube.AI将神经网络转换为STM32的优化代码

      STM32Cube.AI 工具箱的美妙之处在于它使开发人员能够立即开始使用神经网络,即使他们不是数据挖掘和拓扑方面的专家。
    的头像 发表于 05-16 10:24 1847次阅读

    意法半导体发布STM32Cube.AI开发工具

    意法半导体(ST)发布了STM32Cube.AI version 7.2.0,这是微控制器厂商推出的首款支持超高效深度量化神经网络的人工智能(AI)开发工具。
    的头像 发表于 08-09 17:56 1370次阅读

    STM32Cube.AI v7.3能够在推理时间和RAM之间找到完美的平衡

    STM32Cube.AI 7.3 启动了一个新系统,使开发人员能够选择是优先考虑 RAM、性能还是两者之间的平衡方法。因此,它建立在先前版本 STM32Cube.AI 7.2的工作基础上,该版本引入了扩展层和深度量化神经网络,并允许用户根据其约束对其进行微调算法。
    的头像 发表于 02-02 10:09 971次阅读

    STM32Cube.AI部署ONNX模型实操示例:风扇堵塞检测

    STM32Cube.AI 部署ONNX 模型实操示例:风扇堵塞检测
    的头像 发表于 09-28 16:25 2409次阅读
    用<b class='flag-5'>STM32Cube.AI</b>部署ONNX模型实操示例:风扇堵塞检测

    如何在OpenMV生态系统中集成STM32Cube.AI生成的代码

    电子发烧友网站提供《如何在OpenMV生态系统中集成STM32Cube.AI生成的代码.pdf》资料免费下载
    发表于 09-20 09:55 0次下载
    如何在OpenMV生态系统中集成<b class='flag-5'>STM32Cube.AI</b>生成的代码