TensorFlow Lite 微控制器
翻译 / TF 社区翻译组
导读:我们之前介绍了《机器学习的未来——微型化(一)&(二)》,很多小伙伴在后台留言表示很感兴趣并提出了一些问题。本文详细介绍了微控制器,欢迎对这方面感兴趣&有需求&想交流的小伙伴多跟我们交流~
TensorFlow Lite for Microcontrollers 是 TensorFlow Lite 的一个实验性移植版本,它适用于微控制器和其他一些仅有数千字节内存的设备。
它可以直接在“裸机”上运行,不需要操作系统支持、任何标准 C/C++ 库和动态内存分配。核心运行时 (core runtime) 在 Cortex M3 上运行时仅需 16KB,加上足以用来运行语音关键字检测模型的操作,也只需 22KB 的空间。
开始
要快速入门并运行 TensorFlow Lite for Microcontrollers,请阅读微控制器入门。
注:微控制器入门 链接
https://tensorflow.google.cn/lite/microcontrollers/get_started
为什么微控制器很重要
微控制器通常是小型、低能耗的计算设备,经常嵌入在只需要进行基本运算的硬件中,包括家用电器和物联网设备等。每年都有数十亿个微控制器被生产出来。
微控制器通常针对低能耗和小尺寸进行优化,但代价是降低了处理能力、内存和存储。一些微控制器具有用来优化机器学习任务性能的功能。
通过在微控制器上运行机器学习推断,开发人员可以在不依赖于网络连接的情况下将 AI 添加到各种各样的硬件设备中,这经常用来克服带宽、功率以及由它们所导致的高延迟而造成的约束。在设备上运行推断也可以帮助保护隐私,因为没有数据从设备中发送出去。
功能和组件
C++ API,其运行时 (runtime) 在 Cortex M3 上仅需 16KB
使用标准的 TensorFlow Lite FlatBuffer 架构 (schema)
为 Arduino、Keil 和 Mbed 等较为流行的嵌入式开发平台预生成的项目文件
针对多个嵌入式平台优化
演示口语热词检测的示例代码
开发工作流程
这是将 TensorFlow 模型部署到微控制器的过程:
创建或获取 TensorFlow 模型
该模型必须非常小,以便在转换后适合您的目标设备。它只能使用支持的操作。如果要使用当前不被支持的操作,可以提供自己的实现。将模型转换为 TensorFlow Lite FlatBuffer
您将使用 TensorFlow Lite 转换器来将模型转换为标准 TensorFlow Lite 格式。您可能希望输出量化模型,因为它们的尺寸更小、执行效率更高。将 FlatBuffer 转换为 C byte 数组
模型保存在只读程序存储器中,并以简单的 C 文件的形式提供。标准工具可用于将 FlatBuffer 转换为 C 数组。集成 TensorFlow Lite for Microcontrollers 的 C++ 库
编写微控制器代码以使用 C++ 库执行推断。部署到您的设备
构建程序并将其部署到您的设备。
注:构建和转换模型 链接
https://tensorflow.google.cn/lite/microcontrollers/build_convert#%E8%BD%AC%E6%8D%A2%E6%A8%A1%E5%9E%8B
理解 C++ 库 链接
https://tensorflow.google.cn/lite/microcontrollers/library
支持的平台
嵌入式软件开发的挑战之一是存在许多不同的体系结构、设备、操作系统和构建系统。我们的目标是尽可能多地支持流行的组合,并尽可能地让给其他设备添加支持变得简单。
如果您是产品开发人员,您可以下载我们提供的以下平台的构建说明或预生成的项目文件:
下载链接 参见“阅读原文”
如果您的设备尚未被支持,添加支持也许并不困难。您可以在 README.md 中了解该过程。
注:README.md 链接
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/experimental/micro/README.md#how-to-port-tensorflow-lite-micro-to-a-new-platform
可移植参考代码
如果您还没有考虑具体的的微控制器平台,或者只想在开始移植之前试用代码,最简单的方法是下载与平台无关的参考代码。
注:参考代码 链接
https://drive.google.com/open?id=1cawEQAkqquK_SO4crReDYqf_v7yAwOY8
归档中有很多文件夹,每个文件夹只包含构建一个二进制文件所需的源文件。每个文件夹都有一个简单的 Makefile 文件,您应该能够将文件加载到几乎任何 IDE 中并构建它们。我们还提供了已经设置好的 Visual Studio Code 项目文件,因此您可以轻松地在跨平台 IDE 中浏览代码。
注:Visual Studio Code 链接
https://code.visualstudio.com/
目标
我们的设计目标是使框架可读、易于修改、经过良好测试、易于集成,并通过一致的文件架构、解释器、API 和内核接口与 TensorFlow Lite 完全兼容。
您可以阅读更多在目标和权衡方面有关设计的信息。
注:目标和权衡 链接
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/experimental/micro#goals
限制
TensorFlow Lite for Microcontrollers 专为微控制器开发中的特殊限制而设计。如果您正在使用更强大的设备(例如像 Raspberry Pi 这样的嵌入式 Linux 设备),标准的 TensorFlow Lite 框架可能更容易集成。
应考虑以下限制:
仅支持 TensorFlow 操作的有限子集
仅支持有限的一些设备
低级 C++ API 需要手动内存管理
注:有限子集 链接
https://tensorflow.google.cn/lite/microcontrollers/build_convert#%E6%94%AF%E6%8C%81%E7%9A%84%E6%93%8D%E4%BD%9C
如果您想详细了解 TensorFlow 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:
TensorFlow Lite Microcontrollers
(https://tensorflow.google.cn/lite/microcontrollers/overview)
FlatBuffer
(https://google.github.io/flatbuffers/)口语热词检测的示例代码
(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/experimental/micro/examples/micro_speech)构建和转换模型
(https://tensorflow.google.cn/lite/microcontrollers/build_convert#%E8%BD%AC%E6%8D%A2%E6%A8%A1%E5%9E%8B)理解 C++ 库
(https://tensorflow.google.cn/lite/microcontrollers/library)支持平台
(https://tensorflow.google.cn/lite/microcontrollers/overview)添加支持 README.md
(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/experimental/micro/README.md#how-to-port-tensorflow-lite-micro-to-a-new-platform)