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

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

3天内不再提示

为什么可以在STM32上面跑神经网络

TopSemic嵌入式 来源:果果小师弟 作者:智果芯 2022-04-12 17:33 次阅读

摘要为什么可以在STM32上面跑神经网络?简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化,以支持在嵌入式设备上使用,目前使用X-Cube-AI需要在STM32CubeMX版本5.0以上,支持转化的模型有Keras、TFlite、ONNX、Lasagne、Caffe、ConvNetJS。Cube-AI把模型转化为一堆数组,而后将这些数组内容解析成模型,和Tensorflow里的模型转数组后使用原理是一样的。

一、环境安装和配置

  1. STM32CubeMX
  2. MDK/IAR/STM32CubeIDE
  3. F4/H7/MP157开发板

二、AI神经网络模型搭建

这里使用官方提供的模型进行测试,用keras框架训练:

为什么可以在STM32上面跑神经网络
https://github.com/Shahnawax/HAR-CNN-Keras

模型介绍

在Keras中使用CNN进行人类活动识别:此存储库包含小型项目的代码。该项目的目的是创建一个简单的基于卷积神经网络(CNN)的人类活动识别(HAR)系统。该系统使用来自3D加速度计的传感器数据,并识别用户的活动,例如:前进或后退。HAR意为Human Activity Recognition(HAR)system,即人类行为识别。这个模型是根据人一段时间内的3D加速度数据,来判断人当前的行为,比如走路,跑步,上楼,下楼等,很符合Cortex-M系列MCU的应用场景。使用的数据如下图所示。

为什么可以在STM32上面跑神经网络

HAR用到的原始数据

存储库包含以下文件

  1. HAR.py,Python脚本文件,包含基于CNN的人类活动识别(HAR)模型的Keras实现,
  2. actitracker_raw.txt、包含此实验中使用的数据集的文本文件,
  3. model.h5,一个预训练模型,根据训练数据进行训练,
  4. evaluate_model.py、Python 脚本文件,其中包含评估脚本。此脚本在提供的 testData 上评估预训练 netowrk 的性能,
  5. testData.npy,Python 数据文件,包含用于评估可用预训练模型的测试数据,
  6. groundTruth.npy,Python 数据文件,包含测试数据的相应输出的地面真值和
  7. README.md.

这么多文件不要慌,模型训练后得到model.h5模型,才是我们需要的。

三、新建工程

1.这里默认大家都已经安装好了STM32CubeMX软件。

在STM32上验证神经网络模型(HAR人体活动识别),一般需要STM32F3/F4/L4/F7/L7系列高性能单片机,运行网络模型一般需要3MB以上的闪存空间,一般的单片机不支持这么大的空间,CUBEMX提供了一个压缩率的选项,可以选择合适的压缩率,实际是压缩神经网络模型的权重系数,使得网络模型可以在单片机上运行,压缩率为8,使得模型缩小到366KB,验证可以通过;

为什么可以在STM32上面跑神经网络

然后按照下面的步骤安装好CUBE.AI的扩展包

为什么可以在STM32上面跑神经网络

这个我安装了三个,安装最新版本的一个版本就可以。

为什么可以在STM32上面跑神经网络

接下来就是熟悉的新建工程了

为什么可以在STM32上面跑神经网络

因为安装了AI的包,所以在这个界面会出现artificial intelligence这个选项,点击Enable可以查看哪一些芯片支持AI

为什么可以在STM32上面跑神经网络

接下来就是配置下载接口和外部晶振了。

为什么可以在STM32上面跑神经网络
为什么可以在STM32上面跑神经网络

然后记得要选择一个串口作为调试信息打印输出。

为什么可以在STM32上面跑神经网络

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

为什么可以在STM32上面跑神经网络
为什么可以在STM32上面跑神经网络
  • System Performance工程:整个应用程序项目运行在STM32MCU上,可以准确测量NN推理结果,CP∪U负载和内存使用情况。使用串行终端监控结果(e.g.Tera Term)
  • Validation工程:完整的应用程序,在桌面PC和基于STM32 Arm Cortex-m的MCU嵌入式环境中,通过随机或用户测试数据,递增地验证NN返回的结果。与 X-CUBE-A验证工具一起使用。
  • Application Template工程:允许构建应用程序的空模板项目,包括多网络支持。

之后左边栏中的Software Packs点开,选择其中的X-CUBE-AI,弹出的Mode窗口中两个复选框都打勾,Configuration窗口中,点开network选项卡。

为什么可以在STM32上面跑神经网络

选择刚刚配置的串口作为调试用。

为什么可以在STM32上面跑神经网络

点击add network,选择上述下载好的model点h5模型,选择压缩倍数8;

为什么可以在STM32上面跑神经网络

点击分析,可从中看到模型压缩前后的参数对比

为什么可以在STM32上面跑神经网络

