本文最早发表于电子发烧友论坛:【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com)
这次的主要目标就是学习NXP的AI程序开发。首先阅读了《05【正点原子】ATK-DLIMX93嵌入式AI开发手册V1.0》文档,这个文档写得很清楚,不过我建议大家读一下原厂文档《i.MX Machine Learning User's Guide》,里面有些技术细节更清楚。下面就介绍一下自己对I.MX 93平台的测试。
i.MX 93支持在Cortex-A上进行CPU推理,也支持为 Arm 自研的 Ethos-U65(NPU)上进行推理。当然后者的推理速度比前者快很多。I.MX 93对不同推理的支持是通过选择委托(Delegate)来实现的。如果选择XNNPACK就是CPU推理,而使用Ethos-U委托就是采用NPU推理。NXP在其他硬件平台上还提供了更多的推理选项,这里就不讨论了。
我测试了厂商提供的图像分类程序,它在开发板的/usr/bin/eiq-examples-git/image_classification目录中。要运行这个程序,首先需要下载模型文件。/usr/bin/eiq-examples-git/download_models.py 这个脚本是用来下载模型的,不过这个脚本要访问谷歌网盘,不方便的朋友可以从正点原子的网盘下载所需要的文件。
安装好模型文件后,如果运行python3 label_image.py就执行的是CPU推理,需要63.815ms。
root@atk-imx93:/usr/bin/eiq-examples-git/image_classification# python3 label_image.py
0.878431: military uniform
0.027451: Windsor tie
0.011765: mortarboard
0.011765: bulletproof vest
0.007843: sax
time: 63.815ms
如果想使用NPU推理,就需要在命令行使用-d制定推理所需要的库文件:
python3 label_image.py -d /usr/lib/libethosu_delegate.so
正点原子的文档说要使用NPU推理,需要用开发板上的vela 工具将tflite模型编译成可以使 NPU 进行推理的 vela 模型,而且模型只支持8位或16位量化。
使用NPU后,推理时间减少到4ms。
root@atk-imx93:/usr/bin/eiq-examples-git/image_classification# python3 label_image.py -d /usr/lib/libethosu_delegate.so
INFO: Ethosu delegate: device_name set to /dev/ethosu0.
INFO: Ethosu delegate: cache_file_path set to .
INFO: Ethosu delegate: timeout set to 60000000000.
INFO: Ethosu delegate: enable_cycle_counter set to 0.
INFO: Ethosu delegate: enable_profiling set to 0.
INFO: Ethosu delegate: profiling_buffer_size set to 2048.
INFO: Ethosu delegate: pmu_event0 set to 0.
INFO: Ethosu delegate: pmu_event1 set to 0.
INFO: Ethosu delegate: pmu_event2 set to 0.
INFO: Ethosu delegate: pmu_event3 set to 0.
INFO: EthosuDelegate: 31 nodes delegated out of 31 nodes with 1 partitions.
0.874510: military uniform
0.031373: Windsor tie
0.015686: mortarboard
0.011765: bulletproof vest
0.007843: bow tie
time: 4.016ms