2026/1/8 15:22:46
网站建设
项目流程
哪里有做桥梁模型的网站,校园网的典型网络拓扑结构,怎么做外语网站,免费微信网站源码关注星标公众号#xff0c;不错过精彩内容来源 | 瑞萨嵌入式小百科随着人工智能的发展#xff0c;以及MCU性能的提高#xff0c;在MCU上跑一些算法已经不是什么遥不可及的事了。到目前为止#xff0c;很多MCU跑AI算法已经很“轻松”了#xff0c;今天就手把手教大家移植CM…关注星标公众号不错过精彩内容 来源 | 瑞萨嵌入式小百科随着人工智能的发展以及MCU性能的提高在MCU上跑一些算法已经不是什么遥不可及的事了。到目前为止很多MCU跑AI算法已经很“轻松”了今天就手把手教大家移植CMSIS-NN V6.0.0到瑞萨RA8单片机VisionBoard开发板。CMSIS-NN是什么官方的解释是CMSIS NN software library is a collection of efficient neural network kernels developed to maximize the performance and minimize the memory footprint of neural networks on Arm Cortex-M processors.翻译一下就是CMSIS NN 软件库是一组高效的神经网络核函数旨在最大限度地提高 Arm Cortex-M 处理器上神经网络的性能并最大限度地减少内存占用。CMSIS-NN是一个计算库它向上提供了神经网络NN计算接口实现了神经网络计算的硬件加速。它内部实现了纯CPU计算、DSP计算、MVE计算屏蔽了底层硬件的具体细节降低了编程难度。为什么移植CMSIS-NN v6.0.0版本1CMSIS-NN核心特性总结一下官方的介绍可以知道CMSIS-NN库的核心特性专为Cortex-M处理器开发神经网络计算函数最大化性能最小化内存占用2CMSIS-NN的硬件和软件支持除此之外CMSIS-NN库还有几点也是值得关注的支持DSP扩展的处理器使用SIMD优化例如Cortex-M4核支持ARM的Heilum技术的处理器使用M核向量扩展MVEM-profile Vector Extension进行优化例如 Cortex-M55 或 Cortex-M85MVE扩展恰好是ARM Cortex-M85内置的VisionBoard主控芯片瑞萨RA8D1的CPU核正是ARM Cortex-M85CMSIS-NN可以作为TensorFlow Lite for Microcontroller的后端实现3CMSIS-NN核心特性CMSIS-NN v6.0.0版本的发布说明中介绍了新特性全连接FC、卷积CONV和深度卷积DWCONV添加了MVE指令的int4类型支持重新实现 LSTM 以与 TFLM 参考内核保持一致LSTM 对 int16 输入的支持DSP/MVEI 支持转置卷积支持分组卷积支持 FC 的非零滤波器偏移对 MVEI 的 Int16 输入卷积支持对 int16x8 卷积的 Int32 偏置支持更能多内容可以查看本文末尾的CMSIS-NN v6.0.0 Release Note如何移植CMSIS-NN v6.0.0到VisionBoard1创建RT-Thread项目RT-Thread Studio创建基于VisionBoard开发板的模板项目过程比较简单不再赘述。2添加CMSIS-NN源码RT-Thread Studio创建基于VisionBoard开发板的模板项目后在packages目录手动下载CMSIS-NN v6.0.0版本3修改RT-Thread代码修改项目顶层的Kconfig文件添加如下代码行注意Kconfig修改需要完需要保证最后有一行空行否则menuconfig命令会报奇怪的错误。检查packages目录内是否有SConsript文件并且内容如下如果没有可以手动创建。4修改CMSIS-NN代码CMSIS-NN目录顶层创建SConscript文件内容如下创建Kconfig文件内容如下5编译RT-Thread项目完成以上修改之后已经可以编译CMSIS-NN库的代码了。在命令行中执行如下命令编译整个项目编译输出最后部分如下图所示如何测试CMSIS-NN v6.0.01CMSIS-NN核心特性CMSIS-NN库内部带有了单元测试具体位于 Tests/UnitTest 子目录其中 unittest_targets.py 脚本可以用于生成测试脚手架代码使用方法如下当前生成的代码是单独生成elf文件并在ARM虚拟硬件AVH平台上运行的。默认情况下执行python unittest_targets.py —download-and-generate-test-runners命令会为每个测试用例生成一个main函数每个测试用例单独编译为一个elf文件之后使用ARM虚拟硬件AVH执行elf进行测试。为了能够生成在RT-Thread上运行的测试代码需要修改部分测试脚本代码实现将每个测试用例注册为一个独立的finsh命令在串口命令行中交互测试。具体修改的代码差异如下这段修改实现了调用unity的ruby脚本传递main_name命令行参数用于修改单元测试入口函数名称不指定默认是main生成一个独立的RT-Thread finsh命令注册代码.c文件生成一个用于编译的SConscript代码文件另外再结合上层目录的SConcsript包含所有子目录的SConscript就可以实现将所有单元测试编译为finsh命令了。修改完该脚本文件后执行如下命令生成RT-Thread平台测试代码命令执行输出如下2测试代码的构建规则SConscript然后需要在CMSIS-NN的Tests子目录内添加SConscript文件这段SConscript的作用是将子目录的SConscript脚本包含到整个项目的构建流程中去。接着需要在CMSIS-NN的Tests/UnitTest子目录内添加SConscript文件完成以上修改后通过menuconfig打开 PKG_USING_CMSIS_NN_TESTS 配置项目再次 scons 编译就可以编译单元测试代码文件了。3解决链接失败问题但是还会有一些编译错误原因主要有原来的测试脚本为每个测试用例独立生成main函数每个目录单独编译链接到一起时会有大量重复的setUp/tearDown/resetTest/verifyTest函数定义原来的测试数据数组没有加static修饰被重复include到多个.c文件链接到一起时会有数组重复的数组定义为了解决上述两类问题分别创建两个脚本。修复重复函数定义的 fix_testCode.sh解决方法所有 setUp/tearDown/resetTest/verifyTest 函数添加 weak 属性修饰修复重复数组定义的 fix_testData.sh解决方法所有测试数据的数组添加static修饰。分别执行上面两个脚本之后再次编译就没有编译错误了。4运行单元测试顺利编译之后下载固件运行后在串口输入help命令可以看到输入命令运行avgpool算子的测试其他几个算子的s8类型测试修改后的CMSIS-NN代码仓https://github.com/xusiwei/CMSIS-NN参考链接1.CMSIS-NN源码仓https://github.com/ARM-software/CMSIS-NN2.TFLM项目介绍页]https://tensorflow.google.cn/lite/microcontrollers/overview?hlzh-cn3.CMSIS-NN v6.0.0 Release Notehttps://github.com/ARM-software/CMSIS-NN/releases/tag/v6.0.04.Ruby下载页面https://www.ruby-lang.org/zh_cn/downloads/------------END------------单片机选项字节在IAR、CS、e²studio下的设置在1 GHz 主频单片机上部署AI模型10分钟在MCU上快速部署LWIP