热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gitbashhere找不到应用程序_移植TFLitemicro应用程序到ArmCortexM55处理器

本人首发极术社区作者:PareenaVerma翻译:啥都吃的豆芽欢迎关注极术社区微信号(aijishu2020)获取更多Arm相关的技术干
本人首发极术社区作者:Pareena Verma 翻译:啥都吃的豆芽 欢迎关注极术社区微信号(aijishu2020) 获取更多Arm相关的技术干货。
d124b2c0a09d7c35541b2a34c4fd8295.png

ARM Cortex-M55处理器是第一个采用ARMv8.1-M架构的处理器,该架构包括ARM Helium技术(也称为M-profile矢量扩展(MVE))的实现。Helium技术可在下一代嵌入式设备上实现更高水平的机器学习和信号处理。

今天,MCU开发人员已经在使用开源库(如CMSIS-DSP、CMSIS-NN)和ML框架(如用于微控制器的TensorFlow Lite)将机器学习应用程序移植到ARM Cortex-M设备上。用于微控制器的TensorFlow Lite设计用于在内存占用非常小的处理器上运行机器学习模型。CMSIS-DSP和CMSIS-NN库中添加了对Cortex-M55的支持。这使得将ML应用程序移植到Cortex-M55变得容易得多,因为开发人员可以使用他们已经熟悉的相同的库和神经网络框架。

22258b29b25b6b85860cef8a2c163075.png

在此处了解如何将CMSIS-DSP库移植到Cortex-M55:如何将Arm Cortex-M55处理器与开源CMSIS库一起使用。

在本文中,我们将详细说明将TensorFlow Lite的微控制器应用程序构建和移植到Arm Cortex-M55快速和循环模型系统的过程。Arm快速模型是Arm IP在功能上准确的程序员视图模型。我们使用Arm Cortex-M55快速模型系统来调试,运行和验证已构建的ML应用程序。然后,我们将在Arm Cortex-M55循环模型系统上运行经过验证的ML应用程序,以测量准确的系统性能。手臂循环模型直接从Arm RTL构建,并提供完整的循环精度。

设置本地开发环境

首先,从github克隆项目存储库:

$git clone https://github.com/ARM-software/Tool-Solutions.git
$cd Tool-Solutions/docker/tflite-micro-models

tflite-micro-models项目包含构建在M55快速和循环模型虚拟平台上运行的Tensorflow Lite for Microcontrollers示例所需的一切。以下是项目中包含的内容的列表:

  • TFLite_micro_IPSS_Support –此目录包含我们需要向TensorFlow Lite提供的与自定义目标有关的所有系统信息-M55快速和循环模型系统。
  • download_tflow_cmsis.sh –克隆TensorFlow和CMSIS存储库并将TFLite_micro_IPSS_Support软件包复制到TensorFlow存储库的适当位置的脚本。
  • TensorFlow仓库从https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro克隆而来 。
  • CMSIS存储库从https://github.com/ARM-software/CMSIS_5.git克隆
  • get-ac6.sh –下载用于Linux的Arm Compiler 6.14的脚本。我们使用 Arm Compiler 作为工具链来构建TensorFlow Lite for Microcontroller示例。
  • build_tflite_micro_test.sh-用于针对自定义M55虚拟平台构建TensorFlow Lite for Microcontroller示例的脚本
  • Dockerfile –包含用于组装此项目的Docker映像的所有命令。
  • build.sh –用于构建docker映像的脚本
  • run.sh –运行docker容器的脚本

我们正在为项目使用基于 Docker的开发环境。它使创建一个具有所有依赖项的已知良好开发环境变得更加容易。

首先,下载适用于Linux的Arm Compiler 6.14。您可以在此处直接从Arm Developer 或通过运行 get-ac6.sh 文件下载它 :

$ ./get-ac6.sh

然后,通过运行build.sh文件或使用以下命令为该项目构建Docker映像:

$ docker build -t tflite-micro-models -f Dockerfile .

接下来,通过运行run.sh文件或使用以下命令来启动Docker容器:

$ docker run --network host -it tflite-micro-models /bin/bash

我们现在在Docker容器中,可以开始构建TensorFlow Lite Micro示例应用程序。

构建TensorFlow Lite Micro示例应用程序

TensorFlow Lite for Microcontrollers附带了几个示例。使用TensorFlow Lite for Microcontrollers,您可以为Keil,Make和Mbed开发环境生成独立项目。在此示例中,我们使用Make生成项目。

可以使用TFLite Micro中的参考内核(tensorflow / lite / micro / kernels)或使用CMSIS-NN库的优化内核(tensorflow / lite / micro / kernels / cmsis-nn)构建应用程序。参考内核不包括任何特定于平台的优化。我们使用优化的CMSIS-NN内核构建应用程序。

CMSIS-NN 是高效的神经网络内核的集合,这些内核可以最大化性能,并最小化Cortex-M处理器内核上神经网络的内存占用。对Helium技术(M-Profile Vector扩展)的内核支持已添加到CMSIS-NN库。

要构建针对Cortex-M55系统的示例应用程序,请使用 build_tflite_micro_test.sh 脚本。您要构建的示例应用程序作为参数传递给此脚本。以下选项是:

  • hello_world
  • magic_wand
  • micro_speech
  • network_tester
  • person_detection

