0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

移植CMSIS-NN v6.0.0版本到VisionBoard

RT-Thread官方账号 2024-07-10 08:35 次阅读

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版本?

1

CMSIS-NN核心特性

总结一下官方的介绍,可以知道CMSIS-NN库的核心特性:

专为Cortex-M处理器开发;

神经网络计算函数;

最大化性能;

最小化内存占用

2

CMSIS-NN的硬件和软件支持

除此之外,CMSIS-NN库还有几点也是值得关注的:

支持DSP扩展的处理器,使用SIMD优化,例如Cortex-M4核;

支持ARM的Heilum技术的处理器,使用M核向量扩展(MVE,M-profile Vector Extension)进行优化,例如 Cortex-M55 或 Cortex-M85;

MVE扩展恰好是ARM Cortex-M85内置的;

VisionBoard主控芯片瑞萨RA8D1的CPU核正是ARM Cortex-M85;

CMSIS-NN可以作为TensorFlow Lite for Microcontroller的后端实现;

3

CMSIS-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到VisionBoard?

1

创建RT-Thread项目

RT-Thread Studio创建基于VisionBoard开发板的模板项目,过程比较简单,不再赘述。

2

添加CMSIS-NN源码

RT-Thread Studio创建基于VisionBoard开发板的模板项目后,

在packages目录手动下载CMSIS-NN v6.0.0版本:

533952b6-3e54-11ef-a655-92fbcf53809c.png

3

修改RT-Thread代码

修改项目顶层的Kconfig文件,添加如下代码行:

535eefd0-3e54-11ef-a655-92fbcf53809c.png

注意:Kconfig修改需要完需要保证最后有一行空行,否则menuconfig命令会报奇怪的错误。

检查packages目录内是否有SConsript文件,并且内容如下:

5374123e-3e54-11ef-a655-92fbcf53809c.png

如果没有,可以手动创建。

4

修改CMSIS-NN代码

CMSIS-NN目录顶层创建SConscript文件,内容如下:

538c6e06-3e54-11ef-a655-92fbcf53809c.png53b232a8-3e54-11ef-a655-92fbcf53809c.png53e0046c-3e54-11ef-a655-92fbcf53809c.png

创建Kconfig文件,内容如下:

53fb7e0e-3e54-11ef-a655-92fbcf53809c.png

5

编译RT-Thread项目

完成以上修改之后,已经可以编译CMSIS-NN库的代码了。

在命令行中执行如下命令,编译整个项目:

54ae5894-3e54-11ef-a655-92fbcf53809c.png

编译输出最后部分如下图所示:

54c50008-3e54-11ef-a655-92fbcf53809c.png

如何测试CMSIS-NN v6.0.0?

1

CMSIS-NN核心特性

CMSIS-NN库内部带有了单元测试,具体位于 Tests/UnitTest 子目录,其中 unittest_targets.py 脚本可以用于生成测试脚手架代码,使用方法如下:

54ea32e2-3e54-11ef-a655-92fbcf53809c.png

当前生成的代码是单独生成elf文件,并在ARM虚拟硬件(AVH)平台上运行的。

默认情况下,执行python unittest_targets.py —download-and-generate-test-runners命令,会为每个测试用例生成一个main函数,每个测试用例单独编译为一个elf文件,之后使用ARM虚拟硬件(AVH)执行elf进行测试。

为了能够生成在RT-Thread上运行的测试代码,需要修改部分测试脚本代码,实现将每个测试用例注册为一个独立的finsh命令,在串口命令行中交互测试。

具体修改的代码差异如下:

5505da74-3e54-11ef-a655-92fbcf53809c.png55269fb6-3e54-11ef-a655-92fbcf53809c.png554cd794-3e54-11ef-a655-92fbcf53809c.png

这段修改实现了:

调用unity的ruby脚本,传递main_name命令行参数,用于修改单元测试入口函数名称(不指定默认是main);

生成一个独立的RT-Thread finsh命令注册代码.c文件;

生成一个用于编译的SConscript代码文件;

另外,再结合上层目录的SConcsript包含所有子目录的SConscript,就可以实现将所有单元测试编译为finsh命令了。

修改完该脚本文件后,执行如下命令,生成RT-Thread平台测试代码:

