嵌入式电子+人工智能
在技术发展的历史上,技术先独立发展再相互融合以改变世界的例子比比皆是。原子能和喷气式发动机的融合催生了核动力航母,改变了20世纪大部分战争的形态。计算机和射频通信的融合产生了智能手机,同时也重新定义了我们与技术以及彼此之间的互动方式。今天,嵌入式电子和人工智能(AI)的融合正日益成为下一个具有颠覆性的技术组合。接下来我们就看一下这种融合的发展演变。
欢迎来到网络边缘
人工智能的概念最早出现在古希腊人的著作中,但直到20世纪上半叶,才开始将其作为一种实际技术进行开发。从根本上来说,人工智能让数字技术仿佛人脑一样,能够与模拟世界高效而快速地互动沟通。为了让人工智能在现实世界获得实际应用,比如在自动驾驶车辆中,那么在处理多个动态输入时,电子设备和物理世界之间的交互必须接近瞬时完成。值得庆幸的是,随着机器学习算法的发展,嵌入式电子系统也在不断进步。他们的联姻催生出了边缘计算的概念。
边缘计算将过去只有云端强大处理硬件才具备的处理能力,带给了位于物理-数字接口边缘的本地设备。再加上MCU和传感器等价格便宜而又性能强大的嵌入式组件的普及,最终在自动化领域掀起了一场规模、功能都史无前例的革命。
TensorFlow Lite:基于微型硬件的大型机器学习算法
TensorFlow是Google主导开发的一套开源软件库,使开发人员能够轻松地将复杂的数值计算算法和机器学习(ML)集成到他们的项目中(图1)。按照Google的说法,这些库为Python(所有平台上的Python 3.7+)和C语言提供稳定的应用程序编程接口(API)。此外,它们还为C++、Go、Java和JavaScript提供不保证向后兼容的API。针对Apple公司的Swift语言,它也提供了一个alpha版本。
TensorFlow为深度神经网络(DNN)的开发和利用提供了我们常说的端到端机器学习支持。DNN是机器学习的一种应用类型,特别擅长模式识别以及对象检测与分类。TensorFlow库支持机器学习过程的两个阶段,即训练和推断。其中第一阶段是深层神经网络的训练,这需要大量算力,通常由服务器级硬件和图形处理单元(GPU)提供。张量处理单元(TPU)则是最近开发的一种专用集成电路,用于支持这种训练。第二阶段是推断,即利用在现实世界中接受训练的DNN来回应新的输入:按照培训好的模型分析这些输入,并根据分析结果提出建议。这应该是嵌入式产品开发人员比较感兴趣的阶段。
适用于MCU的TensorFlow Lite(TensorFlow库的一个子集)专门用于在内存受限的设备上执行推断,大多数嵌入式系统应用中都存在这种设备。它不允许您训练新的网络,那仍然需要更高端的硬件。
实用为王:ML应用实例
在嵌入式系统上运行人工智能算法的目标,就是要比传统程序或面向对象的编程方法更高效地处理传感器收集的真实世界数据。也许在大家的意识中,最常见的使用案例是从传统汽车到具有自动辅助功能(如车道偏离警报和防撞系统)的汽车,再到无人驾驶汽车这个最终目标的发展历程。不过,深度学习还有其他一些不那么显眼的用例,虽然你不知道,但已经在使用了。智能手机中的语音识别或Amazon Alexa等虚拟助手均使用了深度学习算法。其他用例包括用于安防领域的面部检测和/或背景替换、去除绿幕、远程会议软件(如Zoom)等。
人工智能、神经网络和机器学习等术语有时候给人的印象就像科幻小说或行话。那么这些新兴技术的现实意义何在?
图2:使用AI,可以自动监测安全源来识别某些人(图源:Monopoly919 - stock.adobe.com)同时使用机器学习算法和联网设备(如物联网设备)带来的一个巨大优势就是,随着时间的推移,产品可以通过简单的OTA固件更新来集成新的或经过更好训练的模型。这意味着产品可以逐渐变得更加智能,并且不局限于制造时能够实现的功能,只要新的模型和固件不超出硬件的物理内存和处理能力即可。
图3:将TensorFlow模型转换为可在MCU等内存受限设备上使用的版本。(图源:NXP)工作流程
根据适用于MCU的TensorFlow Lite的说明文档,开发人员的工作流程可以分为五个关键步骤(图3),具体如下:
1、创建或获取一个TensorFlow模型
该模型必须足够小,以便在转换后适合目标设备,并且它只能使用支持的运算。如果要使用当前不支持的运算,可以提供自定义实现。
2、将模型转换为TensorFlow Lite FlatBuffer
使用TensorFlow Lite转换器将模型转换为标准TensorFlow Lite格式。您可能希望输出一个量化模型,因为这种模型的尺寸更小,执行效率更高。
3、将FlatBuffer转换为C位数组
模型保存在只读程序内存中,并以简单的C文件形式提供。可以使用标准工具将FlatBuffer转换为C位数组。
4、集成适用于MCU的TensorFlow Lite C++库
编写MCU代码来收集数据,使用C++库执行推断,然后使用结果。
5、部署到设备
编写程序并将其部署到您的设备。
选择与TensorFlow Lite库一起使用的兼容嵌入式平台时,开发人员应注意以下几点:
-
基于32位架构(如Arm Cortex-M处理器)和ESP32的系统。
-
它可以在内存仅有数十KB的系统上运行。
-
适用于MCU的TensorFlow Lite采用C++ 11编写。
-
适用于MCU的TensorFlow Lite可作为Arduino库提供。该框架还可以为其他开发环境(如Mbed)生成项目。
-
不需要操作系统支持、动态内存分配或任何C/C++标准库。
后续步骤
Google提供四个预先训练的模型作为示例,可用于在嵌入式平台上运行。只需稍做修改,就能在各种开发板上使用。这些示例包括:
1、Hello World
演示使用适用于MCU的TensorFlow Lite的必备基础知识。
2、Micro-Speech
用麦克风捕捉音频以检测单词“yes”和“no”。
3、Person Detection
用图像传感器捕捉摄像头数据,以检测是否有人。
4、Magic Wand
捕获加速度计数据以对三种不同的身体姿势进行分类。