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

在微控制器上进行机器学习
机器学习可用于创建智能工具,让用户的生活更轻松,例如 Google 助理。但通常,这些体验需要大量计算或资源,包括强大的云服务器或桌面设备。不过,现在可以在微控制器等小型低功耗硬件上运行机器学习推断。
微控制器非常常见、便宜、能耗极低且非常可靠。它们是各种家用设备(例如电器、汽车和玩具)的一部分。事实上,每年生产大约 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 数据线)
- (可选)棍子,大约 30 厘米(12 英寸)长
- (可选)胶带
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 Nano 33 BLE 微控制器受 Arduino IDE 支持。
- 在 Arduino 菜单中,依次选择
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

- 最后,在 IDE 的右下角验证您选择的板是否为“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”两秒钟。
- Ring:直立开始,将魔杖顺时针旋转一秒钟。
- Slope:首先将魔杖向上握住,LED 朝向您。将魔杖以向左倾斜的角度向下移动,然后水平向右移动一秒钟。
下图演示了两种手势。首先是 Slope,然后是 Wing(以此作为演示的参考)。

如需运行演示,请按照以下说明操作:
- 插入 USB 后,在 Arduino 菜单中选择
Tools -> Serial Monitor。它最初会打开一个空白屏幕,没有任何输出。

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

- 从串行监视器中的输出中,我们注意到魔杖确实检测到了所有形状!您还会注意到右侧 LED 亮起。
7. 后续步骤
恭喜,您已成功在 Arduino 微控制器上构建了第一个手势识别“魔杖”!
希望您喜欢这篇关于使用适用于微控制器的 TensorFlow Lite 进行开发的简要介绍。在微控制器上进行深度学习的想法既新颖又令人兴奋,我们鼓励您去尝试一下!
参考文档
- 既然您已经有使用基本程序的经验,不妨训练自己的模型。
- 详细了解适用于微控制器的 TensorFlow Lite(网站、GitHub)。
- 尝试其他 示例,并在 Arduino 上运行它们(如果受支持)。
- 尝试其他 Codelab: 使用适用于微控制器的 TensorFlow Lite 和 SparkFun Edge 在微控制器上进行 AI
- 请参阅 O'Reilly 出版的 《TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers》 一书,该书介绍了在小型设备上进行机器学习,并介绍了几个有趣的项目。此 Codelab 基于本书的第 11 章。

谢谢,祝您构建愉快!