65.9K
CodeProject 正在变化。 阅读更多。
Home

构建带云连接的语音启用智能家居 TinyML 解决方案

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (1投票)

2020年12月10日

CPOL

7分钟阅读

viewsIcon

6770

在本文中,我们将展示,可以从高层次上理解,在内存受限、超低功耗的终端设备上运行复杂的 AI 驱动应用程序是可能的。

嵌入式和物联网设备越来越能够执行复杂的处理和分析。我们将解释如何构建一个支持语音的智能助手,该助手可以控制常见的房间功能,例如灯光和供暖。我们的示例在运行 Arm Mbed OS 的 Arm Cortex-M 设备上使用 TensorFlow Lite for Microcontrollers。

人工智能不再是大型硬件独有的技术。微控制器的处理能力不断提升,以及可在终端设备上运行的新型机器学习模型的不断发展,使得在设备本身上进行深度学习推理成为可能。您现在可以在功耗仅为几十毫瓦的 Arm Cortex-M 设备上运行经过优化的机器学习模型。欢迎来到 Tiny Machine Learning:tinyML!

TinyML 源于开发超低功耗嵌入式系统的社区与专注于机器学习和数据科学的社区之间的合作。它提供了构建由设备端机器学习驱动的激动人心的新应用程序的方法。

这一新范式扩展了诸如 Arm Cortex-M 微控制器等低成本、高能效微控制器的功能,使它们变得“更智能”,同时提高了响应性、可靠性和隐私性。这些终端设备可以将从各种超低功耗传感器(例如用于语音或声音、视觉、环境、运动和健康监测的传感器)收集的数据与机器学习智能相结合,这些智能由 TensorFlow Lite for MicrocontrollersµTVM 等技术提供。

在本文中,我们将介绍一款智能家居设备的 tinyML 组件,该设备使用语音识别和云连接。我们将介绍一款微控制器,它

  • 使用板载麦克风监听周围环境
  • 使用板载机器学习模型推断命令
  • 据此执行指令

除了设备端的语音指令响应外,微控制器还可以利用云连接来传递信息,例如,关于传入数据中任何明显的异常情况,以便用户可以从远程位置对其进行操作。当供暖或照明长时间开启时,或者当系统知道用户通常不在家时,可能会发生这种情况。

tinyML 智能助手的构建模块

对于小型硬件,我们的示例使用了一个运行 Arm Mbed OS 的微控制器,该系统支持广泛的 Arm Cortex-M 设备。Mbed OS 是一个开源物联网操作系统,它体积小巧但功能齐全,在安全、ML、连接性以及传感器和 I/O 设备驱动程序方面都表现出色。

Mbed OS 提供了一个抽象层,允许您编写 C/C++ 应用程序并在任何支持 Mbed 的设备上运行。os.mbed.com 上有详细的说明,可以帮助您设置并使用 Mbed OS 的完整配置文件。

其优点在于,您可以先在任何合适的低成本开发板上进行开发,然后部署到生产硬件,而无需重写代码。对于本例,我们需要一个支持 TensorFlow Lite for Microcontrollers 的 Arm Mbed OS 设备。

一个很好的例子是 NXP FRDM K66F,它内置麦克风用于语音检测(以及额外的声音输入扩展)。它还通过以太网支持互联网连接,允许微控制器向云发送消息。

您可以在本地计算机上使用 Arm Mbed CLI 作为开发软件,使用 Arm Mbed OS 6 创建、导入和构建您的项目。安装后,该工具将 Mbed OS 源代码以及您的语音助手项目代码及其依赖项,并使用 Arm Compiler 或 GNU Arm Embedded Compiler (GCC) 进行编译。然后,您可以使用主板和开发机之间的 串行连接 将生成的二进制文件刷入主板。

嵌入式设备的 Tiny Machine Learning

