【TVM教程】在支持 CMSIS-NN 的 Arm(R) Cortex(R)-M55 CPU 和 Ethos(TM)-U55 NPU 裸机上运行 TVM

💡 原文中文,约11200字,阅读约需27分钟。
📝

内容提要

Apache TVM是一个深度学习编译框架,支持在Arm Cortex-M55 CPU和Ethos-U55 NPU上运行模型。本文介绍如何在固定虚拟平台上编译和运行MobileNet v1模型,并使用CMSIS-NN进行优化。通过命令行工具tvmc进行模型编译,并提供必要的Python依赖和示例代码,最终实现对输入图像的分类。

🎯

关键要点

  • Apache TVM是一个深度学习编译框架,支持在Arm Cortex-M55 CPU和Ethos-U55 NPU上运行模型。
  • Cortex-M55是一款用于嵌入式设备的小型低功耗CPU,CMSIS-NN是针对Arm Cortex-M CPU优化的内核集合。
  • Ethos-U55是一种microNPU,专为在资源受限的嵌入式设备中加速机器学习推理而设计。
  • 可以在固定虚拟平台(FVP)上运行demo程序,FVP基于Arm Corstone-300软件建模Cortex-M55和Ethos-U55硬件系统。
  • 使用命令行工具tvmc进行模型编译,编译MobileNet v1模型并将算子迁移到Ethos-U55。
  • 运行demo需要安装额外的Python包,通过requirements.txt文件安装。
  • MobileNet v1模型是一种卷积神经网络,能够对224x224大小的图像进行分类,已预训练可识别1001个类别。
  • 使用tvmc compile命令编译模型,生成适用于目标平台的模型库格式(MLF)。
  • 下载ImageNet标签文件以便将输出结果转换为用户友好的标签。
  • 使用Python脚本将输入图像转换为C头文件中的字节数组,并生成输出数组的头文件。
  • 编写C程序以在下载的图像上运行MobileNet v1模型的推理,并显示分类结果。
  • 创建链接脚本以便在构建应用程序时使用,确保模型权重和命令流放在适当的内存部分。
  • 更新PATH环境变量以包含cmake和FVP的路径,使用make命令构建demo。
  • 在固定虚拟平台上运行demo,输出结果显示图像已被正确分类。

延伸问答

如何在Cortex-M55和Ethos-U55上运行MobileNet v1模型?

可以通过Apache TVM框架,使用命令行工具tvmc编译MobileNet v1模型,并在固定虚拟平台上运行。

什么是CMSIS-NN,它的作用是什么?

CMSIS-NN是针对Arm Cortex-M CPU优化的内核集合,旨在加速机器学习推理。

在运行demo程序之前需要安装哪些Python依赖?

需要安装attrs、cloudpickle、decorator等多个Python包,具体可通过requirements.txt文件安装。

如何将输入图像转换为C头文件中的字节数组?

可以使用Python脚本将输入图像调整为224x224大小,并转换为C头文件中的字节数组。

如何编译MobileNet v1模型以适应Ethos-U55?

使用tvmc compile命令,指定目标为ethos-u和cmsis-nn,并设置相关参数进行编译。

运行demo程序后,如何查看图像分类结果?

在控制台窗口中可以看到输出结果,显示图像被正确分类的标签。

➡️

继续阅读