当前位置: 首页 > news >正文

深圳罗湖建网站城市建设招标网站

深圳罗湖建网站,城市建设招标网站,上海比较有名的公司,优设网下载【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN#xff1f;2.2 CMSIS-NN是什么#xff1f;2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM… 【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN2.2 CMSIS-NN是什么2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM中CMSIS-NN相关构建规则3.3 理解TFLM中CMSIS-NN相关算子实现3.4 集成CMSIS-NN方式1——作为TFLM的一部分3.5 集成CMSIS-NN方式2——作为独立的三方库 四、TFLMCMSIS-NN测试4.1 编译源代码4.2 下载Boot代码4.3 下载Appli代码4.4 运行TFLM基准测试 五、问题解决5.1 specialize_files.py 输入不支持CMake列表参数问题5.2 specialize_files.py 输出的路径分隔符不一致问题5.3 specialize_files.py 输出和CMake列表格式不一致问题5.4 specialize_files.py 输出的最后一个文件无法找到 六、项目源码七、参考链接 本文介绍了如何通过移植CMSIS-NN库并调整TensorFlow Lite for Microcontrollers (TFLM) 的构建配置实现在STM32微控制器上利用DSP指令集加速TensorFlow Lite模型的推理过程。通过这一方法我们能够有效地提升基于ARM Cortex-M系列MCU上运行深度学习模型的性能。文章首先介绍了CMSIS-NN库的基本概念及其在神经网络加速中的作用随后详细阐述了移植库到STM32平台的步骤。接着文章深入讲解了如何修改TFLM的构建规则实现调用CMSIS-NN库实现TensorFlow算子。最后通过实验验证了该方法在提高模型推理速度方面的显著效果使用CMSIS-NN实现DSP加速后的人脸检测模型推理速度接近原来的3.5倍。 本系列博文目录 【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】 背景介绍、初步体验、框架移植【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】 平台适配、编译集成、基准测试【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】 CMSIS-NN简介、TFLMCMSIS-NN集成、TFLMCMSIS-NN测试 一、前文回顾 此系列前面已经发布了两篇 【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】 【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】 【上篇】介绍了TensorFlow、TensorFlow Lite、TensorFlow Lite for MicrocontrollersTFLM是什么如何下载TFLM源码如何在个人电脑PC上体验运行TFLM基准测试。同时分析了TFLM的部分Makefile源码分析。最后介绍了如何移植TFLM的主体代码。 【下篇】介绍了如何准备STM32 CubeMX项目以便于后续的TFLM可以顺利移植如何将TFLM源码集成到STM32 CubeMX生成的项目中去以及如何在STM32项目中运行TFLM基准测试。同时介绍了过程中遇到的问题以及解决方法。最后给出了整个项目的完整可运行源代码。 二、CMSIS-NN简介 2.1 为什么介绍CMSIS-NN 因为TFLM源码中有针对CMSIS-NN的算子适配层通过该适配层可以实现将TensorFlow Lite模型的推理计算转化为对CMSIS-NN库的调用。 同时CMSIS-NN底层支持DSP指令和MVE指令在Cortex-M4、Cortex-M7、Cortex-M33上可以实现DSP指令加速计算在Cortex-M55、Cortex-M85上可以实现MVE加速计算。 简言之TFLM默认的算子实现为纯CPU计算而CMSIS-NN可以作为TFLM的后端实现部分处理器上的DSP和MVE加速计算。 2.2 CMSIS-NN是什么 CMSIS-NN是什么官方的解释是 CMSIS NN 软件库是一组高效的神经网络核函数旨在最大限度地提高 Arm Cortex-M 处理器上神经网络的性能并最大限度地减少内存占用。 CMSIS-NN是一个计算库它向上提供了神经网络NN计算接口实现了神经网络计算的硬件加速。它内部实现了纯CPU计算、DSP计算、MVE计算屏蔽了底层硬件的具体细节降低了编程难度。 2.3 CMSIS-NN核心特性 总结一下官方的介绍可以知道CMSIS-NN库的核心特性 专为Cortex-M处理器开发 神经网络计算函数 最大化性能 最小化内存占用 CMSIS-NN的硬件和软件支持 2.4 CMSIS-NN算子支持 在CMSIS-NN源码仓首页可以看到CMSIS-NN库提供了三种算子实现分别为 纯CCMSIS-NN提供了所有算子的纯C实现用于像Cortex-M0和Cortex-M3这样的处理器DSP扩展在支持DSP扩展的处理器上可以使用DSP指令加速计算例如Cortex-M4或Cortex-M7MVE扩展在支持ARM Helium技术的处理器上可以使用MVE指令加速计算例如 Cortex-M55 或 Cortex-M85 三、TFLMCMSIS-NN集成 接下来我将介绍如何将TFLM和CMSIS-NN集成到STM32项目中。 3.1 包含TFLM的STM32项目 前面的文章中我们已经知道了如何将TFLM集成到STM32项目中本文将以上一篇文章的代码为基础继续进行CMSIS-NN的集成和测试。 基础项目代码仓链接 https://gitcode.com/xusiwei1236/STM32H7S78-DK-TFLM这个代码仓就是——已经包含了TFLM的STM32项目。 3.2 理解TFLM中CMSIS-NN相关构建规则 TFLM的构建规则Makefile文件中和CMSIS-NN相关的主要代码片段为 这段代码中比较重要的有两处分别为 649行CMSIS-NN对应的OPTIMIZED_KERNEL_DIR变量值为cmsis_nn此时会包含cmsis_nn.inc构建规则文件651到653行调用specialize_files.py脚本用于将算子实现源文件列表MICROLITE_CC_KERNEL_SRCS中的部分文件替换为CMSIS-NN适配源文件列表 cmsis_nn.inc文件内容如下 这段代码中可以看到TFLM支持两种方式和CMSIS-NN集成 CMSIS-NN作为独立的三方库链接到一起CMSIS-NN作为TFLM的一部分编译到一起 specialize_files.py文件源码如下 该文件实现了 遍历base_files列表中的条目检查在specialized_directory目录下是否存在和它的基础文件名basename相同的文件如果存在则使用specialized_directory目录下的替换掉base_files中的这一条否则保持原来位于base_files中的这一条不变 3.3 理解TFLM中CMSIS-NN相关算子实现 对于CMSIS-NN实际运行时的specialized_directory指定的参数值是tensorflow/lite/micro/kernels/cmsis_nn子目录。 该目录下包含的文件如下 实际执行specialize_files.py脚本时实际的替换文件的对应关系如下 默认算子文件CMSIS-NN算子文件tensorflow/lite/micro/kernels/add.cctensorflow/lite/micro/kernels/cmsis_nn/add.cctensorflow/lite/micro/kernels/batch_matmul.cctensorflow/lite/micro/kernels/cmsis_nn/batch_matmul.cctensorflow/lite/micro/kernels/conv.cctensorflow/lite/micro/kernels/cmsis_nn/conv.cctensorflow/lite/micro/kernels/depthwise_conv.cctensorflow/lite/micro/kernels/cmsis_nn/depthwise_conv.cctensorflow/lite/micro/kernels/fully_connected.cctensorflow/lite/micro/kernels/cmsis_nn/fully_connected.cctensorflow/lite/micro/kernels/mul.cctensorflow/lite/micro/kernels/cmsis_nn/mul.cctensorflow/lite/micro/kernels/pooling.cctensorflow/lite/micro/kernels/cmsis_nn/pooling.cctensorflow/lite/micro/kernels/softmax.cctensorflow/lite/micro/kernels/cmsis_nn/softmax.cctensorflow/lite/micro/kernels/svdf.cctensorflow/lite/micro/kernels/cmsis_nn/svdf.cctensorflow/lite/micro/kernels/transpose_conv.cctensorflow/lite/micro/kernels/cmsis_nn/transpose_conv.cctensorflow/lite/micro/kernels/unidirectional_sequence_lstm.cctensorflow/lite/micro/kernels/cmsis_nn/unidirectional_sequence_lstm.cc 这里以第一行add.cc为例默认的算子实现主体代码为 CMSIS-NN版本的add.cc代码主体代码为 都提供了Register_ADD()函数用于注册ADD算子。 3.4 集成CMSIS-NN方式1——作为TFLM的一部分 理解了前面的Makefile代码就可以编写CMake构建规则从而实现在STM32项目中集成TFLM和CMSIS-NN。 前文提到STM32项目集成CMSIS-NN有两种方式分别为 CMSIS-NN作为TFLM的一部分编译到TFLM的静态库libtflite-micro.a文件中CMSIS-NN作为独立的三方库链接到STM32的可执行程序.elf文件中 首先介绍第一种方式也就是CMSIS-NN作为TFLM的一部分这种方式Appli子项目不直接依赖CMSIS-NN库无需修改更易于理解。 基于对Makefile源码的理解修改tflite-micro目录的CMakeLists.txt文件内容 这段修改中包含了cmsis-nn.cmakecmsis-nn.cmake文件的内容为 整个修改实现了 调用specialize_files.py脚本将MICROLITE_KERNEL_CC_SRCS中的部分算子文件路径替换为cmsis_nn目录内的实现了CMSIS-NN适配层的编译将cmsis-nn.cmake中匹配到的CMSIS-NN源文件添加到TFLM库的源文件列表中实现了CMSIS-NN代码的编译并作为TFLM库的一部分 这样修改之后重新编译生成的libtflite-micro.a中就包含了CMSIS-NN的代码以及基于CMSIS-NN的TensorFlow算子实现。 3.5 集成CMSIS-NN方式2——作为独立的三方库 另外一种集成CMSIS-NN的方式是CMSIS-NN作为独立的三方库最终连接到整个项目的可执行文件.elf中。 要实现这种继承方式需要在刚修改的TFLM的CMakeLists.txt的基础上进行修改 一共修改两处 add_library代码片段删除CMSIS-NN相关的代码文件文件末尾添加add_subdirectory(tensorflow/lite/micro/tools/make/downloads/cmsis_nn)让CMSIS-NN的CMakeLists.txt被包含到整个项目中 除此之外还需要修改Appli目录的CMakeLists.txt文件具体修改内容如下图 一共修改了三处 新增了TF_CMSIS_NN_DIR变量定义用于记录cmsis_nn源码所在子目录target_link_directories下增加一行指定CMSIS-NN库文件生成的目录target_link_libraries下增加一行指定链接cmsis-nn库 以上这种修改方式也可以实现将TFLM和CMSIS-NN集成到STM32项目中。 四、TFLMCMSIS-NN测试 4.1 编译源代码 第一种方式集成CMSIS-NN由于上层代码不依赖CMSIS-NN库即不新增库依赖因此其编译方式和此前的文章方式一样这里不在介绍。 这里仅介绍第二种方式集成CMSIS-NN的编译方法分为如下几步 清理输出目录如下图操作 编译tflite-micro库如下图操作 编译xxx_benchmark库如下图操作 编译cmsis-nn库如下图操作 编译Appli目标如下图操作 编译Boot代码如下图所示 4.2 下载Boot代码 由于Appli代码需要使用Boot代码进行跳转因此下载Appli代码之前需要先将Boot代码下载到开发板上。 下载之前先将STM32H7S78-DK开发板和PC通过USB线连接好板子由三个USB口注意连接到标有STLK的。 下载Boot代码按照如下图所示操作 执行过程中终端子窗口会输出进度等信息 4.3 下载Appli代码 下载Appli代码按照如下图操作 执行过程中终端子窗口会输出进度等信息 4.4 运行TFLM基准测试 打开MobaXterm添加会话选择STLink的虚拟串口设备参数如下 连接设备之后按下开发板上的NRST按钮重启设备可以看到串口输出如下 可以看到开发板上运行有人图像的人体检测耗时为286毫秒没有人的耗时为286毫秒连续运行10次的耗时分别为2863毫秒和2863毫秒速度有点慢。 和上一篇文章的数据对比如下 测试项目TFLMTFLMCMSIS-NNWithPersonDataIterations(1)993286NoPersonDataIterations(1)994286NoPersonDataIterations(10)99382863NoPersonDataIterations(10)99402863 五、问题解决 第三章、第四章实际过程中遇到了一些问题为了保持前文逻辑连贯没有在前面记录本章将记录具体问题及解决方法。 5.1 specialize_files.py 输入不支持CMake列表参数问题 【问题现象】specialize_files.py脚本输出和输入参数base_files的值完全一样。 【问题原因】specialize_files.py脚本使用Python的string.split对参数base_files的值进行分隔要求值是空白字符空格、TAB、换行等分隔的。而CMake的列表字符串是分号分隔的。 【解决方法】将MICROLITE_CC_KERNEL_SRCS中的分隔符替换为空格再将其传给specialize_files.py脚本具体代码为 5.2 specialize_files.py 输出的路径分隔符不一致问题 【问题现象】specialize_files.py 输出的路径分隔符不一致有正斜杠也有反斜杠导致后续报错——文件找不到。 【问题原因】CMake代码使用的路径分隔符是正斜杠specialize_files.py代码里面使用的是os.path.sep在Windows上是反斜杠。 【解决方法】将反斜杠全部替换为正斜杠。 5.3 specialize_files.py 输出和CMake列表格式不一致问题 【问题现象】specialize_files.py 输出的文件列表是空格分隔的和CMake列表格式不一致。 【问题原因】specialize_files.py 使用空格拼接文件列表为一个字符串之后输出而CMake列表需要用使用分号分隔。 【解决方法】将字符串中的空格替换为分号。 5.4 specialize_files.py 输出的最后一个文件无法找到 【问题现象】specialize_files.py 输出的文件列表的最后一个文件后续CMake代码提示该文件找不到。 【问题原因】乍看起来文件路径是对的能够找到实际将该文件路径字符串加上双引号输出之后发现末尾多了一个换行符。 【解决方法】去除末尾的空白字符。 六、项目源码 如需本文修改后项目源码的请在评论区留言。我将会在留言超过10条或本文阅读量超过1200之后将本文修改的最终源码全部开源。 当然动手能力强的读者也可以根据文章描述的步骤一步步修改得到最终版本的源码。 七、参考链接 TensorFlow Lite for Microcontrollers介绍 TensorFlow Lite for Microcontrollers (google.cn)TensorFlow Lite for Microcontrollers入门 微控制器入门 | TensorFlow (google.cn)tflite-micro 源码仓 https://github.com/tensorflow/tflite-microCMake最新文档 CMake Reference Documentation — CMake 3.30.3 DocumentationCMSIS-NN在线文档 CMSIS-NN: CMSIS NN Software Library (arm-software.github.io)CMSIS-NN 源码仓 https://github.com/ARM-software/CMSIS-NN
http://www.tj-hxxt.cn/news/216742.html

