搭配使用适用于微控制器和 Arduino 的 TensorFlow Lite 的 AI Magic Wand

1. 简介

构建内容

在此 Codelab 中,我们将学习使用 适用于微控制器的 TensorFlow LiteArduino Nano 33 BLE 上运行深度学习模型。用户将微控制器变成数字“魔杖”,挥动魔杖即可施展各种魔法。当用户移动魔杖时,这种复杂的多维传感器数据(人类无法理解)会作为输入传递给模型,模型会输出一个简单的分类,如果发生了几种移动中的一种,模型会提醒我们。

9208eb1207211349.gif

在微控制器上进行机器学习

机器学习可用于创建智能工具,让用户的生活更轻松,例如 Google 助理。但通常,这些体验需要大量计算或资源,包括强大的云服务器或桌面设备。不过,现在可以在微控制器等小型低功耗硬件上运行机器学习推断。

微控制器非常常见、便宜、能耗极低且非常可靠。它们是各种家用设备(例如电器、汽车和玩具)的一部分。事实上,每年生产大约 300 亿个由微控制器供电的设备。

1914a419dfacf0b5.jpeg

通过将机器学习引入尺寸极小的微控制器,我们可以提升生活中数十亿台设备的智能性,而无需依赖昂贵的硬件或可靠的互联网连接。不妨想象下这样一个世界:智能设备能根据您的日常安排自动调整,智能工业传感器能理解故障与正常操作之间的差异,还有神奇的玩具帮助孩子们通过有趣而愉悦的方式进行学习。

适用于微控制器的 TensorFlow Lite(软件)

864114d0c2b4c919.png

TensorFlow 是 Google 的开源机器学习框架,用于训练和运行模型。TensorFlow Lite 是一种软件框架,是 TensorFlow 的优化版本,旨在在手机等小型低功耗设备上运行 TensorFlow 模型。

适用于微控制器的 TensorFlow Lite 是一种软件框架,是 TensorFlow 的优化版本,旨在在微控制器等小型低功耗硬件上运行 TensorFlow 模型。它遵循这些嵌入式环境所需的限制条件,即二进制文件很小,不需要操作系统支持、任何标准 C/C++ 库或动态内存分配等。

Arduino Nano 33 BLE(硬件)

bcd452d4d660efa9.jpeg

Arduino 是一个用于构建电子项目的热门开源平台。它由以下部分组成:

  1. 一个物理可编程电路板(通常是微控制器),例如此 Codelab 中使用的 Arduino Nano 33 BLE。
  2. Arduino IDE(集成开发环境),用于将计算机代码写入物理板并上传到物理板的软件。

Arduino Nano 33 BLE 是一个基于微控制器的平台:一个单电路板上的小型计算机。它具有处理器、内存和 I/O 硬件,可用于向其他设备发送和接收数字信号。与计算机不同,微控制器功能不强大,通常不运行操作系统。相反,它们具有小型处理器、内存不多,并且您编写的程序直接在硬件上运行。但由于它们的设计尽可能简单,因此微控制器能耗极低。

实践内容

  • 设置 Arduino Nano 33 BLE 微控制器并将其变成数字“魔杖”
  • 设置 Arduino IDE 并安装必需的库
  • 将程序部署到设备
  • 挥动魔杖施展各种魔法并查看预测结果

所需条件

  • Linux、MacOS 或 Windows 笔记本电脑
  • Arduino Nano BLE Sense 33(无标头)
  • Micro USB 数据线(如果您使用的是 USB-C 笔记本电脑,请改用 USB-C 转 Micro USB 数据线)
  • (可选)棍子,大约 30 厘米(12 英寸)长
  • (可选)胶带

2. 设置 Arduino 微控制器

拆开 Arduino 的包装

从包装盒中取出,然后将其从包装泡沫中取出。它是导电的,否则可能会导致问题!

6ed84a651c871a58.jpeg

将其插入笔记本电脑

  • 将 MicroUSB 数据线插入芯片中的插座。
  • 将数据线的另一端插入笔记本电脑上的 USB 插座。
  • Arduino 上的左下角 LED(下图中的左上角)应亮起。

c6936696f9659104.jpeg

熟悉工作流

99852afbed7e78b0.png

