在上期中,咱们以“上帝视角”观察了把AI应用到MCU级平台上的全过程。
这其中非常关键的就是AI模型的转换与部署,它贯通了训练模型与使用模型的两个世界;并且有主要的2种方式,分别是把模型转换成对接平台底层库的代码,或者是在固件里安插一个执行引擎并把模型转换成对应的指令。
那么,它们大概长得什么样子呢?实话实说,小编这边确实把这两条道都趟过了,但还没有准备充分和大家见面,不过,至少今天可以先准备点见面礼吧。
图1. 模型部署框图
本系列前两期文章:
i.MX RT助您跨界AI ——1. 开篇大吉
i.MX RT助您跨界AI ——2. 集成AI模块到系统中
模型转代码
想必大家都了解程序的编译过程,而这个模型转代码就仿佛是对模型的“编译”。只是对模型编译后的结果是C源代码,对C源代码编译的结果是机器指令。
在Cortex-M平台上,Arm提供了专用于执行神经网络操作的底层库,名为CMSIS-NN,它向上提供了C语言的API接口,支持常见的普通卷积、空间与通道分离的卷积,以及全连接型运算,还支持与主运算配套使用的激活、向下采样等辅助操作。这5种“积木”块的有机组合,足以构建绝大多数深度神经网络模型。
对于CMSIS-NN,小编后面会专门在一个主题里和大家好好聊聊它,这可是个关键角色。
我们可以形象地把CMSIS-NN看成是一个特殊的CPU,它提供了上面5条指令,而模型则是源代码,模型转代码就是把模型“编译”成CMSIS-NN的“机器语言”。
不幸的是,现在还没有现成的“CMSIS-NN通用模型编译器”。小编正在遵从毛主席的教导:“自己动手,丰衣足食”,先做一个能自给自足的“编译器”,再整理个像模像样的工具奉献给大家。
目前的进度,是可以编译出CIFAR-10和另一个复杂些的MobileFaceNet(人脸识别),接下来还需要做些debugging。
除此以外,恩智浦的MCU常有一些创新,比如异构双核,比如DSP和协处理器,它们对于提高模型的运行性能是大有裨益的。与此同时,获取模型的输入需要驱动一些外设(如摄像头,如麦克风)并且对数据做一些预处理。如果代码生成工具能针对具体的使用场景和器件生成对应的部分,无疑能显著改进针对具体器件和应用的性能,这也是我们今后努力的方向。
模型转中间表达
如果说上面模型转代码仿佛是编译的方式,那么把模型转换成某个执行引擎的中间表达,就像是“解释”的方式,而这个执行引擎就是解释器。
解释器既可以调用CMSIS-NN来在Cortex-M平台上提高效率,也可以内置底层NN运算库来提高通用性。因为在MCU平台上运行DL模型还基本是块新大陆,现有的执行引擎还没有针对CMSIS-NN优化,只能使用内置的通用NN库。
执行引擎的一个代表,就是Google的Tensorflow-Lite(简称TF-Lite)。TF的大名想必早已如雷贯耳,但这个TF-Lite却不是一个简化版的TF,而只是一个执行引擎,最主要的就是它不带有训练模型的功能。
Google提供了名为“toco”的工具,用于把TF模型(pb格式的文件)转换成TF-Lite能解释的中间表达。在集成到MCU时,把转换后的文件展成C数组定义或者放在SD卡中,并且把TF-Lite编译链接进MCU端的固件,就可以使用它了。
在当前的实践中,小编和小伙伴们在一个改版的TF-Lite上试跑了人脸识别和关键词口令识别的例子。
示例集锦
前面在OpenMV上的演示虽然非常生动,但整体系统规模较大,包装得也更加黑盒。因此,我们又制作了轻量级的例子,更加白盒,便于大家从源代码的水平上一窥AI模型运行的细节。
关于OpenMV上的演示,请看:视频展示——让机器视觉在i.MX RT上起飞
目前,我们这边在物体识别、语音口令识别、人脸识别上做了一些实践,其中一些相对较为成熟的成功,我们制作成了示例,最近已经有了内部Alpha发行版,相信在不久的将来,就会和大家见面!
远景规划——在线AI模型市场
实际应用中,常常出现一台硬件要跑不同模型的情况。比如说,一个零件加工厂的老板,他接收很多客户的订单,要加工的零件形状也千奇百怪。但有一个不变的需求,就是尽量检测出次品。
基于OpenMV RT可以很容易地改造出以机器视觉技术为基础的零件检测器,但是如果要训练一个模型能识别所有可能的零件及次品,那显然是不切实际的。
倘若有这样一个模型市场,可以让加工厂像装手机app那般,安装和卸载检测特定零件次品的模型,与模型开发者合作共赢,那是多么利国利民啊!
要实现这个美好愿景,需要优化过的AI应用执行引擎、云端市场、以及“后装应用”机制。恩智浦作为耕耘AI-IoT已久的老兵,早已在基于Linux的MPU平台上实践了“EdgeScale”云服务,可以在支持EdgeScale服务的设备上,轻松部署个性化的功能和迁移应用。
尽管MCU平台与MPU + Linux有大相径庭的区别,在我们一家老小的不懈努力下,最近成功尝试了通过EdgeScale在MCU(i.MX RT)上集成更新OpenMV RT固件,并部署新的应用功能。未来,会实现不更新整体固件而只安装应用模型,并作为平台提供模型市场,为发展MCU在AI-IoT的生态而尽一臂之力!
图2. EdgeScale AI模型应用市场
总结
我得承认,这次小编更像在“画大饼”,并且又卖了不少新概念。好在这其中很多都已经有点样子了,不是只有ppt。
不想吊胃口,在接下来的连载中,小编就由表及里,由此及彼,渐渐把这张大饼给摊熟,以飨读者!
文章出处:恩智浦MCU加油站
|