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

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

3天内不再提示

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

jf_pJlTbmA9 来源:意法半导体中国 作者:意法半导体中国 2023-09-28 16:25 次阅读

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

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

wKgaomUD4QiARbDKAA1hq2RwhTw955.png

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

硬件和软件准备

wKgZomUD4QmAF96rAAWBdn3ZAeE960.png

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

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

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

wKgaomUD4QqAL9M3AAFnQx_GzUs626.png

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

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

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

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

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

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

首先,导入一些必要的库

wKgZomUD4QyAfPRyAAAnRseUUxk476.png

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

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

wKgaomUD4Q2AGdzEAAAQyMeVJTI030.png

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

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

wKgZomUD4Q6ABKjvAAAR-ZcH9P0359.png

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

wKgaomUD4Q-ALBHPAAARKZ0n_Wc971.png

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

wKgZomUD4RGAXC1cAAAMzxFr-Kk233.png

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

wKgaomUD4ROARq8xAAAYSkkxvYs429.png

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

wKgZomUD4RSAF0qBAAA0vTTdQrw667.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。

wKgZomUD4RWAUTbyAAKDyt4R8E4214.png

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

stm32ai generate -m random_forest.onnx

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

wKgaomUD4RaAR-RBAABNx5WTB4Q483.png

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

wKgZomUD4RiAdg8-AAAPUJULdFM116.png

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

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

wKgaomUD4RmACYQVAAIMBxx7CzY878.png

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

wKgaomUD4RqAScIUAAJA_ooDWGA081.png

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

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

wKgZomUD4R2AIBh1AAIc_GoEEtk597.png

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

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

来源:意法半导体中国

审核编辑:汤梓红

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

    关注

    142

    文章

    9014

    浏览量

    145438
  • AI
    AI
    +关注

    关注

    87

    文章

    30830

    浏览量

    268995
  • 模型
    +关注

    关注

    1

    文章

    3238

    浏览量

    48824
收藏 人收藏

    评论

    相关推荐

    意法半导体STM32Cube.AI生态系统加强对高效机器学习的支持

    意法半导体STM32Cube.AI开发环境为用户提供各种机器学习技术,为他们尽可能高效地解决分类、聚类和新颖性检测三种算法挑战提供更多灵活性。
    发表于 08-24 09:10 1020次阅读
    意法半导体<b class='flag-5'>STM32Cube.AI</b>生态系统加强对高效机器学习的支持

    使用cube-AI分析模型时报错的原因有哪些?

    使用cube-AI分析模型时报错,该模型是pytorch的cnn转化成onnx ``` Neural Network Tools for STM
    发表于 03-14 07:09

    STM CUBE AI错误导入onnx模型报错的原因?

    使用cube-AI分析模型时报错,该模型是pytorch的cnn转化成onnx ``` Neural Network Tools for STM
    发表于 05-27 07:15

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

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

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

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

    轻松实现一键部署AI模型至RT-Thread系统

    AI 模型部署到 RT-Thread 系统中:示例DEMO本教程 RT-AK 适配目标平台:STM32以下项目为 RT-AK 的
    发表于 09-02 15:06

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

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

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

    新手问题 - 我可以将 AISTM32WL SoC 一起使用吗?我想训练一个模型,然后用STM32Cube.AI放到STM32WLE5
    发表于 12-07 07:45

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

    我们的 STM32Cube.AI 生态系统携手合作。这款新工具可以通过云在STM32硬件上远程对模型进行基准测试,从而节省工作量和成本。为了满足对基于AI的边缘系统日益增长的需求,
    发表于 02-02 09:52

    STM32Cube.AI库的高级特性

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

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

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

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

    NanoEdgeAI是一款端到端工具,允许对数据进行一些预处理,并进行训练和算法选择,而STM32Cube.AI 则需要工程师具备一定的AI建模经验,因为STM32Cube.AI 暂不支持模型
    的头像 发表于 07-30 09:31 3864次阅读

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

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

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

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

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

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