python+keras搭建的模型部署至嵌入式端PSoc6

前面已经写了文章描述如何搭建简单的水果分类模型,本文将介绍如何将搭建的模型部署至嵌入式端,本文利用ML Configurator提供的配置程序ML Configurator来导入预先训练好的机器学习模型,而它的目前版本仅支持Keras-H5。所以前文是采用Keras搭建神经网路。

1.相关介绍

1.1 ML Configurator

本文使用的嵌入式端软件为ModusToolbox,下图1显示了ModusToolbox软件可用内容的高级视图。

图1 ModusToolbox视图

其中包含有ML Configurator工具。训练好的模型最终就是通过ML Configurator工具去进行部署和验证的。用于嵌入式机器学习的开发工具ML Configurator包括以下组件:

(1)ML Configurator配置工具:一个GUI工具,可以加载预先训练好的模型和选择测试数据。使用验证数据集进行模型的性能评估时,能够以数据或者图形的方式可视化报告测试数据;

(2)ML Configurator核心工具:用于执行Python脚本进行神经网络的解析、训练、回归和转换;

(3)ML Configurator库:包括中间件助手函数、一个神经网络模型和输入数据赖以工作的模型库;

(4)ML Configurator代码示例:提供使用ML库的应用程序参考。

各组件关系如下图2所示。

图2 ML Configurator组件关系

ML Configurator的特点有:

(1)⽀持 TFLite 和 H5 模型格式

(2)⽀持两种类型的推理引擎:

⽤于微控制器 (TFLM) 的 TensorFlow Lite 推理引擎

Infineon 推理引擎

(3)⽀持神经⽹络的以下特性:

核⼼神经⽹络内核:MLP、GRU、Conv1d、Conv2d、 LSTM

⽀持 NN 内核:展平、dropout、重塑、输⼊层

激活:relu、softmax、sigmoid、线性、tanh

(4)输⼊数据量化级别:

32 位浮点数

16/8 位整数

(5)NN 权重量化级别:

32 位浮点

16/8 位整数

(6)回归数据评估

(7)周期和内存估计

(8)基于 PC 的推理引擎

(9)基于⽬标设备的推理引擎(优化)

使用开发的一个整体流程如下图3所示。

图3 ML开发流程图

先选择合适的示例,然后导入训练好的Keras-HDF5格式模型以及测试数据,再生成嵌入式模型进行验证。

​​​​​​​1.2 PSoc6

本文嵌入式端验证所使用的开发板为CY8CPROTO-062-4343W PSoC 6 Wi-Fi BT,它是一款低成本硬件平台,可用于设计和调试 PSoC™™ 6 MCU。它配备了基于 CYW5W 组合器件的 Murata LBEE1KL4343DX 模块、业界领先的用于触摸按钮和滑块的 CAPSENSE™、带 KitProg3 的板载调试器/编程器、microSD 卡接口、512 Mb 四通道 SPI NOR 闪存、PDM-PCM 麦克风和热敏电阻。该套件采用快速外形设计,允许用户将该套件附带的不同组件和功能分开并独立使用。此外,该套件还支持 Digilent 的 Pmod 接口。示意图如下图4。

图4 PSoC6示意图

它的特点有:

(1)支持高达 2MB 闪存和 1MB SRAM

(2)专用 SDHC,用于与 WICED 无线设备连接。

(3)提供双核,其中 150MHz Arm Cortex-M4 作为主应用处理器,100MHz Arm®® Cortex-M0®®+ 作为辅助处理器,可实现低功耗运行。

(4)支持全速 USB、带 CAPSENSE 的电容感应、PDM-PCM 数字麦克风接口、Quad-SPI 接口、13 个串行通信模块、7 个可编程模拟模块和 56 个可编程数字模块。

本文通过KitProg3 USB接口,使用提供的USB电缆将主板连接到电脑上再进行烧录以及验证等操作。

2. 嵌入式端部署与验证

2.1 部署

将训练好的模型以及需要测试的数据集放入到ModusToolbox的的机器学习示例中,注意测试集不能太大,否则会出现错误。然后打开ML Configurator工具,选择相应参数,具体参数设置如下图5。选择PSoC6平台,推理引擎选择的是tflm,校准数据选择的就是测试集,然后导入本文上述训练好的模型。设置完成后可以生成嵌入式源码。

图5 参数设置

生成源码成功后得到如下图6的日志文件。文件中显示了模型资源被写入到源码中。

图6 生成源码日志文件

得到的相应配置文件如下图7,其中给出了相应的信息。

图7 配置文件

此外,还有很多相关的信息都可以查看,比如说模型结构,如下图8,注意到本文在keras中定义的dense层,部署到嵌入式端后就是FULLY_CONNECTED全连接层。

图8 模型结构

​​​​​​​2.2 Desktop验证

接下来通过Desktop进行模拟验证,结果如下图9。选择的验证方式是文件夹格式的,然后量化方式为8*8,这样可以使模型和工作内存都较小,更容易通过。

数据集中每一类包含3张图片,共15张。在左边表格中,索引从0编号到14,每三个为一类,0-2表示苹果,3-5表示香蕉,6-8表示葡萄,9-11表示橙子,12-14表示梨。右边图表中,横坐标1-5表示的就是五种水果,纵坐标表示当前索引图像被分成该类的可能性。

例如图中当前选择的是索引13号,所以它属于梨,在图表中也能看出它被分类为5号(梨)的可能性也是最大的。

图9 Desktop验证结果

验证生成的报告如下图10所示。可以看出准确率(100>98)、匹配错误率(0.004<1.000)以及内存空间(537.640<999)都满足要求,最终状态为PASS即模型通过。

图10 验证报告

如果加上float量化方式,则相应结果对比如下表1所示。float方式的Memory指标太大了,无法满足条件。

表1 不同量化方式Desktop验证指标对比

数据类型

Relative Accuracy

Mismatch Error

Scratch Memory

Status

int 8x8

100

0.004

537.360

PASS

float

100

0.000

2133.250

FAIL

​​​​​​​2.3 Target验证

通过上述的验证得到了模拟的结果,但考虑到实际情况可能有所不同,因此本文将PSoc6连入PC端进行进一步验证,连接图如下图11。

图11 连接开发板

连接后通过ModusToolbox进行烧录,结果如下图12。

图12 烧录结果

打开MLconfigurator后在validate on target界面选择相应的串口(本文为COM3),选择int8x8量化,数据结构同样为之前的文件夹格式。验证后得到如下图13中的结果。可以看出效果也很好。相应的指标见下表2。

图13  Target验证

表2 Target验证指标对比

DateType

buffer Memory

Mismatch Error

Scratch Memory

Model size

avg_cyc

peak_cyc

peak_ frame

int 8x8

534.46

0.004

537.360

50.64

99365400

99373233

9

3.  常见问题

在部署过程中可能会遇到各种问题,大家可以去社区查看相关问题,链接如下:

https://community.infineon.com/t5/user/viewprofilepage/user-id/160491

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deleteeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值