如果您是第一次使用TensorFlow Lite for Microcontrollers框架,那么 hello world 是了解基础知识和学习完整的端到端工作流程的经典开始。

在本文中,我们将把微型语音示例移植 到Cortex-M55快速和循环模型系统。此示例运行22kB TensorFlow Lite模型并使用很少的内存(大约10kB的RAM)。该模型可以从样本语音数据中识别两个关键字,是和否。

要在容器中构建micro_speech_test可执行文件,请使用:

$ ./build_tflite_micro_test.sh -t micro_speech

生成的可执行文件“ micro_speech_test”被复制到Cortex-M55 / software / exe目录中。要了解此测试的功能,您可以在此处检查源代码 。它实质上是创建一个解释器,获取TensorFlow Lite模型的句柄,然后使用模型和一些示例输入来运行解释器。

现在,我们准备在Cortex-M55快速和循环模型系统上运行micro_speech_test可执行文件。要访问这些系统,请在此处与我们联系 。

在Arm Fast Model系统上运行TensorFlow Lite应用程序

ARM Fast Model是ARM CPU和系统IP的快速、功能精确的程序员视图模型。在任何硬件可用之前,您就可以使用Fast型号开发针对ARM IP的软件,非常适合在Cortex-M55上进行开发。

用于微控制器的TensorFlow Lite可执行文件“MICRO_SPICE_TEST”在一个简单的M55快速模型系统上运行,如下所述。

// This file was generated by System Generator Canvas// --------------------------------------------------component m55
{composition{ramdevice : RAMDevice("size"=0x100000000);pvbus2ambapv : PVBus2AMBAPV();BusDecoder : PVBusDecoder();armm55ct : ARMCortexM55CT("MVE"=2, "CFGDTCMSZ"=0xf, "CFGITCMSZ"=0xf);Clock1Hz : MasterClock();Clock100MHz : ClockDivider("mul"=100000000);}connection{Clock100MHz.clk_out => armm55ct.clk_in;Clock1Hz.clk_out => Clock100MHz.clk_in;armm55ct.pvbus_m => BusDecoder.pvbus_s;pvbus2ambapv.amba_pv_m => self.amba_pv_m;BusDecoder.pvbus_m_range[0x0..0x9fffffff] => ramdevice.pvbus;BusDecoder.pvbus_m_range[0xa8000000..0xa8001000] => pvbus2ambapv.pvbus_s;}master port amba_pv_m;
}

这是在此M55快速模型系统上运行micro_speech_test的输出:

Fast Models [11.10.22 (Mar 11 2020)]
Copyright 2000-2020 ARM Limited.
All Rights Reserved.
Testing TestInvoke
Ran successfully
1/1 tests passed~~~ALL TESTS PASSED~~~simulation is complete
Info: /OSCI/SystemC: Simulation stopped by user.

输出意味着将训练有素的语音TensorFlow模型成功加载到Cortex-M55目标上,并通过它运行了一些示例输入,并获得了预期的输出。

要了解有关Arm快速模型入门的更多信息,请参考此处的快速入门。

您还可以 通过对TFLite_micro_IPSS_Support中特定于系统的代码进行少量修改,将这些示例移植到 Arm Cortex-M55 FVP(固定虚拟平台)上。

利用Arm快速模型,这种类型的工作流程可用于在硬件可用之前验证平台上的神经网络行为。为了从仿真中获得并分析周期精确的性能指标,例如网络执行所需的时间,使用了Arm Cortex-M55周期模型系统。

在Arm Cycle Model系统上测量系统性能并获得准确的推理周期计数

ARM周期模型是ARM IP的100%功能和周期精确模型,直接从RTL编译而来。

Cortex-M55周期型号在ARM IP交换上提供。我们使用这个CPU模型建立了一个简单的Cortex-M55周期模型系统,并建立了系统互连和内存的周期模型。通过将M55周期模型系统的内存映射与快速模型系统的内存映射相匹配,我们可以在周期模型系统上运行相同的microSpeech_test可执行文件。

在M55周期模型系统上运行microSpeech_test可执行文件可以为我们提供整个应用程序的准确周期计数。我们使用周期精确的仿真结果来测量系统的关键性能指标,如内存带宽利用率。我们还可以在TensorFlow Lite应用程序中插入软件标记,以测量仅在TensorFlow Lite模型上运行推断的周期计数。

总结

Arm编译器中对Cortex-M55的支持以及CMSIS-NN库与TensorFlow Lite for Microcontrollers的紧密集成,使得将ML工作负载移植到新的Cortex-M设备的过程变得快捷,易于使用。˚F urthermore,ARM快速模型和周期模型的用于Cortex-M55的可用性使得早期的软件带来向上,验证和性能分析与ML工作量任何硬件设备可用之前。

英文链接:https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/port-tensorflow-lite-for-cortex-m55

相关文章

极术社区:使用Arm CMSIS-DSP库实现经典ML​zhuanlan.zhihu.com
极术社区:Cortex-M和Cortex-A的TrustZone差异​zhuanlan.zhihu.com



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
author-avatar
喵喵-浩_174
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有