TensorFlow 如何帮助 Edge Impulse 让嵌入式工程师更容易使用机器学习
2021 年 6 月 2 日

Daniel Situnayake,Edge Impulse TinyML 创始工程师发布。

运行我们世界的微控制器

无论您现在在哪里阅读本文——您的家、您的办公室,还是坐在汽车里——您很可能被微控制器包围着。它们是使我们现代世界充满活力的微型低功耗计算机:从智能手表和厨房电器到工业设备和公共交通。微控制器主要隐藏在其他产品内部,实际上是数量最多的计算机类型,2020 年出货量超过 280 亿台。

为所有这些设备提供动力的软件是由嵌入式软件工程师编写的。他们是业内最有才华、最注重细节的程序员,他们的任务是从微型、廉价的处理器中榨取每一滴效率。一个典型的中档微控制器——基于 Arm 的流行 Cortex-M4 架构——可能有一个以 64Mhz 运行的 32 位处理器,以及 256KB 的 RAM 和 1MB 的闪存用于存储程序。这并没有留出太多空间浪费。

由于微控制器直接与传感器和硬件接口,嵌入式工程师通常是信号处理和电气工程方面的专家——而且他们在其关注领域往往拥有丰富的领域知识。一位工程师可能是一位医疗应用中使用的利基传感器的专家,而另一位工程师可能专注于分析音频信号。

嵌入式机器学习

在过去几年中,已经开发了一套技术,使在如上所述的低功耗微控制器上运行小型、高度优化的机器学习模型成为可能。通过使用机器学习来解释传感器数据,嵌入式应用程序可以变得更智能、更快、更高效,做出自己的决定,而不是必须将数据流传输到云并等待响应。这个概念被称为嵌入式机器学习或 TinyML。

凭借其深厚的信号处理和领域专业知识,嵌入式工程师非常适合设计这一代新的智能应用程序。但是,嵌入式工程师往往拥有高度专业化的技能,并且使用与数据科学家和机器学习工程师喜欢的以 Python 为重的堆栈大相径庭的开发工具链。

期望领域专家重新培训为数据科学家,或者期望数据科学家学习使用微控制器所需的嵌入式开发技能是不合理的。相反,需要新一代工具,这些工具将允许那些拥有领域专业知识的人将他们的知识和见解作为机器学习模型捕获并将其部署到嵌入式设备——机器学习专家的帮助是可选的。

TinyML 开发过程类似于传统的机器学习工作流。它从收集、探索和评估数据集开始。接下来,特征工程采用复杂的数字信号处理形式,通常使用嵌入式工程师已经熟悉的算法。从数据中提取特征后,将训练和评估机器学习模型——重点关注其大小,以确保它适合微型微控制器并运行得足够快才能发挥作用。

在训练之后,对模型进行大小和效率优化。这通常涉及量化,降低模型权重的精度,使其占用更少的宝贵内存。模型准备就绪后,必须将其部署为 C++ 库(大多数嵌入式平台的首选语言),其中包含运行它所需的所有运算符内核。然后,嵌入式工程师可以编写和调整一个应用程序,该应用程序解释模型的输出并使用它来做出决策。

在整个过程中,重要的是仔细评估模型和应用程序,以确保它在现实环境中使用时按预期的方式运行。如果没有足够的监控和审查,就有可能创建看似表面上准确但暴露在现实世界数据中时会以有害方式失败的模型。

Edge Impulse 和 TensorFlow

Edge Impulse 团队创建了一套端到端工具,帮助嵌入式工程师和领域专家构建和测试机器学习应用程序。Edge Impulse 旨在与嵌入式工程师每天使用的工具完美集成,提供一个高级界面,用于将机器学习整合到项目中。

Edge Impulse 利用 TensorFlow 生态系统来训练、优化和将深度学习模型部署到嵌入式设备。虽然它是在非机器学习工程师的背景下设计的,但 Edge Impulse 背后的理念是,它应该是可以由机器学习专家扩展的,并且灵活到足以融入他们的见解和补充——从手动调整的模型架构和损失函数到自定义运算符内核。

这种可扩展性得益于 TensorFlow 生态系统,它提供了一套标准和集成点,专家可以使用它们进行自己的改进。

训练一个微型模型

此过程从训练开始。使用 Edge Impulse 的新手机器学习开发者可以使用旨在与嵌入式设备良好协作的预设深度学习模型架构库。例如,这个简单的卷积模型旨在用于对环境噪声进行分类

Neural network architecture

在幕后,Edge Impulse 使用 TensorFlow 的 Keras API 生成模型的 Python 实现。更有经验的开发者可以自定义深度学习网络的层,调整参数并添加反映底层 Keras 模型的新层。专家开发者可以访问直接在 UI 中编辑训练代码本身

code snippet

由于 Edge Impulse 使用 TensorFlow 库和 API,因此使用您自己的逻辑扩展内置训练代码非常简单。例如,tf.data.Dataset 类用于为训练和验证数据集提供一个高效的管道。此管道可以轻松扩展以添加转换,例如在以下屏幕截图中看到的来自图像分类项目的图像增强功能

