在[Day 10] tinyML整合开发平台介绍有提到小型AI(tinyML)应用程序开发框架(Fig. 10-3)在推论函式库中可能会使用到CMSIS-NN,这是什麽?为什麽它能起到这重要的地位呢?接下来就帮大家简单介绍一下。
Arm CMSIS全名Common Microcontroller Software Interface Standard,顾名思义就是Arm为了让自家MCU (IP)能跨厂牌(如STM, NXP, 新唐、盛群等)、跨开发平台(MDK, Keil, IAR, eIQ, STM32CubeIDE, Arduino IDE等)、跨家族(Cortex-M0/M0+/M1/M3/M4/M7/M23/M33/M35P/M55/A5/A7/A9)所推出来的软件开发介面,减少使用者的学习曲线。它是一种硬体抽象层(Hardware Abstraction Layer, HAL)的概念,就是不直接驱动硬体而采间接驱动的程序写作概念,这样就可达成上位软件写作统一化的好处,类似使用OpenGL, OpenCL跨GPU开发绘图软件一样。
由Fig. 14-1图可看出CMSIS的基本架构,最下方为实际硬体,包括微处理器(CPU,暂存器、旗标等)、通讯周边(I2C, SPI, UART等)、特殊周边(如ADC, DAC, PWM等)及一些除错相关的硬体。中间层则负责硬体抽象描述,处理所有核心计算及周边信号处理。上一层则为进阶整合性功能,如即时作业系统、神经网路运算等,最後才是组合成完整的应用程序码。目前CMSIS可以支援的元件非常多,有6009项,其中Cortex-M4最多,占了39.1%,Cortex-M3次之,占25.6%,第三为Cortex-M0+,占14.9%,三者合计占79.6%。而支援的开发板高达441种,相关软件也多达682项,可见其普及性及便捷性。
Fig. 14-1 ARM CMSIS架构图。(OmniXRI整理制作, 2021/9/28)
Arm CMSIS为开源项目,主要组成元件(Components)如下所示。
透过前面章节及上图Fig.14-1可知,Arm Cortex-M4(F)是最适合用来开发tinyML的家族,因为它价格及性能在整个Cortex家族中间,相较M0/M0+/M3等低阶MCU配置有较多的程序码区(Flash)和随机记忆体(SRAM)可用来储放模型及参数,同时支援定点、浮点(FP16/FP32)及整数(INT8)运算,也支援单指令周期DSP及SIMD指令集,可让CMSIS-DSP数位信号处理(含高阶数学运算及机器学习常用统计算法)和CMSIS-NN神经网路函式库发挥更多功效。前面章节使用的Arduino Nano 33 BLE Sense开发板的主晶片内核正是Arm Cortex-M4F。
接下来就帮大家介绍一下CMSIS-DSP和CMSIS-NN的主要元件和功能。
早期8/16 bit MCU并没有浮点(少部份有定点)运算能力或硬体乘法器、除法器,基本上也不支援像矩阵计算这类高阶的运算,顶多是靠很多层的回圈、乘法及加法来完成。但遇到像数位信号处理时经常用到快速傅立叶转换(FFT)算法,需要大量乘加演算时,此时就只能依靠专用DSP处理器来完成。当Cortex-M3问世後,开始有了多周期的乘加一体(Multiply-Accumulate, MAC, y=ax+b)指令,到了Cortex-M4上市後,开始指供单周期的乘加及SIMD指令集(又称DSP指令集),至此,许多原来需要专用DSP处理器的工作就慢慢被取代了。但是一般程序设计师并没有强大的数学能力,更不懂如何有效地发挥MCU加速计算的能力,所以当遇到像马达控制、声音信号处理等应用时,还是会选择专用的DSP处理器。因此为了让程序设计师能更简单的开发DSP相关产品,於是CMSIS-DSP就此诞生。以下就简单介绍这个函式库提供的主要函式分类,更完整的内容可参考官网文件说明。对於偏属传统机器学习相关或信号预处理的tinyML应用,较会使用到这个部份的函式库。
CMSIS-DSP函式库相关函式:
在[Day 05] tinyML与卷积神经网路(CNN)时已帮大家介绍过卷积神经网路常见基本元素(如图Fig. 5-2),而这也是CMSIS-NN的主要元素。在[Day 10] tinyML整合开发平台介绍时(如图Fig. 10-3)也曾提及TensorFlow Lite for Microcontroller (TFLM) 会以CMSIS-NN函式库为基础来产出对应的程序码,方便MCU端可以执行。虽然CMSIS-NN也可运行在没有浮点运算及SIMD指令的Cortex-M0/M0+/M3 CPU上,但其执行效率会和M4以上家族差上数倍到数十倍(含CPU工作时脉速度提升)。
以CMSIS-NN函式库发展出的tinyML应用,包括有:
CMSIS-NN函式库相关函式:
Fig. 14-2 Arm CMSIS-NN函式库架构图。(OmniXRI整理绘制, 2021/9/28)
至於如何直接使用CMSIS-NN来开发CNN,可参考下列文章介绍,或者等後面章节再补充介绍。假若你不想这麽深入了解底层运作方式,那使用TFLM或其它tinyML云端一站式整合型开发平台即可。
参考连结
Arm Common Microcontroller Software Interface Standard (CMSIS)文件说明
Arm CMSIS-5 Github开源码
Arm Developer - Converting a Neural Network for Arm Cortex-M with CMSIS-NN
Arm Developer - Deploying a Caffe Model on OpenMV using CMSIS-NN
Arm Youtube - Image recognition on Arm Cortex-M with CMSIS-NN in 5 steps
Arm-Software ML-exsamples - CMSIS-NN CIFAR10 Example
Arm CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs
受朋友的挑战,也是对自己的考验与面对自己。同时也是自己对自己的坦白,通过铁人赛来测试自己。 比起是比...
前言 我们已经学会使用长条图来做资料探索。然而,Tableau Desktop 除了长条图外,还有其...
大家好,我是毛毛。ヾ(´∀ ˋ)ノ 废话不多说开始今天的解题Day~ 125. Valid Pali...
最坏情况为,BFPRT演算法 在由随机数决定阵列的分割的情况下,我们如何避免产生出最差情况(虽然出现...
本文内容 阅读有关 Angular 中有 ngFor 语法的笔记内容。 ngFor 在干嘛的? 它用...