如上图所示,Arduino 上的 TFLite 解释器会定期对模型运行推断。该模型使用经过处理的加速度计数据作为输入,并输出一个预测结果,该预测结果会建议最有可能发生的手势。此外,系统会打印所需的输出,并且正确的 LED 会亮起。

3. 设置 Arduino IDE

1. 下载 Arduino IDE

为了将程序部署到 Arduino 微控制器,我们使用 Arduino IDE。

下载后,点击图标如下所示的应用,安装并打开 Arduino IDE: 75717f13527f36b9.png

初始着陆页将打开,如下所示:

933c91e6e1997c61.png

**2. 设置 Board Manager

  1. 在 Arduino 菜单中,依次选择 Tools -> Board: "Arduino .." —> Boards Manager
  2. 搜索 "Arduino Nano 33 BLE" 并安装 Arduino nRF528x Boards (Mbed OS)。这将确保 Arduino Nano 33 BLE 微控制器受 Arduino IDE 支持。817c63346152eda9.png
  1. 在 Arduino 菜单中,依次选择 Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

9357691e1a1348eb.png

  1. 最后,在 IDE 的右下角验证您选择的板是否为“Arduino Nano 33 BLE”。

aa08706bb84fa9b2.png

3. 设置端口

在 Arduino 菜单中,依次选择 Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE)。您应该会看到如下所示的内容:

8c25990d0c6fb6f8.png

4. 检查板连接

在 Arduino 菜单中,选择 Tools -> Get Board Info。您应该会看到如下所示的内容:

ccd8f5305be6cf59.png

4. 安装库

1. TensorFlow Arduino 库

此库包含适用于微控制器的 TensorFlow Lite 的所有示例,其中包括此 Codelab 所需的魔杖源代码。

  1. 在 Arduino 菜单中,依次选择 Sketch -> Include Library -> Add .ZIP Library...
  2. 添加您下载的 TensorFlow Arduino 库 .zip

**2. LSM9DS1 Arduino 库

借助此库,您可以从 Arduino Nano 33 BLE Sense 上的 LSM9DS1 IMU 读取加速度计、磁力计和陀螺仪值。

  1. 在 Arduino 菜单中,依次选择 Sketch -> Include -> Manage Libraries...
  2. 搜索并安装 "Arduino_LSM9DS1"ac2f78a737c5f233.png

5. 加载并构建示例

1. 加载示例

在 Arduino 菜单中,依次选择 File -> Examples -> Arduino_TensorFlowLite -> magic_wand 以加载示例代码。

de349f2d3cb49b98.png

这将加载魔杖源代码。

cda8c35a597b0798.png

**2. 构建示例

点击草图窗口中的 Upload 按钮。

71cb1474d5e14669.png

几分钟后,您应该会看到红色文本,表明刷写已完成。上传期间,右侧 LED 应闪烁,然后在结束时熄灭。

3df1d0858c6e40a4.png

6. 演示

魔杖目前可以检测到 3 种手势,如下所示:99a607da66af9fc8.png

  1. Wing:从左上角开始,仔细描绘字母“W”两秒钟。
  2. Ring:直立开始,将魔杖顺时针旋转一秒钟。
  3. Slope:首先将魔杖向上握住,LED 朝向您。将魔杖以向左倾斜的角度向下移动,然后水平向右移动一秒钟。

下图演示了两种手势。首先是 Slope,然后是 Wing(以此作为演示的参考)。

9208eb1207211349.gif

如需运行演示,请按照以下说明操作:

  1. 插入 USB 后,在 Arduino 菜单中选择 Tools -> Serial Monitor。它最初会打开一个空白屏幕,没有任何输出。

38e8d53652eb28f2.png

  1. 移动 Arduino 微控制器,仔细描绘上述每个形状,看看串行监视器是否检测到手势。

60b8a0017bcae419.png

  1. 从串行监视器中的输出中,我们注意到魔杖确实检测到了所有形状!您还会注意到右侧 LED 亮起。

7. 后续步骤

恭喜,您已成功在 Arduino 微控制器上构建了第一个手势识别“魔杖”!

希望您喜欢这篇关于使用适用于微控制器的 TensorFlow Lite 进行开发的简要介绍。在微控制器上进行深度学习的想法既新颖又令人兴奋,我们鼓励您去尝试一下!

参考文档

647c3ef0dc103804.png

谢谢,祝您构建愉快!