点击validation on desktop 在PC上进行模型验证,包括原模型与转换后模型的对比,下方也会显示验证的结果。

为什么可以在STM32上面跑神经网络

至此,模型验证完成,下面开始模型部署

四、模型转换与部署

时钟配置,系统会自动进行时钟配置。按照你单片机的实际选型配置时钟就可以了。

为什么可以在STM32上面跑神经网络
为什么可以在STM32上面跑神经网络
为什么可以在STM32上面跑神经网络

最后点击GENERATE CODE生成工程。

为什么可以在STM32上面跑神经网络

然后在MDK中编译链接。

为什么可以在STM32上面跑神经网络

选择好下载器后就可以下载代码了。

为什么可以在STM32上面跑神经网络
为什么可以在STM32上面跑神经网络

然后打开串口调试助手就可以看到一系列的打印信息了。

为什么可以在STM32上面跑神经网络

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

为什么可以在STM32上面跑神经网络
为什么可以在STM32上面跑神经网络

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

原文标题:我在STM32单片机上跑神经网络算法

文章出处:【微信公众号:TopSemic嵌入式】欢迎添加关注!文章转载请注明出处。

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

    关注

    42

    文章

    4562

    浏览量

    98645
  • STM32
    +关注

    关注

    2239

    文章

    10665

    浏览量

    348513
  • 模型
    +关注

    关注

    1

    文章

    2701

    浏览量

    47656

原文标题:我在STM32单片机上跑神经网络算法

文章出处:【微信号:TopSemic,微信公众号:TopSemic嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    神经网络教程(李亚非)

      第1章 概述  1.1 人工神经网络研究与发展  1.2 生物神经元  1.3 人工神经网络的构成  第2章人工神经网络基本模型  2.1 MP模型  2.2 感知器模型  2.3
    发表于 03-20 11:32

    【PYNQ-Z2试用体验】神经网络基础知识

    神经网络的计算。对于多层多节点的神经网络,我们可以使用矩阵乘法来表示。在上面神经网络中,我们将权重作为一个矩阵,将第一层的输入作为另一个矩
    发表于 03-03 22:10

    卷积神经网络如何使用

    卷积神经网络(CNN)究竟是什么,鉴于神经网络工程上经历了曲折的历史,您为什么还会在意它呢? 对于这些非常中肯的问题,我们似乎可以给出相对简明的答案。
    发表于 07-17 07:21

    【案例分享】基于BP算法的前馈神经网络

    期望的输出。BP神经网络算法推导(更新权重和偏倚):从上面推导可以发现:对于任意从神经元i(输出神经元/隐层
    发表于 07-21 04:00

    【案例分享】ART神经网络与SOM神经网络

    是一种常用的无监督学习策略,使用改策略时,网络的输出神经元相互竞争,每一时刻只有一个竞争获胜的神经元激活。ART神经网络由比较层、识别层、
    发表于 07-21 04:30

    如何设计BP神经网络图像压缩算法?

    神经网络(Neural Networks)是人工神经网络(Ar-tificial Neural Networks)的简称,是当前的研究热点之一。人脑接受视觉感官传来的大量图像信息后,能迅速做出反应
    发表于 08-08 06:11

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入层:根据现有数据获取输入的层隐藏层:使用反向传播优化输入变量权重的层,以提高模型的预测
    发表于 07-12 08:02

    STM32上验证神经网络模型

    STM32CubeMx.AI的使用欢迎使用Markdown编辑器STM32论坛中看到这样一个视频:视频中,
    发表于 08-03 06:59

    基于BP神经网络的PID控制

    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控
    发表于 09-07 07:43

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

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

    卷积神经网络一维卷积的处理过程

    inference设备端上做。嵌入式设备的特点是算力不强、memory小。可以通过对神经网络做量化来降load和省memory,但有时可能memory还吃紧,就需要对神经网络
    发表于 12-23 06:16

    xr806板子上如何实现用ncnn神经网络mnis呢

    xr806板子上如何实现用ncnn神经网络mnis呢?
    发表于 12-28 06:51

    神经网络移植到STM32的方法

    神经网络移植到STM32最近在做的一个项目需要用到网络进行拟合,并且将拟合得到的结果用作控制,就在想能不能直接在单片机上做神经网络计算,这样就可以
    发表于 01-11 06:20

    卷积神经网络模型发展及应用

    十余年来快速发展的崭新领域,越来越受到研究者的关注。卷积神经网络(CNN)模型是深度学习模型中最重要的一种经典结构,其性能在近年来深度学习任务上逐步提高。由于可以自动学习样本数据的特征表示,卷积
    发表于 08-02 10:39

    为什么可以STM32上面神经网络

    在Keras中使用CNN进行人类活动识别:此存储库包含小型项目的代码。该项目的目的是创建一个简单的基于卷积神经网络(CNN)的人类活动识别(HAR)系统。
    发表于 12-26 15:41 696次阅读