对于 ML 组件,我们使用 TensorFlow Lite for Microcontrollers,它允许您在微控制器和其他设备上运行基本的机器学习模型。它是开源的,用 C++ 11 编写,并且可以在内存受限、低功耗的设备上部署,例如基于 Arm Cortex-M 处理器的设备,仅需几 KB 的内存。它之所以如此小巧,是因为它是为适应资源受限的设备而构建的。

TensorFlow Lite for Microcontrollers 目前支持多种设备,并提供 TensorFlow 操作的子集。对于 TensorFlow Lite 的设备端训练,您必须 在本地构建和训练模型,然后将其转换为更小的尺寸并使用 TensorFlow Lite 功能,之后再传输到设备。

此示例使用的 TensorFlow Lite 机器学习模型基于一个预训练模型,该模型可以从语音数据中识别两个关键字(“是”和“否”)。但是,您可以 重新训练模型 以识别来自 Google Speech Commands 数据集 的其他单词。

该模型由一个 多层卷积神经网络 组成,其中包括一个二维卷积层、一个全连接层或一个 MatMul 层(输出:logits)以及一个 softmax 层(输出:概率)。

请查看 Notebook 文件,了解如何在简单的语音识别中设置和训练模型,如何冻结它,以及如何将其转换为 TensorFlow Lite 模型。您需要进一步将其转换为 C 字节数组,该数组可以存储在设备上的只读程序内存中,然后由 TensorFlow Lite for Microcontrollers 加载和执行。

有关将 TensorFlow Lite for Microcontrollers 示例移植到最新的 Mbed OS 6 的进一步说明,请参阅 Mbed 指南,用于将 MicroSpeech 示例部署到 NXP K66 设备。您可以将此项目作为起点,然后集成其他代码以响应语音指令或将信息发送到云端。

将智能设备连接到云

该语音助手使用 WiFi 连接,以便微控制器可以向云发送数据,例如,它可以记录指令、操作和结果。此外,当传入数据不一致时,例如,当供暖或照明长时间开启时,或者当系统知道用户通常不在家时,它还可以向云发送信息。

Mbed OS 可以与 AWS IoT 进行接口,以管理设备网关和消息代理,该代理连接并处理微控制器和云之间的消息。

该助手与 AWS MQTT 代理进行接口,以便在云中发布和订阅消息。在您的原型代码中,您首先需要登录 AWS 账户,并使用 AWS IoT 控制台设置设备凭证和策略。然后,告知 Mbed OS 自定义端点名称,为您的设备命名,并设置一个 AWS 和您的设备都可以从中发布消息的主题。

请参阅 用于 AWS 云的 Mbed OS 示例,了解如何执行此操作的详细信息,并使用该示例作为起点来配置语音助手的连接解决方案。最后,您可以将示例项目文档中描述的必要 AWS 配置和连接支持添加到您为将 TensorFlow Lite 模型部署到设备而创建的 Mbed 项目中。

总结

如前所述,从高层次上看,在内存受限、超低功耗的终端设备上运行复杂的 AI 驱动应用程序是可能的。我们已经为您梳理了构建一个“始终开启”的低功耗语音助手所需的各个组件。该助手能够区分“开灯”等指令与环境背景噪音和其他语音。它能推断出正确的请求并执行它,或者在需要通知用户时发送消息到云端。

我们的 tinyML 示例使用了一个运行 Mbed OS 的 Arm Cortex-M 微控制器,采用了一个基础开发板进行原型开发,这些代码可以直接迁移到生产环境中,而无需重写。使用 Mbed OS 为开发和部署提供了抽象层,以及一个功能齐全的嵌入式 RTOS。Mbed OS 负责处理本示例中的许多用例,例如声音检测和 WiFi 连接。

推断语音命令的任务由预先训练好的机器学习模型完成。这项专业技术由 TensorFlow Lite for Microcontrollers 提供,让您可以在设备上运行一个成熟的机器学习平台。

了解更多

有许多资源可帮助您开始使用 Mbed OS 进行 tinyML 语音应用程序开发

© . All rights reserved.