5579459a-3e54-11ef-a655-92fbcf53809c.png

命令执行输出如下:

558aa650-3e54-11ef-a655-92fbcf53809c.png

2

测试代码的构建规则SConscript

然后需要在CMSIS-NN的Tests子目录内,添加SConscript文件:

55ad3ab2-3e54-11ef-a655-92fbcf53809c.png

这段SConscript的作用是,将子目录的SConscript脚本包含到整个项目的构建流程中去。

接着需要在CMSIS-NN的Tests/UnitTest子目录内,添加SConscript文件:

55c7f172-3e54-11ef-a655-92fbcf53809c.png

完成以上修改后,通过menuconfig打开 PKG_USING_CMSIS_NN_TESTS 配置项目,再次 scons 编译,就可以编译单元测试代码文件了。

3

解决链接失败问题

但是还会有一些编译错误,原因主要有:

原来的测试脚本为每个测试用例独立生成main函数,每个目录单独编译;

链接到一起时,会有大量重复的setUp/tearDown/resetTest/verifyTest函数定义;

原来的测试数据数组没有加static修饰,被重复include到多个.c文件;

链接到一起时,会有数组重复的数组定义

为了解决上述两类问题,分别创建两个脚本。

修复重复函数定义的 fix_testCode.sh:

55ed68bc-3e54-11ef-a655-92fbcf53809c.png

解决方法,所有 setUp/tearDown/resetTest/verifyTest 函数添加 weak 属性修饰;

修复重复数组定义的 fix_testData.sh:

560975de-3e54-11ef-a655-92fbcf53809c.png

解决方法,所有测试数据的数组添加static修饰。

分别执行上面两个脚本之后,再次编译,就没有编译错误了。

4

运行单元测试

顺利编译之后,下载固件:

561ba34e-3e54-11ef-a655-92fbcf53809c.png

运行后,在串口输入help命令可以看到:

56347568-3e54-11ef-a655-92fbcf53809c.png

输入命令,运行avgpool算子的测试:

564d885a-3e54-11ef-a655-92fbcf53809c.png

其他几个算子的s8类型测试:

5661f3e4-3e54-11ef-a655-92fbcf53809c.png56755c72-3e54-11ef-a655-92fbcf53809c.png56bb0de4-3e54-11ef-a655-92fbcf53809c.png56e61a84-3e54-11ef-a655-92fbcf53809c.png56f8cc24-3e54-11ef-a655-92fbcf53809c.png57143982-3e54-11ef-a655-92fbcf53809c.png572c7416-3e54-11ef-a655-92fbcf53809c.png5776a3ce-3e54-11ef-a655-92fbcf53809c.png57902290-3e54-11ef-a655-92fbcf53809c.png57a4727c-3e54-11ef-a655-92fbcf53809c.png57bca658-3e54-11ef-a655-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CMSIS
    +关注

    关注

    0

    文章

    39

    浏览量

    11823
  • 开发板
    +关注

    关注

    25

    文章

    4735

    浏览量

    95958
  • RT-Thread
    +关注

    关注

    31

    文章

    1234

    浏览量

    39346
