承接上文——小编就不再铺垫了,直接上重点!
在上一节中,我们已经成功完成模型训练,并获得了量化后的 TFLite 模型。
那模型到底“长”什么样?结构是否如预期?算子是否都被正确量化?
要回答这些问题,就必须请出我们的一位老朋友-Neutron工具(朋友们可自行下载)来对模型进行可视化与结构检查。通过它,我们能更直观地了解模型的内部构成,为后续移植到Zephyr做好扎实准备。

为了验证是否是量化好的模型,这里任意点击一个节点,在弹出的属性页面下,可以看到他的权重类型为int8,说明我们已经成功量化好了模型,就可以开始做模型转换的准备了。
1.下载适配MCXN947的SDK代码,这样就可以直接已SDK为基础进行改造了,无需额外工作,这里要注意的是:因为转换工具和SDK版本有深度的依赖,在转换前,需要提前决定好要使用的SDK版本https://mcuxpresso.nxp.com/zh/select,这里假设我们选择的是2.16.0版本的SDK包:
点击构建后,会跳转页面勾选中间件,因为是要移植到Zephyr上,这里直接选择MCUXPresso IDE作为工具链(采用的GCC工具链,和Zephyr原生工具链兼容),并勾选eIQ选项,等待构建完成:

2.下载eiq ToolKit,安装包中包含了我们所需要的转换工具https://www.nxp.com/design/design-center/software/eiq-ai-development-environment/eiq-toolkit-for-end-to-end-model-development-and-deployment:EIQ-TOOLKIT,并根据实际环境下载windows或是ubuntu版本的软件:
下载完成后等待安装完成,安装完成后,就要开始寻找我们需要的转换工具了,切换到安装目录C: xpeIQ_Toolkit_v1.14.0in eutron-converter,里面有不同版本的转换器,要根据刚才下载的SDK版本进行选择,刚才下载的SDK版本是2.16.0,那直接选择MCU_SDK_2.16.000目录下的转换工具:


3.模型转换方法:准备好量化好的模型,并利用命令行方式进行转换:

转换成功后,模型会已saved_model_converted.tflite保存,如下图右边的就是转换好的模型,转换器已经将三个FullyConnected算子进行了融合,变成了一个统一的NeutronGraph算子,至此模型转换就成功了。

4.将模型保存为C数组的形式:为了在程序中使用转换好的模型,需要将模型降解为C语言数组的形式,这里直接借用Linux所提供的工具,xxd来进行操作(可以借助WSL或是虚拟机实现):
| # Install xxd if it is not available !apt-get update && apt-get -qq install xxd # Convert to a C source file, i.e, a TensorFlow Lite for Microcontrollers model !xxd -i {MODEL_TFLITE} > {MODEL_TFLITE_MICRO} # Update variable names REPLACE_TEXT = MODEL_TFLITE.replace('/', '_').replace('.', '_') !sed -i 's/'{REPLACE_TEXT}'/g_model/g' {MODEL_TFLITE_MICRO} |
执行完成后会生成一个名为:model.cc的文件,里面就是已经降解为C语言数组形式的模型文件了:

至此,本期所需的前期准备工作已全部就绪:
我们完成了模型训练、量化处理,并顺利生成了可用于部署的TFLite模型。这些步骤为真正的重点 ——在Zephyr 中集成NPU运行时环境,并将模型文件部署到实际系统—— 打下了坚实基础。
真正的“硬仗”,从下一期正式开始。
敬请期待,我们将在Zephyr上让NPU“跑”起来!










