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

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

3天内不再提示

在STM32单片机上跑神经网络算法

h1654155149.6853 来源:电子工程世界 作者:电子工程世界 2022-04-13 15:05 次阅读

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

一、环境安装和配置

STM32CubeMX

MDK/IAR/STM32CubeIDE

F4/H7/MP157开发板

二、AI神经网络模型搭建

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

3786555a-ba5d-11ec-aa7f-dac502259ad0.png

https://github.com/Shahnawax/HAR-CNN-Keras

模型介绍

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

3796b0e4-ba5d-11ec-aa7f-dac502259ad0.png

HAR用到的原始数据

存储库包含以下文件

HAR.py,Python脚本文件,包含基于CNN的人类活动识别(HAR)模型的Keras实现,

actitracker_raw.txt、包含此实验中使用的数据集的文本文件,

model.h5,一个预训练模型,根据训练数据进行训练,

evaluate_model.py、Python 脚本文件,其中包含评估脚本。此脚本在提供的 testData 上评估预训练 netowrk 的性能,

testData.npy,Python 数据文件,包含用于评估可用预训练模型的测试数据,

groundTruth.npy,Python 数据文件,包含测试数据的相应输出的地面真值和

README.md.

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

三、新建工程

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

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

37a5566c-ba5d-11ec-aa7f-dac502259ad0.png

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

37b6684e-ba5d-11ec-aa7f-dac502259ad0.png

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

37cac5dc-ba5d-11ec-aa7f-dac502259ad0.png

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

37db3354-ba5d-11ec-aa7f-dac502259ad0.png

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

37ece630-ba5d-11ec-aa7f-dac502259ad0.png

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

37fc7c44-ba5d-11ec-aa7f-dac502259ad0.png

380f56f2-ba5d-11ec-aa7f-dac502259ad0.png

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

381edbcc-ba5d-11ec-aa7f-dac502259ad0.png

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

38389256-ba5d-11ec-aa7f-dac502259ad0.png

384c0c46-ba5d-11ec-aa7f-dac502259ad0.png

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选项卡。

3868bdbe-ba5d-11ec-aa7f-dac502259ad0.png

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

387bc224-ba5d-11ec-aa7f-dac502259ad0.png

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

388eef34-ba5d-11ec-aa7f-dac502259ad0.png

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

389e3c3c-ba5d-11ec-aa7f-dac502259ad0.png

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

38adbee6-ba5d-11ec-aa7f-dac502259ad0.png

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

四、模型转换与部署

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

38bd06b2-ba5d-11ec-aa7f-dac502259ad0.png

38cbecc2-ba5d-11ec-aa7f-dac502259ad0.png

38db5e78-ba5d-11ec-aa7f-dac502259ad0.png

最后点击GENERATE CODE生成工程。

38ec1a9c-ba5d-11ec-aa7f-dac502259ad0.png

然后在MDK中编译链接。

38f910f8-ba5d-11ec-aa7f-dac502259ad0.png

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

3907dc46-ba5d-11ec-aa7f-dac502259ad0.png

3918eed2-ba5d-11ec-aa7f-dac502259ad0.png

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

3927738a-ba5d-11ec-aa7f-dac502259ad0.png

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

39344916-ba5d-11ec-aa7f-dac502259ad0.png

3948bd2e-ba5d-11ec-aa7f-dac502259ad0.png

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

审核编辑 :李倩

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

    关注

    42

    文章

    4654

    浏览量

    99487
  • 加速度计
    +关注

    关注

    6

    文章

    681

    浏览量

    45562
  • STM32单片机
    +关注

    关注

    58

    文章

    547

    浏览量

    58241

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

文章出处:【微信号:电子工程世界,微信公众号:电子工程世界】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    神经网络教程(李亚非)

    网络BP算法的程序设计  多层前向网络BP算法源程序  第4章 Hopfield网络模型  4.1 离散型Hopfield
    发表于 03-20 11:32

    遗传算法 神经网络 解析

    关于遗传算法神经网络
    发表于 05-19 10:22

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

    传播的,不会回流),区别于循环神经网络RNN。BP算法(Back Propagation):误差反向传播算法,用于更新网络中的权重。BP神经网络
    发表于 07-21 04:00

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

    ,并能在脑海中重现这些图像信息,这不仅与人脑的海量信息存储能力有关,还与人脑的信息处理能力,包括数据压缩能力有关。各种神经网络中,多层前馈神经网络具有很强的信息处理能力,由于其采用BP算法
    发表于 08-08 06:11

    神经网络和反向传播算法

    03_深度学习入门_神经网络和反向传播算法
    发表于 09-12 07:08

    反馈神经网络算法是什么

    反馈神经网络算法
    发表于 04-28 08:36

    MATLAB训练好的神经网络移植到STM32F407上

    MATLAB中进行了神经网络模型训练,然后将训练好的模型的阈值和权值导出来,移植到STM32F407单片机上进行计算,但是
    发表于 06-16 11:14

    STM32上验证神经网络模型

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

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

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

    神经网络移植到STM32的方法

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

    如何用神经网络进行语音降噪

    本文是基于NNoM神经网络框架实现的。NNoM是一个为单片机定制的神经网络框架,可以实现TensorFlow 模型的量化和部署到单片机上,可以
    的头像 发表于 04-11 10:38 4380次阅读

    什么是神经网络?什么是卷积神经网络

    介绍卷积神经网络之前,我们先回顾一下神经网络的基本知识。就目前而言,神经网络是深度学习算法的核心,我们所熟知的很多深度学习
    的头像 发表于 02-23 09:14 2878次阅读

    【技术分享】STM32实现单麦克风实时神经网络降噪

    本文是基于NNoM神经网络框架实现的。NNoM是一个为单片机定制的神经网络框架,可以实现TensorFlow模型的量化和部署到单片机上,可以
    的头像 发表于 04-11 10:33 3987次阅读
    【技术分享】<b class='flag-5'>STM32</b>实现单麦克风实时<b class='flag-5'>神经网络</b>降噪

    卷积神经网络的介绍 什么是卷积神经网络算法

    卷积神经网络的介绍 什么是卷积神经网络算法 卷积神经网络涉及的关键技术 卷积神经网络(Convolutional Neural Networ
    的头像 发表于 08-21 16:49 1581次阅读

    卷积神经网络算法是机器算法

    卷积神经网络算法是机器算法吗  卷积神经网络算法是机器算法的一种,它通常被用于图像、语音、文本等
    的头像 发表于 08-21 16:49 633次阅读