code snippet

为了进行深入的实验,开发者可以下载一个包含运行其训练脚本所需的所有依赖项的 Jupyter Notebook。

Jupyter Notebook

任何使用 TensorFlow API 的自定义模型代码都与 Edge Impulse 托管的端到端管道无缝集成。训练在云端运行,训练后的模型会自动使用 TensorFlow 工具和 Edge Impulse 自己的开源技术相结合,针对嵌入式部署进行优化。

模型优化

量化是将深度学习模型部署到嵌入式设备时使用的最常见的优化形式。Edge Impulse 使用 TensorFlow 的模型优化工具包 来量化模型,将模型权重的精度从 float32 降低到 int8,对精度的影响最小。

使用 适用于微控制器的 TensorFlow Lite 以及仿真软件 Renode,Edge Impulse 为开发者提供了模型部署到目标嵌入式设备后的延迟和内存使用率的准确估计。这使得在数据集的不同切片中轻松确定量化等优化的影响

A comparison between int8 quantized and unoptimized versions of the same mode, showing the difference in performance and results.
相同模式的 int8 量化和未优化版本的比较,显示了性能和结果的差异。

为了最大限度地提高灵活性和与开发者现有工作流程的兼容性,训练后的模型可以多种格式下载。开发者可以选择将原始模型导出为 TensorFlow SavedModel,或者使用可移植的 TensorFlow Lite flatbuffer 格式下载几种优化后的模型

Download links for models serialized using TensorFlow’s SavedModel and TensorFlow Lite formats.
使用 TensorFlow 的 SavedModel 和 TensorFlow Lite 格式序列化模型的下载链接。

部署

模型经过训练和测试后,有多种方法可以将其部署到目标设备。嵌入式工程师大量使用 C++,因此标准选项是导出 C++ SDK:一个优化的源代码库,它实现了信号处理管道和深度学习模型。SDK 具有宽松的开源许可证,因此开发者可以在任何项目中使用它或与他人共享。

运行深度学习模型主要有两种选择,这两种选择都利用了 TensorFlow 技术。第一个是 Edge Impulse 的 EON 编译器,它是一个代码生成工具,将 TensorFlow Lite 模型转换为人类可读的 C++ 程序。

Enabling EON Compiler
启用 EON 编译器可以将内存使用量减少高达 50%,而不会影响模型精度。

EON 编译器使用适用于微控制器的 TensorFlow Lite 中实现的运算符内核,以一种高效的方式调用它们,不需要使用解释器。这可以节省高达 50% 的内存。它会自动应用适用于目标设备的任何可用优化内核,这意味着将根据需要使用 Arm 的 CMSIS-NN 等库。

一些项目受益于额外的灵活性。在这种情况下,开发者可以选择导出一个使用适用于微控制器的 TensorFlow Lite 解释器来运行模型的库。这对于希望尝试其特定硬件的自定义内核实现,或在已内置适用于微控制器的 TensorFlow Lite 的环境中工作的开发者来说非常有用。

除了 C++ SDK 之外,开发者还可以选择针对特定的环境。例如,TensorRT 库为英伟达 Jetson Nano 嵌入式 Linux 开发套件提供了优化的支持。这种互操作性得益于庞大的 TensorFlow 生态系统和开源社区,它们为众多平台和目标提供了工具。

TensorRT library
模型可以针对更广泛的 TensorFlow 生态系统中的目标进行优化和导出,例如英伟达 Jetson Nano。

启用新技术

TensorFlow 在深度学习框架中独树一帜,因为它拥有广泛、成熟且可扩展的技术集,用于训练和将模型部署到嵌入式设备。TensorFlow 格式(例如 TensorFlow Lite flatbuffer)已成为将深度学习模型引入边缘的公司的事实标准。

TensorFlow 生态系统一直是嵌入式机器学习发展的重要推动力,使 Edge Impulse 等公司能够将人工智能交付到正在构建下一代消费和工业技术的领域专家手中。

如果您想了解有关使用 Edge Impulse 和 TensorFlow 进行嵌入式机器学习的更多信息,有很多选择。请查看 Coursera 上的 嵌入式机器学习入门 课程,或者直接使用 入门 指南或 从音频识别声音 教程。您甚至可以查看 公开的 Edge Impulse 项目,只需单击一下即可克隆和自定义。

Daniel Situnayake

Edge Impulse 的创始 TinyML 工程师。

下一篇文章
How TensorFlow helps Edge Impulse make ML accessible to embedded engineers

发布者 Daniel SitunayakeEdge Impulse 的创始 TinyML 工程师。 运行我们世界的微控制器 无论您现在正在哪里阅读本文——您的家、您的办公室,还是坐在车辆中——您很可能被微控制器包围着。它们是驱动我们现代世界的小型、低功耗计算机:从智能手表和厨房用具到工业设备和公共交通…