随着人工智能(AI)技术的普及和微控制器(MCU)性能的不断提升,在资源受限的嵌入式设备上运行神经网络算法已成为现实。本文将以搭载ARM Cortex-M85内核的瑞萨RA8单片机(VisionBoard开发板)为例,详细介绍如何将最新版的CMSIS-NN V6.0.0神经网络库移植到RT-Thread操作系统中。
CMSIS-NN简介
CMSIS-NN是Arm官方提供的一套高效的神经网络内核库。其设计目标是为Arm Cortex-M系列处理器提供优化的神经网络计算函数,旨在最大限度地提升性能并减少内存占用。
该库本质上是一个计算中间层,向上提供了统一的神经网络算子接口,内部则根据处理器能力实现了纯CPU、DSP指令集以及MVE(M-profile Vector Extension,M核向量扩展)等多种加速方案。这有效屏蔽了底层硬件差异,降低了在嵌入式设备上进行人工智能应用开发的难度。
为何选择CMSIS-NN v6.0.0?
- 核心特性:专为Cortex-M处理器设计,提供高性能、低内存占用的神经网络计算函数。
- 硬件匹配:该版本加强了对MVE指令集的支持,而MVE正是Cortex-M85内核的重要特性。瑞萨RA8D1芯片的CPU核心恰好是Cortex-M85,因此能充分发挥硬件加速潜力。
- 生态兼容:CMSIS-NN可作为TensorFlow Lite for Microcontrollers (TFLM)的后端,方便集成更上层的AI框架。
- 新功能:v6.0.0版本引入了对int4数据类型的MVE支持、LSTM算子的重构以对齐TFLM、以及对分组卷积、转置卷积等算子的增强,详情可参阅文末的Release Note链接。
移植步骤详解
1. 创建RT-Thread项目
使用RT-Thread Studio创建一个基于VisionBoard开发板的模板项目。此过程较为常规,此处不再展开。
2. 添加CMSIS-NN源码
在项目的packages目录下手动下载CMSIS-NN v6.0.0版本的源代码。
3. 修改项目配置
在项目根目录的Kconfig文件中添加CMSIS-NN包的配置选项。注意: 修改后需确保文件末尾保留一个空行,否则可能导致menuconfig命令报错。
检查packages目录下是否存在SConscript文件,并确保其内容正确,用于将软件包加入构建系统。若无则需手动创建。
4. 配置CMSIS-NN包
在CMSIS-NN源码目录的顶层创建SConscript和Kconfig文件。
SConscript:用于编译CMSIS-NN库源文件。
Kconfig:提供菜单配置选项,允许用户选择是否编译该库及其单元测试。
5. 编译验证
完成上述修改后,在命令行中执行scons命令编译整个项目。编译输出的最后部分应显示成功生成了CMSIS-NN的相关库文件,表明库的移植已初步成功。
单元测试与验证
CMSIS-NN库自带了一套完善的单元测试,位于Tests/UnitTest目录。为了在RT-Thread环境中运行这些测试,需要进行适配。
1. 修改测试框架
原始的测试脚本会为每个用例生成独立的main函数,适用于在模拟器上运行。我们需要将其修改为注册为RT-Thread的Finsh命令,以便通过串口命令行交互式测试。
主要修改unittest_targets.py脚本,使其能够:
- 指定生成非
main的入口函数名。
- 生成注册Finsh命令的代码模板。
- 生成适配RT-Thread构建系统(
SCons)的编译脚本。
修改完成后,执行以下命令生成RT-Thread平台的测试代码:
python unittest_targets.py --download-and-generate-test-runners --target ARMCM85 --toolchain AC6 --rtthread
2. 集成测试到构建系统
在CMSIS-NN/Tests和CMSIS-NN/Tests/UnitTest目录下分别创建SConscript文件,将生成的测试用例源代码纳入项目编译。
3. 解决链接问题
将所有测试用例链接到一个工程中时,会遇到重复的函数和全局变量定义错误。通过创建两个Shell脚本进行批量修复:
fix_testCode.sh:为setUp、tearDown等函数添加weak弱属性修饰。
fix_testData.sh:为所有测试数据数组添加static静态存储修饰符。
执行脚本后重新编译,即可解决链接错误。
4. 运行测试
编译成功后,将固件下载到VisionBoard开发板。在串口终端中输入help命令,可以看到所有已注册的神经网络算子测试命令。
例如,输入avgpool_s8命令即可运行平均池化算子的int8类型测试。通过逐一执行这些命令,可以验证CMSIS-NN库中各个算子在真实硬件上的功能正确性。
参考资源
- CMSIS-NN官方源码仓库
- TensorFlow Lite for Microcontrollers
- CMSIS-NN v6.0.0 Release Note
- 本文修改后的代码仓库:
https://github.com/xusiwei/CMSIS-NN (供参考)
通过以上步骤,我们成功在瑞萨RA8这款高性能嵌入式单片机上搭建了CMSIS-NN神经网络加速库的运行环境,为后续部署复杂的AI模型奠定了基础。