在ZephyrOS添加NPU驱动支持加速AI应用

描述

 

承接上文——小编就不再铺垫了,直接上重点!

在上一节中,我们已经成功完成模型训练,并获得了 量化后的 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“跑”起来!

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分