1. 简介
构建内容
在此 Codelab 中,我们将学习如何使用适用于微控制器的 TensorFlow Lite 在 Arduino Nano 33 BLE 上运行深度学习模型。微控制器变身为数字“魔杖”通过挥舞和施放各种法术。当用户移动魔杖时,这一人类无法理解的复杂多维传感器数据会作为输入传递给模型,该模型输出一个简单的分类,当有多次动作发生时,它会提醒我们。
微控制器上的机器学习
机器学习技术可用于打造智能工具,让生活更轻松,就像 Google 助理一样。但通常情况下,这些体验需要大量的计算或资源,其中包括强大的云服务器或桌面设备。不过,现在可以在微小的低功耗硬件(例如微控制器)上运行机器学习推断。
微控制器极为常见、价格低廉、需要的能源非常少,并且非常可靠。是各种家用设备(Think 电器、汽车和玩具)的组成部分。事实上,每年生产大约 300 亿台微控制器驱动的设备。
通过将机器学习技术引入小型微控制器,我们可以提高日常使用的数十亿台设备的智能,而无需依赖昂贵的硬件或可靠的互联网连接。比如,有可以适应日常生活的智能电器、能够辨别问题和正常使用区别的智能工业传感器,以及可以帮助孩子以有趣和愉悦的方式学习的神奇玩具。
适用于微控制器的 TensorFlow Lite(软件)
TensorFlow 是 Google 的开源机器学习框架,用于训练和运行模型。TensorFlow Lite 是一个软件框架,它是 TensorFlow 的优化版本,旨在在手机等小型低功耗设备上运行 TensorFlow 模型。
适用于微控制器的 TensorFlow Lite 是一种软件框架,它是 TensorFlow 的优化版本,旨在在微型低功耗硬件(例如微控制器)上运行 TensorFlow 模型。它符合这些嵌入式环境中要求的约束条件,例如,它具有较小的二进制文件,不需要操作系统支持、任何标准 C/C++ 库或动态内存分配等。
Arduino Nano 33 BLE(硬件)
Arduino 是一个热门的开源平台,用于构建电子项目。其中包括:
- 一个物理可编程电路板(通常是微控制器),例如此 Codelab 中使用的 Arduino Nano 33 BLE。
- 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 数据线)
- (可选)棍子,约 12 英寸(长 30 厘米)
- (可选)粘性胶带
2. 设置 Arduino 微控制器
解压 Arduino
将其从包装盒中取出,然后从泡沫中取出。它具有导电性,否则可能会导致问题!
将其插入笔记本电脑
- 将 MicroUSB 线插入芯片中的插座。
- 将数据线的另一端插入笔记本电脑上的 USB 接口。
- Arduino 左下方的 LED 指示灯(下图中的左上方)应亮起。
熟悉工作流程
如上图所示,Arduino 上的 TFLite 解释器会定期在模型上运行推断。模型使用处理后的加速度计数据作为输入,并输出预测结果,建议最有可能发生的手势。此外,将输出所需的输出,并且正确的 LED 将亮起。
3. 设置 Arduino IDE
1. 下载 Arduino IDE
为了将程序部署到 Arduino 微控制器,我们使用 Arduino IDE。
下载后,点击图标如下所示的应用,安装并打开 Arduino IDE:
初始着陆页将打开,如下所示:
2. 设置 Board Manager
- 从 Arduino 菜单中,选择
Tools -> Board: "Arduino .." —> Boards Manager
- 搜索
"Arduino Nano 33 BLE"
并安装Arduino nRF528x Boards (Mbed OS)
。这将确保 Arduino IDE 支持我们的 Arduino Nano 33 BLE 微控制器。
- 从 Arduino 菜单中,选择
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"
- 最后,验证您选择的开发板是否为“Arduino Nano 33 BLE”。
3. 设置端口
从 Arduino 菜单中,选择 Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE)
。您应该会看到如下所示的内容:
4. 检查板级连接
从 Arduino 菜单中,选择 Tools -> Get Board Info
。您应该会看到如下所示的内容:
4. 安装库
1. TensorFlow Arduino 库
此库包含所有适用于微控制器的 TensorFlow Lite 示例,其中包括此 Codelab 所需的魔术棒源代码。
- 从 Arduino 菜单中,选择
Sketch -> Include Library -> Add .ZIP Library...
- 添加您下载的 TensorFlow Arduino 库
.zip
。
2. LSM9DS1 Arduino 库
借助该库,您可以在 Arduino Nano 33 BLE Sense 上从 LSM9DS1 IMU 中读取加速度计、磁力计和陀螺仪的值。
- 从 Arduino 菜单中,选择
Sketch -> Include -> Manage Libraries...
- 搜索并安装
"Arduino_LSM9DS1"
。
5. 加载和构建示例
1. 加载示例
从 Arduino 菜单中,选择 File -> Examples -> Arduino_TensorFlowLite -> magic_wand
以加载示例代码。
这将加载魔杖源代码。
2. 构建示例
点击素描窗口中的 Upload
按钮。
几分钟后,您应该会看到红色文本,表示闪烁已完成。上传过程中,右侧 LED 灯应闪烁,最后会变暗。
6. 演示
魔杖目前可以检测 3 种手势,如下所示:
- Wing:从左上角开始,仔细地画出字母“W”显示两秒钟
- 响铃:直立开始,沿顺时针圆圈移动指挥棒,持续 1 秒。
- 斜面:先朝上按住指挥棒,并将 LED 灯朝向您。向左斜坡向下移动指挥棒,然后向右水平向下移动一秒钟。
下图展示了两种手势。依次绘制斜坡和 Wing(可作为演示的参考)。
如需运行演示,请按照以下说明操作:
- 插入 USB 后,从 Arduino 菜单中选择
Tools -> Serial Monitor
。它最初将打开一个空白屏幕,没有输出。
- 移动 Arduino 微控制器,仔细跟踪上述每个形状,并查看串行监视器是否检测到手势。
- 从串行监视器的输出中,我们发现魔杖确实检测到了所有形状!您还会看到右侧 LED 指示灯亮起。
7. 后续步骤
恭喜,您已成功构建您的第一个手势识别“魔杖”!
我们希望您喜欢这个有关使用适用于微控制器的 TensorFlow Lite 进行开发的简要介绍。微控制器深度学习是一个令人兴奋的新概念,我们鼓励你去外面进行尝试!
参考文档
- 现在您已具备使用基本程序的经验,可以训练您自己的模型。
- 详细了解适用于微控制器的 TensorFlow Lite(网站、GitHub)。
- 尝试其他示例,并尝试在 Arduino 上运行(如果受支持)。
- 试用另一个 Codelab:使用 TensorFlow Lite 和 SparkFun Edge 在微控制器上构建 AI
- 请参阅 O'Reilly 出版的 TinyML:在 Arduino 和超低功耗微控制器上使用 TensorFlow 进行机器学习,其中介绍了微型设备上的机器学习,并详细介绍了几个有趣的项目。此 Codelab 基于本书第 11 章。
谢谢,祝您构建愉快!