相关文章:

  • 百度云网站空间建设智慧团建手机登录入口电脑版
  • 做网站蓝色和什么颜色腾讯云主机网站建设教程
  • 微信公众平台开发微网站北京市工程建设交易中心
  • wordpress 扒站网站关键词找不到
  • 合肥做网站一般多少钱wordpress简单企业站
  • 微网站的案例莱芜东风街吧
  • 做淘客推广用什么网站好凡客网站建设
  • 如何免费建立自己的网站wordpress仿淘宝页面
  • 有没有做美食的视频网站手机网站导航栏特效
  • 洛阳网站建设lyland哈尔滨模板网站
  • 国内网页设计师个人网站奎屯网站建设
  • 网站怎样多语言网站建设 类
  • 阿里云备案 网站备案郑州新闻发布会直播
  • 江苏建设官方网站美妆网站建设环境分析
  • 陕西省西安市制作网站重庆建设官网
  • 装修公司网站建设广东新闻联播主持人名单
  • 网站手机采集成都排名推广
  • 网站推广优化外包百度自动优化
  • 网站备案查询api外链查询
  • 整屏网站模板小兽wordpress主题
  • 备案 非网站住房与城乡建设网上办事大厅
  • 网站推广实施计划苏州工业园区公积金管理中心
  • 做网站 售后服务里都写啥苏州有哪些做网站公司
  • 常州本地做网站的大公司中国建设银行网站公积金查询
  • 网站源码上传到空间以后怎么做免费在线设计平台
  • 制作网站商城vue可以做pc的网站
  • 调兵山网站建设iis部署网站浏览报404
  • 做网站怎么加入索引功能如何弄小程序
  • 网站优化怎么做 有什么技巧连云港做电商网站的公司
  • 网站上线后做什么wordpress知乎