嵌入式机器学习开发:从手势模型更新到TensorFlowLite深入解析
发布时间: 2025-08-15 00:01:23 订阅数: 5 


TinyML:在嵌入式设备上实现机器学习
### 嵌入式机器学习开发:从手势模型更新到TensorFlow Lite深入解析
#### 手势模型参数更新
在开发嵌入式机器学习应用时,若要更新手势识别模型,需要对相关代码进行一系列操作。首先,在 `accelerometer_handler.cc` 文件中的 `should_continuous_count` 数组里,要更新每个手势所需的连续预测次数。这个数值与完成该手势所需的时间相对应。例如,原始的 “wing” 手势需要连续计数 15 次,你可以据此估算新手势所需的时间,并更新数组中的对应值。你可以反复调整这些值,直至获得最可靠的性能。
具体操作步骤如下:
1. 打开 `accelerometer_handler.cc` 文件。
2. 找到 `should_continuous_count` 数组。
3. 根据新手势与 “wing” 手势的时间对比,更新数组中的值。
4. 不断测试和调整这些值,以达到最佳性能。
最后,还需更新 `output_handler.cc` 文件中的代码,确保能正确打印出新手势的名称。完成这些操作后,就可以构建代码并将其烧录到设备中。
#### 嵌入式机器学习回顾与学习资源推荐
嵌入式机器学习中的卷积模型是对时间序列数据进行分类的强大工具。通过之前的学习,你应该对嵌入式机器学习应用有了一定的了解,也明白了应用代码是如何与模型协同工作,从而理解周围世界的。在构建自己的项目时,你会逐渐积累一系列熟悉的模型,用于解决不同的问题。
如果你想深入学习如何构建自己的模型,以下是一些优质的学习资源:
- François Chollet 的《Deep Learning with Python》(Manning 出版)
- Aurélien Géron 的《Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition》(O’Reilly 出版)
- Deeplearning.ai 的深度学习专项课程和 TensorFlow 实践课程
- Udacity 的《Intro to TensorFlow for Deep Learning》课程
#### TensorFlow Lite for Microcontrollers 简介
接下来,我们深入了解一下 TensorFlow Lite for Microcontrollers,这是一个用于嵌入式设备的机器学习框架。为了更好地理解它,我们先来拆解一下这个名字。
##### TensorFlow
TensorFlow 是 Google 开发的开源机器学习库,其口号是 “An Open Source Machine Learning Framework for Everyone”。它于 2015 年首次向公众发布,自那以后,围绕该软件形成了一个庞大的外部社区,外部贡献者比 Google 内部的还要多。TensorFlow 主要针对 Linux、Windows 和 macOS 桌面及服务器平台,提供了大量用于在云端训练和部署模型的工具、示例和优化方案。它是 Google 内部用于驱动其产品的主要机器学习库,内部版本和公开版本的核心代码是相同的。
不过,TensorFlow 在设计时主要考虑的是在桌面环境中训练和运行模型,因此做了一些工程上的权衡。例如,为了降低延迟和增加功能,它牺牲了可执行文件的大小。在云服务器上,即使内存以千兆字节计量,存储空间以兆兆字节计量,几百兆字节的二进制文件也不是问题。此外,它在发布时的主要接口语言是 Python,这是一种在服务器上广泛使用的脚本语言。但这些权衡对于其他平台并不适用,比如在 Android 和 iPhone 设备上,即使给应用增加几兆字节的大小,也会显著降低下载量和用户满意度。
##### TensorFlow Lite
为了满足移动平台对更小尺寸的需求,Google 在 2017 年启动了 TensorFlow Lite 项目。这个库旨在让神经网络模型在移动设备上高效、轻松地运行。为了减小框架的大小和复杂度,它舍弃了一些在这些平台上不太常用的功能。例如,它不支持训练,仅支持对之前在云端平台训练好的模型进行推理。它也不支持 TensorFlow 主线版本中的所有数据类型(如 double),并且一些不太常用的操作(如 `tf.depth_to_space`)也不存在。你可以在 TensorFlow 网站上找到最新的兼容性信息。
作为这些权衡的回报,TensorFlow Lite 可以压缩到几百千字节以内,这使得它更容易集成到对大小有严格限制的应用中。它还针对 Arm Cortex - A 系列 CPU 进行了高度优化,并支持 Android 的神经网络 API 加速器和通过 OpenGL 支持 GPU。此外,它对网络的 8 位量化有很好的支持,由于模型可能有数百万个参数,从 32 位浮点数到 8 位整数的 75% 大小缩减本身就很有价值,而且还有专门的代码路径可以让推理在更小的数据类型上运行得更快。
##### TensorFlow Lite for Microcontrollers
尽管 TensorFlow Lite 被移动开发者广泛采用,但它的工程权衡并不能满足所有平台的需求。Google 团队发现,有很多 Google 内部和外部的产品可以从在嵌入式平台上构建机器学习功能中受益,但现有的 TensorFlow Lite 库无法在这些平台上使用,最大的限制就是二进制文件的大小。对于这些环境,即使几百千字节也太大了,它们需要一个能在 20 KB 或更小空间内运行的框架。而且,很多移动开发者认为理所当然的依赖项(如 C 标准库)在这些平台上并不存在,因此不能使用依赖这些库的代码。不过,很多需求还是相似的,推理是主要用例,量化网络对性能很重要,并且拥有一个简单到开发者可以探索和修改的代码库也是一个优先考虑的因素。
2018 年,Google 的一个团队(包括本书作者)开始尝试开发一个专门针对嵌入式平台的 TensorFlow Lite 版本。目标是尽可能重用移动项目中的代码、工具和文档,同时满足嵌入式环境的严格要求。为了确保构建的系统实用,团队专注于识别语音 “唤醒词” 这一实际用例,类似于商业语音界面中的 “Hey Google” 或 “Alexa”。通过这个端到端的示例,Google 努力确保设计的系统可用于生产系统。
#### TensorFlow Lite for Microcontrollers 的要求
Google 团队意识到,在嵌入式环境中运行代码会受到很多限制,因此为该库确定了一些关键要求:
|要求|说明|
|----|----|
|无操作系统依赖|机器学习模型本质上是一个数学
0
0