以前人们讨论谈人工智能时主要关注云计算 — 数据上传到云端,利用其强大计算能力得到结果。然而,云计算的前提是所有的数据都要传到云端,对带宽要求极高,可能到6G时代才能真正实现。
现在我们将人工智能转移到边缘端进行边缘计算。通常情况下,边缘计算是将算法放置到MCU中,传感器只输出数据,MCU运行独立算法。然后,现在我们将算法下沉放到传感器中,有两种不同的方案:
第一,基于MLC,采用rPU处理器进行重配置,能将部分算法(如决策树算法)运行于传感器中,再由传感器输出事件结果给MCU。这样就不需要MCU去处理运行全部算法。
第二,基于我们今天的主角ISPU,Intelligent Sensor Processing Unit,智能传感器处理单元。
ISPU不是传感器,只是嵌入在传感器IMU里面的功能模块。ISPU本质上是一种微型C语言可编程处理器,可在传感器内执行信号处理和AI算法,与常见开发工具兼容,相当于传感器中嵌入了一个DSP,可以运行类似MCU的算法。因此,它拥有更强大的功能,可以运行标准的C指令,支持信号处理和AI推理、机器学习和深度学习,甚至二进制神经网络,同时以µA级的功耗提供广泛的编程灵活性,让传感器的智能程度更进一步!
目前带ISPU的6轴惯性测量单元(IMU)有两种。面向复杂动作手势识别、事件检测和运动追踪等消费应用的LSM6DSO16IS,以及面向机器人、空调和资产追踪,预测性维护等边缘工业应用的ISM330IS。除了基本的IMU功能(如可配置陀螺仪量程,加速度量程,ODR数据,SPI/I2C接口),内部还集成了ISPU用于人工智能算法和处理超低功耗可编程核心,运行频率最高可达到10兆赫兹,配备32KB用于程序的RAM和8KB用于数据的RAM,总40KB内存,支持浮点运算及32位整数运算。
ST(意法半导体)的ISPU方案基于DSP架构。这种DSP面积很小,只有8K门;封装也很小,仅为3*2.5*0.83;支持浮点运算,同时也支持神经网络。基于32位的哈佛架构,最高主频可达10MHz,最大输出数据达到6.6KHz。
ISPU的优势很明显,首先在功耗方面,如果将传感器融合算法运行到ISPU中,5MHz功耗仅为200µA。但是,如果运行在Cortex-M0上,即使主频为4MHz,功耗也需要1300µA。可见,ISPU传感器融合的功耗是比M0低5倍。此外,由于ISPU是DSP直接集成在传感器中,可以直接获取类似加速度仪等传感器的处理数据,无需总线参与,从而降低系统的负载和功效。在104Hz频率下读取数据时,ISPU仅仅耗费1µA,而Cortex-M0在4MHz时就已经需要94.4个µA。
当ODR增大,ISPU运行速率加快时,功耗差距越大。例如,当883Hz去提取加速度数据时,ISPU功耗仅为7.5µA,而Context-M0为747µA,两者的差距已达百倍。当然,对于其他算法,如倾角检测,排气检测,传感器融合,手腕倾斜(比如手表穿带的翻腕亮屏功能),ISPU的功耗也很低。
其次是ISPU的AI优势 — ISPU提供更多选择和更大自由的自学习方案:一方面,它可以支持机器学习,如决策树,Scikit-learn;另一方面,它也支持深度学习算法,如常见的QKeras、TensorFlow、ONNX等,同时,我们采用ISPU的编译器,将基于机器学习和深度学习算法模型进行编译,生成ISPU可运行的UCF配置文件,通过MCU将该配置文件写入ISPU,即可运行算法。这可以广泛应用于个人电子产品(如穿戴设备,头戴设备等)以及工业领域的事件监测等。
一、ISPU的运行原理
在LSM6DSO16IS/ISM330IS的IMU内部框架中,传感器hub可以通过I2C连接外部磁力计和气压计等设备。ISPU可以通过内部的IMU传感链直接读取外部的传感器(地磁或气压计)和内部的加速度、陀螺仪和温度数据。ISPU支持运行最多30个算法,但由于ISPU是单核,它以串型的方式运行,每一个算法都可以产生一个中断信号,通知主控发生的中断事件。
ISPU可以通过I2C与SPI与主控连接,同时通过多种寄存器跟主控交互。例如,如果主控需要配置参数,可以通过总线将参数写到ISPU的配置寄存器对ISPU进行配置,而标志寄存器可以通过总线实现主控和ISPU的数据交互。此外,ISPU输出数据寄存器可以在中断发生后将数据送出,告知MCU当前发生了什么事件。
二、ISPU开发流程
首先是基于ISPU代码进行编码,使用工具链将其编译成ISPU二进制文件。然后,将该ISPU二进制文件与传感器配置文件(configureTXT)传感器配置文件一起使用工具生成ISPU.h或者.UCF配置文件。将这些文件复制到MCU的应用程序代码中,加载ISPU程序并读取算法结果,使用ARM工具链进行编译,生成应用.bin文件,最后将应用.bin文件烧录到MCU中运行。
三、ISPU软件的开发工具有3种
1、基于命令行工具CLI
命令行主要在Windows下使用,通过CMD输入命令来实现编译工作。
采用这种方法,开发之前需要先安装ISPU编译工具链,并在Windows里安装make工具。然后可以基于我们提供ISPU模版开发Norm算法,修改传感器配置,通过json输出文件进行编译,再通过GUI连接板子并连上电脑,使能ISPU。
2、基于Eclipse的IDE
如STM32CubeIDE,可以编辑代码及编译ISPU程序。开发时需要先下载安装Eclipse插件,然后导入工程进行编译。
3、GUI
采用AlgoBuilder,无需编写代码,只需要在软件中拖拽不同模块进行连接,即可自动生成代码。用户需要先在ST官网上下载AlgoBuidler、STM32CubeIDE、STM32CubeProgrammer和Unico-GUI软件并安装,通过设置后即可实现零代码设计,基于模块固件编译和烧写以及调用Unicleo-GUI。