收藏 人收藏

    评论

    相关推荐

    SPC5-Studio V6.0.0只能默认安装C盘是怎么回事?

    SPC5-Studio V6.0.0只能默认安装C盘?
    发表于 03-27 07:24

    [基于GD32F350RB的音频识别器] 3. CMSIS-NN神经网络配置解析

    cmsis-nn的函数和定义,对应建立层数和激活函数,构成图,导入训练输出的模型数据。最后,调试并运行。如果开发板具有摄像头,可以把摄像头的截图及时裁剪并输入计算图中,就可以得出对应数据。
    发表于 09-21 11:34

    CMSIS-NN神经网络内核助力微控制器效率提升

    自然会想到Arm Cortex-M系列处理器内核,那么如果您想要强化它的性能并且减少内存消耗,CMSIS-NN就是您最好的选择。基于CMSIS-NN内核的神经网络推理运算,对于运行时间/吞吐量将会有4.6X的提升,而对于能效将有4.9X的提升。
    发表于 07-23 08:08

    CMSIS-NN神经网络内核可以让微控制器效率提升5倍是真的吗?

    全新CMSIS-NN神经网络内核让微控制器效率提升5倍
    发表于 03-15 06:55

    DSP数字信号处理和CMSIS-NN神经网络教程

    之后,开启第2版DSP数字信号处理和CMSIS-NN神经网络教程,同步开启三代示波器。软件:1、开发板预装出厂程序,各种外设驱动包全做好了,可以检测全部硬件功能...
    发表于 08-04 06:59

    如何将TensorFlow Lite应用程序移植Arm Cortex-M55系统上

    设备上实现更高水平的机器学习和信号处理。MCU开发人员已经在使用开源库(如CMSIS-DSP、CMSIS-NN)和ML框架(如用于微控制器的TensorFlow Lite)将机器学习应用程序移植
    发表于 03-31 10:40

    详细说明将TensorFlow Lite的微控制器应用程序移植Arm Cortex-M55上的过程

    CMSIS-NN库与TensorFlow Lite for Microcontrollers的紧密集成,使得将ML工作负载移植新的Cortex-M设备的过程变得快捷,易于使用。˚F urthermore
    发表于 06-01 16:44

    AT32讲堂016 | AT32 MCU DSP使用案例和网络神经算法CMSIS-NN案例

    概述CMSIS DSP库移植AT32常用示例展示CMSIS NN with DSP注意:本文是基于AT32F403A的硬件条件,若使用者需
    发表于 08-16 19:40

    ARM Cortex-M系列芯片神经网络推理库CMSIS-NN详解

    1、ARM Cortex-M系列芯片神经网络推理库CMSIS-NN详解CMSIS-NN是用于ARM Cortex-M系列的芯片的神经网络推理库,用于低性能芯片/架构的神经网络部署
    发表于 08-19 16:06

    如何在SDKv2.12中选择正确的CMSIS文件夹?

    ./CMSISeiq 下的 CMSIS 似乎包含更新版本CMSIS-NN,但 Core 和 DSP 文件夹仅包含头文件。所以这个 CMSIS 与 SDK 根文件夹下的相比看起来不
    发表于 03-29 08:22

    CMSIS-NN版本转换Arm Cortex-M的神经网络:r0p0指南

    2. 概览 指南向您展示了如何将神经网络从任何框架转换成一个基于 Arm Cortex-M-M 装置的实施工具, 使用 Arm CMSIS- NN 库。 此教程用于不再支持的 CMSIS
    发表于 08-11 07:06

    求助,cmsis_RTOS v1版本怎么进临界?

    这个cmsis_RTOS v1版本怎么进临界? 难道是把所有任务挂起吗? V2 还可以锁内核
    发表于 11-02 06:15

    基于CMSIS-NN内核的神经网络推理运算 对运行时间/吞吐量和能效有显著提升

    想到Arm Cortex-M系列处理器内核,那么如果您想要强化它的性能并且减少内存消耗,CMSIS-NN就是您最好的选择。基于CMSIS-NN内核的神经网络推理运算,对于运行时间/吞吐量将会有4.6X的提升,而对于能效将有4.9X的提升。
    的头像 发表于 01-31 11:29 1.1w次阅读
    基于<b class='flag-5'>CMSIS-NN</b>内核的神经网络推理运算 对运行时间/吞吐量和能效有显著提升

    unc0ver 6.0.0版本或将支持iOS 14.3全设备越狱

    今日,unc0ver 6.0.0版本发布,添加了对iOS 12.4.9~12.5.1、iOS 13.5.1-13.7以及iOS 14.0-14.3的支持,只要是版本符合,那么全设备都可越狱,包括最新的A14处理器iPhone 1
    的头像 发表于 03-01 09:30 2252次阅读

    事隔五年之后,开启第2版DSP数字信号处理和CMSIS-NN神经网络教程,同步开启三代示波器,前50章发布(2021-11

    事隔五年之后,开启第2版DSP数字信号处理和CMSIS-NN神经网络教程,同步开启三代示波器,前50章发布(2021-11-02)
    发表于 11-26 10:36 0次下载
    事隔五年之后,开启第2版DSP数字信号处理和<b class='flag-5'>CMSIS-NN</b>神经网络教程,同步开启三代示波器,前50章发布(2021-11