小白-使用NUCLEO-L4R5ZI和STM32CubeIDE部署模型经验分享

背景及基本信息

背景

毕设需要在单片机上部署轻量化的深度学习模型,在查看了一篇文章采用STM32L4R5部署Unet模型后,尝试自己摸索部署的流程。

在某宝搜寻STM32L4R5关键字后,有如下的商品符合。

不开票价格为150元。

基本信息

在STM32官网确认一下板子的信息,STM32L4R5ZI,Flash为2M,Ram为640k。

别的信息如下:

环境搭建

看了网上的教程,基本上可以总结为如下两类:

1.STM32CubeMX与KEIL搭配

STM32CubeMX

这个软件是用来生成STM32单片机项目文件的,里面可以选择各种插件包,编辑时钟等操作。

下载地址:

https://www.st.com/en/development-tools/stm32cubemx.html

下载完成后注意下载板子对应的包,或者在选择板子后应该会自动下载。

KEIL

用来打开STM32CubeMX创建的工程文件的IDE,可以编辑编译脚本文件。并编译写入板子中。

下载地址:Keil Product Downloads

根据网上的经验,常用这个产品,别的暂时还没有时间去摸索。

安装一路点即可,没啥需要注意的。

安装后打开界面下载相关的包即可使用,本人用的是STM32CubeIDE进行,感兴趣的可以去搜一下比较老的经验分享,基本都是使用KEIL编译写入的。

2.STM32CubeIDE

这个软件结合了项目的代码生成,烧录一条龙,综合体验来说比较好。推荐使用这个。

下载地址:

https://www.st.com/en/development-tools/stm32cubeide.html

本文使用的版本为1.15.1

下载完成后直接安装,没啥需要特别注意的。不过我为了方便管理和查找,我设置安装目录为D盘,目录结构如下:

模型介绍

根据网上的教程,用的较多的是这个HAR-CNN-Keras。

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

数据结构如下:
从左到右依次是实验者的编号(33)。活动类型(Jogging,慢跑)。时间戳,单位为ns。4-6列分别为加速器传感器x,y,z轴测量值。

活动类型共6种,Downstairs, Upstairs, Jogging, Sitting, Standing, Walking.

模型输入:6个为一组的数据

模型输出:一个形状为 (num_samples, num_classes) 的数组,其中 num_samples 是输入样本的数量,num_classes 是活动类别的数量。 每一行表示一个样本的预测结果,包含各个类别的概率值。 使用 softmax 激活函数,输出的每个值表示该样本属于某个类别的概率。

  

创建工程文件

打开STM32CubeIDE软件,点File→New→STM32 Project

可能遇到这个问题,暂时没找到解决方案,但是不影响后续使用。

在MCU/MPU Selector中找到开发板

或者在Board Selector中搜索

选中开发板,点Next,项目命名,点Finish。

弹出如下界面,点Yes即可。

出现如下项目结构,主要用到的就是这个ioc文件

进入ioc文件后,第一件事是,找到X-Cube-AI。

两个版本的X-CUBE-AI

For 9.0.0

第一次接触STM32CubeIDE比较晚,X-CUBE-AI包版本为9.0.0。

勾选如下:

点OK。

勾选X-CUBE-AI后,这两项默认开启。

在Platform Settings中设置引脚,

然后要添加网络,导入下载的模型。这里我选择了Compression为High。

点Analyze分析模型,可能会出现一个错误,

 [AI:network]  LOAD ERROR: [Errno 13] Permission denied: 'C:\\Users\\\udcba\udcce\\.stm32cubemx\\network_output\\network_analyze_report.txt'

这是由于报告文件路径有中文,需要更改路径。

点Show graph上面的齿轮,修改路径,不能有中文。

为了方便管理,我放在了和IDE同一个文件夹下。

查看压缩情况,这里有个很重要的问题要说明。

参数不匹配的问题,在分析模型时,注意看有没有,此处选的压缩为High,从压缩结果来看,压缩的效果很好。

但实际上后续会有问题,参数不匹配的情况下,虽然能进行Validate on desktop,也能正常验证。

我们先往下走,点时钟配置,点这个转弯的箭头,自动配置时钟。

在Project Manager中设置如下

然后在上方快捷栏中找到带把的齿轮,进行代码生成。

右击Project Explorer中项目的最高级文件,Build Project

然后在Console窗口看看有没有errors。

这里可能会有Warnings。可以不管,想管的话参考下面这篇:

https://github.com/candle-usb/candleLight_fw/issues/164

然后进行烧录,点这个类似播放键的。

这里我是用的是NUCLEO-L4R5ZI,使用MicroUSB与板子连接即可烧录。

烧录完成如下:

回到刚才想提到的那个问题,编译烧录到Validate on target时会报错,

开始我在最后这个Error这里苦寻很久,检查和别人的日志发现了问题,就是这个参数量不匹配,无法在目标上验证。

这里我调整了压缩等级,

经过试验,Low Medium High三种压缩下,没有超过Complexity的阈值,但是都出现了参数不匹配的情况。

在None和Lossless的情况下,没有报出参数量不匹配。但是闪存爆了。

可能是X-CUBE-AI本身的问题,希望有知道如何解决的兄弟分享一下心得。

For 7.0.0

回去看了一下老的教程,普遍在用7.x.x的,不过这个老的X-CUBE-AI支持的Keras版本有限,不能大于2.5.0。

重复上面的步骤,不过选择版本为7.0.0

这里使用后就发现不同,9.0.0的压缩选项是形容词,这里7.0.0给的是具体的倍数,

这里我选择8倍,看看效果。

没有提示参数量不匹配,实际压缩倍率为7.88。

生成代码后编译,17个错误,现在正在解决这个问题。

后话

由于毕设需求,7.0.0版本遇到的问题得暂时放一放,先用9.0.0的往下进行,目的是通过将测试jpg图片传入单片机进行模型预测,将语义分割结果返回到电脑上,看看压缩后的预测效果和在桌面端未压缩的区别,后续做出来后会及时更新分享。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值