TensorFlow Lite for MCUs - 网络边缘的人工智能

描述

在技术发展的历史上,技术先独立发展再相互融合以改变世界的例子比比皆是。原子能和喷气式发动机的融合催生了核航空母舰,改变了20世纪大部分战争的形态。计算机和射频通信的融合产生了智能手机,同时也重新定义了我们与技术以及彼此之间的互动方式。今天,嵌入式电子和人工智能 (AI) 的融合正日益成为下一个具有颠覆性的技术组合。接下来我们就看一下这种融合的发展演变。

欢迎来到网络边缘

人工智能的概念最早出现在古希腊人的著作中,但直到20世纪上半叶,才开始将其作为一种实际技术进行开发。从根本上来说,AI使数字技术像人脑一样,能够与模拟世界有效互动、响应沟通。为了使AI在现实世界的应用具有实用性,比如自动驾驶车辆,在处理多个动态输入时,电子设备和物理世界之间的交互必须接近瞬时完成。值得庆幸的是,随着机器学习算法的发展,嵌入式电子系统也在不断进步。他们的联姻催生了边缘计算的概念。

边缘计算获得了过去只有云端强大的处理硬件才能实现的处理能力,并将这种能力带给了位于物理-数字接口边缘的本地设备。再加上微控制器和传感器等廉价而稳健的嵌入式组件的普及,给自动化领域,无论是规模上还是功能上都带来了一场革命。

TensorFlow Lite: 微型硬件上的大ML算法

TensorFlow是Google主导开发的一套开源软件库,使开发人员能够轻松地将复杂的数值计算算法和机器学习(ML)集成到他们的项目中(图1)。按照Google的说法,这些库为Python(所有平台上的Python 3.7+)和C提供稳定的应用程序编程接口,另外还提供没有向后兼容保证的C++、Go、Java 和JavaScript API。此外,还针对Apple公司的Swift语言提供了一个alpha版本。

嵌入式

图1:Google的TensorFlow Lite for Microcontrollers网站。(资料来源:Google)

TensorFlow为深度神经网络 (DNN) 的开发和利用提供了所谓的端到端机器学习支持。 DNN是ML的一种实现,它特别擅长模式识别以及对象检测与分类。TensorFlow库支持机器学习过程的两个阶段,即训练和推理。首先是深层神经网络的训练,这需要大量算力,通常由服务器级硬件和图形处理单元 (GPU) 提供。最近开发了被称为张量处理单元 (TPU) 的专用集成电路来支持这种训练。第二阶段是推理,即利用现实世界中经过训练的DNN来响应新的输入,按照培训好的模型分析这些输入,并根据分析结果提出建议。这应该是嵌入式产品开发人员比较感兴趣的阶段。

TensorFlow Lite for Microcontrollers(TensorFlow库的一个子集)专门用于在内存受限的设备上执行推理,大多数嵌入式系统应用中都存在这种设备。它不允许您训练新网络,这仍然需要较高端的硬件。

实用为王:ML应用实例

人工智能、神经网络和机器学习等术语可以看成是科幻小说或行话。那么这些新兴技术的现实意义何在?

运行在嵌入式系统上的AI算法的目标,是以比传统程序或面向对象的编程方法更高效的方式处理传感器收集的真实世界数据。也许在大家的意识中,最明显的使用案例是从传统汽车到具有自动辅助功能(如车道偏离警报和防撞系统)的汽车,再到无人驾驶汽车这个最终目标的发展历程。不过,深度学习还有其他一些不那么明显的用例,虽然你不知道,但已经在使用了。智能手机中的语音识别或Amazon Alexa等虚拟助手均使用了深度学习算法。其他用例包括用于安防领域的面部检测和/或背景替换、sans绿幕、远程会议软件(如Zoom)等。

同时使用机器学习算法和互联网连接的设备(如物联网设备)的一个巨大优势是,随着时间的推移,产品可以通过简单的无线固件更新来集成新的或经过更好训练的模型。这意味着产品可以逐渐变得更加智能,并且不局限于制造时可能实现的功能,只要新型号和固件不超出硬件的物理内存和处理能力即可。

嵌入式

图2:将TensorFlow模型转换为可在微控制器等内存受限设备上使用的版本。(资料来源:NXP)

工作流程

根据TensorFlow Lite for Microcontrollers的附带文档,开发人员的工作流程可以分为五个关键步骤(图2), 具体如下:

 

1.  创建或获取一个TensorFlow模型:该模型必须足够小,以便在转换后适合目标设备,并且它只能使用支持的运算。如果要使用当前不支持的运算,可以提供自定义实现。
2.  将模型转换为TensorFlow Lite FlatBuffer:您将使用TensorFlow Lite转换器将模型转换为标准TensorFlow Lite格式。您可能希望输出一个量化模型,因为这种模型的尺寸更小,执行效率更高。
3.  将FlatBuffer转换为C字节数组:模型保存在只读程序内存中,并以简单的C文件形式提供。可以使用标准工具将FlatBuffer转换为C字节数组。
4.  集成TensorFlow Lite for Microcontrollers C++库:编写微控制器代码来收集数据,使用C++库执行推理,然后使用结果。
5.  部署到设备:编写程序并将其部署到您的设备。

 

在选择与TensorFlow Lite库一起使用的兼容嵌入式平台时,开发人员应注意以下几点:

 

1.  基于32位架构(如Arm Cortex-M处理器)和ESP32的系统。
2.  它可以运行在内存大小达数十KB的系统上。
3.  TensorFlow Lite for Microcontrollers是用C++ 11编写的。
4.  TensorFlow Lite for Microcontrollers可作为Arduino库提供。该框架还可以为其他开发环境(如Mbed)生成项目。
5.  不需要操作系统支持、动态内存分配或任何C/C++标准库。

 

接下来的步骤

Google提供四个事先训练好的模型作为示例,可用于在嵌入式平台上运行。只需稍做修改,就能在各种开发板上使用。这些示例包括:

 

Hello World:演示使用TensorFlow Lite for Microcontrollers的必备基础知识。
Micro-Speech:用麦克风捕捉音频以检测单词“yes”和“no”。
Person Deflection:用图像传感器捕捉摄像头数据,以检测是否有人。
Magic Wand:捕获加速度计数据以对三种不同的手势进行分类。

 

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分