前面已经写了文章描述如何搭建简单的水果分类模型,本文将介绍如何将搭建的模型部署至嵌入式端,本文利用ML Configurator提供的配置程序ML Configurator来导入预先训练好的机器学习模型,而它的目前版本仅支持Keras-H5。所以前文是采用Keras搭建神经网路。
本文使用的嵌入式端软件为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格式模型以及测试数据,再生成嵌入式模型进行验证。
本文嵌入式端验证所使用的开发板为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电缆将主板连接到电脑上再进行烧录以及验证等操作。
将训练好的模型以及需要测试的数据集放入到ModusToolbox的的机器学习示例中,注意测试集不能太大,否则会出现错误。然后打开ML Configurator工具,选择相应参数,具体参数设置如下图5。选择PSoC6平台,推理引擎选择的是tflm,校准数据选择的就是测试集,然后导入本文上述训练好的模型。设置完成后可以生成嵌入式源码。
图5 参数设置
生成源码成功后得到如下图6的日志文件。文件中显示了模型资源被写入到源码中。
图6 生成源码日志文件
得到的相应配置文件如下图7,其中给出了相应的信息。
图7 配置文件
此外,还有很多相关的信息都可以查看,比如说模型结构,如下图8,注意到本文在keras中定义的dense层,部署到嵌入式端后就是FULLY_CONNECTED全连接层。
图8 模型结构
接下来通过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 |
通过上述的验证得到了模拟的结果,但考虑到实际情况可能有所不同,因此本文将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 |
在部署过程中可能会遇到各种问题,大家可以去社区查看相关问题,链接如下:
https://community.infineon.com/t5/user/viewprofilepage/user-id/160491