查看原文
其他

TensorFlow Lite 微控制器

Google TensorFlow 2021-07-27

翻译 / 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 模型部署到微控制器的过程:

  1. 创建或获取 TensorFlow 模型
    该模型必须非常小,以便在转换后适合您的目标设备。它只能使用支持的操作。如果要使用当前不被支持的操作,可以提供自己的实现。

  2. 将模型转换为 TensorFlow Lite FlatBuffer
    您将使用 TensorFlow Lite 转换器来将模型转换为标准 TensorFlow Lite 格式。您可能希望输出量化模型,因为它们的尺寸更小、执行效率更高。

  3. 将 FlatBuffer 转换为 C byte 数组
    模型保存在只读程序存储器中,并以简单的 C 文件的形式提供。标准工具可用于将 FlatBuffer 转换为 C 数组

  4. 集成 TensorFlow Lite for Microcontrollers 的 C++
    编写微控制器代码以使用 C++ 库执行推断。

  5. 部署到您的设备
    构建程序并将其部署到您的设备。

注:构建和转换模型 链接

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)




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存