Enable light intelligence by using machine learning on MCUs
作者/宋岩 恩智浦(我国)办理有限公司 MCU高档体系工程师 (北 京 100022)
摘要:扼要探讨了人工智能的首要完结办法——机器学习,尤其是深度学习运用于MCU的可行性与特征。结合自己的实践,介绍了在这类资源受限的渠道上建模的要害、作业流程、配套东西、优化办法,以及实践的比方。笔者以为,在智能物联年代,也便是AIoT年代的蓬勃开展下,机器学习与MCU都在飞速开展,它们的有机结合会日积月累,大放异彩。
要害词:MCU;机器学习;边际;智能
虽然在如今的出产日子中,以机器学习和深度学习为主力的人工智能运用已无处不在,可是承载的核算渠道绝大多数是具有加快器的服务器、PC,以及智能手机,而在微操控器(MCU)等级的渠道上的运用却屈指可数。究其原因,传统MCU的定位使其在算力和存储资源上绰绰有余,硬件的约束也导致运用深度学习所需的配套软件和东西几近为0。
但近年来MCU的资源有着日新月异地开展,有代表性的是NXP的i.MX RT1060系列,运用高达600 MHz而且带DSP扩展的Cortex-M7内核,理论整数算力已达1.2 GOPS;片内有1 MB快速内存而且可扩展,已能担任相当多的机器学习运用。
一同,因为MCU具有价格低,实时性强等本身的特征,根据MCU的机器学习也要与MCU的运用结合才干相辅相成,一般来说,“轻”是最明显的特征。在这样的布景下,笔者探索和实践了在MCU上怎么运用深度学习,撰文以共享和总结相关的作业。
1 在MCU上布置机器学习
1.1 物联网环境下的智能运用散布
在智能物联环境下,嵌入式体系一般坐落网络的边际,因而在嵌入式体系中的智能也常常被称为边际轻智能。不过,嵌入式体系也是一个很广泛的概念,其智能运用在边际上的散布也各有特征,如图1所示。
最边际的是IoT节点与离线节点——也便是传统的嵌入式体系,它们一般运用MCU、DSP以及低功耗的MPU,运转最轻量级的智能模型,能够永久在线。假如坐落更杂乱体系的前级处理,则完结开始的核算,视状况决议是否唤醒主体系。
另一类可称为富功用节点与边际门户,它们运用愈加微弱的处理器,或者是带机器学习IP的MCU,能运转愈加大型的模型,并常常作为IoT网关。关于杂乱度很高的问题,比方语音辨认,依然能调用云端服务来完结。
近年来,以i.MX RT (600 MHz) 和STM32H7 (400MHz)等为代表的高装备MCU逐步丰厚,含糊了节点与门户的边界,使得产品规划得以愈加一脉相承,而且能让开发者以MCU简略易用的办法上手。
1.2 MCU上机器学习运用的特征
MCU着重下降功耗、节约本钱、加快上市,以及实时呼应。所以在MCU上一般都要精简AI模型,在精度与算力上合理取舍,改善已有算法的功用。在一些分级呼应的大型体系中,能够发挥MCU低功耗的优势,在本地跑轻量级的AI模型,担任永久在线的前级处理。例如 ,语音辨认体系的唤醒词检测就能够由MCU来完结。又如,物体辨认体系能够先由MCU快速处理,遇到辨认困难时再唤醒主体系来断定。
下面列举了一些合适MCU上布置的AI,为嵌入式体系特点加成的常见场景:
在强化图画分类功用方面,可用于智能电器、出产线次品检测、智能家居;
在强化音频分类功用方面,首要用于辨认口令要害字;在工业运用方面,可改善电机与传动、电源转化,以及自动操控算法;MCU上AI还合适做反常检测,判别部件损坏、进程稳定性、反常状况的产生。
1.3 MCU上机器学习运用的难点
虽然MCU上的AI运用有自己的特征,但现在普及率还比较低。首要的难点便是算力弱,较专业的AI加快器可有成百上千倍的距离。拿AI模型常常需求的乘累加操作功用为例,即使是现在功用最高的MCU,i.MXRT1050/60主频为600 MHz,其M7内核单周期能处理2个16位整数乘累加,其int16算力也只要1.2 GOPS,而现在的AI加快器动辄便是1 TOPS以上的算力。
因而,咱们首要选用先进的模型结构,并慎重合理地精简模型规划,合作高度优化的底层代码,往后还要结合器材的特征充分利用异构多核算单元。其次,MCU上短少建模东西,这方面咱们能够凭借PC/服务器上的建模软件来建模与练习。再次,MCU上短少集成和布置东西,这方面咱们“自己着手,锦衣玉食”,下文会具体陈述具体的作业。终究,MCU上短少规范运转环境。这方面,咱们经过把模型转化成C代码以及开发履行引擎的办法来填补空白。
1.4 布置机器学习模型的进程
MCU的弱算力决议了一般不合适练习模型。因而,整个作业分为在PC端的部分和设备端的部分(如图2)。在PC端要完结建模与练习、模型的转化与量化,以及模型布置的上位机作业,比方把模型与工程兼并,以及模型数据的下载等。在设备端则要完结模型布置的下位机部分,首要是把AI模型与其它模块对接,收集模型输入数据并运转模型。
这儿再具体介绍一下模型的布置,这也是衔接2个国际的要害环节。关于在上位机上练习好的模型,一个要害的过程便是转化与量化。这是要根据方针核算渠道的硬件和软件接口,把模型做格局的转化、量化(参数由浮点转成整数),并对接到方针渠道上的NN库或履行引擎的API,生成能够布置的办法,如图3所示。
首要有两种办法。
第一种是生成与模型相对应的C/C++代码,它们包括练习出来的权重——用数组表明;模型各层的界说——用宏界说表明;以及模型所履行的操作——包装成一个函数,由它来把模型操作映射成对方针渠道NN库API的调用。这样,模型就直接化成了C/C++工程的一部分,一同编译链接到固件中了。这样做的优势是深度整合,功率高、代码小;但进行模型修正的一同需求从头生成固件,十分呆板,比较合适较单一的体系。
另一种是在方针渠道上运转通用的模型履行引擎——也叫Inference Engine (IE)。IE接纳模型的操作与参数,并调用方针渠道NN库中对应的API。而转化东西则把模型的参数和结构转化成IE能辨认的办法,再由IE来贯彻履行模型的操作。这样,模型化成了一个文件或者是结构体实例。体系需求调用IE并把模型文件作为数据送给它,由IE解析和履行模型指定的操作。这样,明显愈加灵敏,模块化。能够存储多个模型文件,改模型无需从头生成固件,仅仅要承当IE的资源开支,在功用与体积上有所放弃。
不管哪一种,神经网络底层库都是要害的一环。在ARM Cortex-M系列MCU上,CMSIS-NN扮演这个人物,而且针对DSP和SIMD指令集高度优化,和基线的规范C完结比较功用进步可达4.5倍。不过它仅供给了神经网络操作的API,需求另行生成上层代码或供给履行引擎才干运用,别的对神经网络建模办法的支撑略有缺乏。而谷歌的TensorFlow-Lite自带的NN库则支撑更丰厚的神经网络构建块与衔接办法,而且是通用的,可是并没有针对Cortex-M优化,功用远远不如CMSIS-NN。
现在笔者完结了把Keras模型转化成调用CMSIS-NN的C代码以及对应的权重表,得以充分发挥CMSIS-NN在Cortex-M上高功用的长处。把生成的C源文件参加到现有的工程中,即可运用深度学习。
2 适用于MCU的深度学习建模办法
深度学习的根底是构建多层神经网络(NN)。神经网络作为深度学习的根底技能,模型表达才能强,尤其是长于处理非结构化的多媒体数据。关于开发者而言,神经网络比较很多机器学习算法,需求的数学根底更少,相对单纯,简略把握。这些终究使软硬件开发资源也最为丰厚。
建立合适在MCU端运用的神经网络十分简练,如图4所示:
一般只需求3种主运算和对主运算的3种后加工操作。运用这三种根本构建块而且恰当处理输出后,构成神经网络的一级运算,也称为一个层。每个层就犹如电路中的一个根本元件,按串联、并联、混联的办法建立在一同,就能组成强壮的神经网络。此外,在练习模型期间,还会参加一些辅佐运算,比方批正则化(batchnormalization)、随机丢掉(dropout)等,以进步练习功率。在把模型转化成可供布置的办法时,会去掉或兼并它们。
这其间,一般卷积层(CNN)是最“全能”的。在规划一个新的模型时,常常能够先用若干个卷积层提取特征,假如需求分类,尾部再追加一个全衔接层。假如MCU算力强壮或存储空间缺乏,能够把CNN拆分红逐通道卷积(DS-CNN)跟随一个 1×1 CNN,以在相同参数下获取更强的表达才能,或在相同表达才能下节约空间。反之关于算力较弱的MCU,则可恰当把CNN替换满足衔接层(FC),它们虽然参数多,但算力需求一般远远小于CNN。
前面说到的层层堆积的办法,好比是穿糖葫芦,它仅仅构建神经网络最常用最简略的一种,这是微型/小型网络的首选,已能应对大部分MCU上深度学习问题。假如把直筒结构稍加改造,使某层的输出还加到后续几层后,就能够轻松创立简略练习的更深的网络,能担任更杂乱的问题,如人脸辨认,以及分辩上百种以上的品种,像用于MobileNet和MobileFaceNet的反向残差衔接便是典型的实例。
前期的神经网络构建块中包括的参数较多,比方卷积核常用5×5,后边立异的结构常常把单个构建块化整为零成一个小型的子网络,既削减了参数又改善了功用。
虽然神经网络的结构很丰厚,但全体上看依然是直筒式的次序处理结构。在建立较深的神经网络时,一些片段常常重复出现,所以在规划网络时能够像宏界说一般预制复合结构,再串在一同,这样能够简化规划,而且灵敏多用。
根据以上建模办法,咱们在NXP i.MX RT1062上实践了多种模型,表1列出了典型的几种。
图5打开介绍了10项物体分类所运用的NN结构。
它是个小型直筒式结构,串了3个一般卷积层,以分级提取出1024个特征,再用一个全衔接层来分类。卷积层用于从输入的32×32 RGB图片平分3次提取出特征来,每过一层都经过池化来削减特征,这表现了早年一层精练更高档特征的思维。终究的全衔接层有十个输出,每个输出对应了各类物体中每个特征的重要程度。全衔接层的运算经过矩阵乘向量的办法出现,终究得到10个数,决议和每类物体的类似程度。整个网络一共有87.3 k个参数,对M7的乘累加算力需求约为13 MOPs。模型运用8位整数量化,在Cortex-M7上,还需求数据转移和8位转16位,在无内存拜访怠机的状况下,理论算力利用率约42%。在理论乘累加算力为1.2 GOPS的i.MX 1060上,按100% CPU时刻全额投入,每次运算需求约26 ms。
2.1 凭借CNN完结语音口令检测
咱们再看一下深度学习在话音口令要害词检测——简称KWS中的运用。为了重用图画处理的神经网络技能,常常先把时域信号切割变换成多个频谱,再拼接成一个灰度图画。鉴于这类图画经常出现比较长的水平线,在运用卷积网络时对卷积核的规划一般也选用较扁的矩形而不再是常见的正方形。趁便一提,另一种循环神经网络,简称RNN,在处理这种前后联络比较丰厚的事物时往往愈加称心如意,可是现在在MCU上还没有优化支撑,而在简略短口令的检测上,CNN系建模计划的功率也能比美RNN。
3 小结与未来展望
MCU本身的归纳才能和机器学习的优化会不断晋级。比方广泛用于MCU的ARM Cortex-M系列内核,先后参加了SIMD与DSP扩展,半精度浮点数,它们都有助于加快机器学习运用和进步功率;最新又发布的MVE(又称Helium)技能,参加了128位宽矢量运算才能,最高可为机器学习再提速15倍!根据开源RISC-V指令集扩展机器学习加快也正在异军突起。在内核周边,MCU在存储容量、主频,以及多种数据输入接口也在不断晋级,这一切为在MCU上布置更多更先进的智能运用供给坚实的支撑。
在根底软件方面,适用于MCU渠道的机器学习的库也已阅历了从无到有,现在正在从粗陋向完善开展。比方, CMSIS-NN现在还只支撑CNN、DS-CNN、FC层,往后可能会支撑多种RNN;另一方面,支撑多种传统机器学习算法的软件包也必定正在路上。
在生态上,MCU上图画分类、语音口令触发、反常检测这三大运用场景的相关的示例正在不断丰厚,模型转化与布置东西也在不断完善,往后用户会得到越来越多的参阅资源与开发东西。
硬件、软件和生态的开展,使MCU在工业、操控与物联传感领域中的智能化大显神通的一同,也会逐渐担任更多实时图画处理和语音数据智能运用。智能物联年代正滚滚而来,在功用安全(safety)与信息安全(security)的保证下,根据机器学习的边际轻型智能越发成为嵌入式体系发明新价值的要害,而MCU硬件和固件就义不容辞地成为了承载智能物联运用的主力军。
作者简介
宋岩 :MCU高档体系工程师,有近15年MCU与嵌入式体系从业经历,近期专心于微操控器在人工智能、机器视觉以及高档言语开发等方面的开发资源与运用。
本文来源于科技期刊《电子产品国际》2019年第5期第页,欢迎您写论文时引证,并注明出处