微控制器的 RAM 和存储空间有限,这对 机器学习模型的大小。此外, 微控制器目前支持的操作有限, 模型架构可行。
本文档介绍了将 TensorFlow 模型转换为可在其上运行的 微控制器它还概述了支持的操作,并提供了一些 指导设计和训练模型以适应有限内存。
有关构建和转换模型的端到端示例,请参阅 你好!世界 示例。
模型转换
要将经过训练的 TensorFlow 模型转换为在微控制器上运行,您应该使用
LiteRT 转换器 Python API。
这会将该模型转换为
FlatBuffer
、缩减模型大小、
并将其修改为使用 LiteRT 操作。
要获得尽可能小的模型大小,您应该考虑使用 训练后量化。
转换为 C 数组
许多微控制器平台不支持原生文件系统。通过 要使用程序中的模型,最简单的方法就是以 C 数组的形式添加该模型, 将其编译到程序中。
以下 unix 命令将生成一个 C 源文件,其中包含
以 char
数组形式表示的 LiteRT 模型:
xxd -i converted_model.tflite > model_data.cc
输出将类似于以下内容:
unsigned char converted_model_tflite[] = {
0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
// <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;
生成文件后,您可以将其包含在程序中。时间是
为了获得更好的内存,请务必将数组声明更改为 const
提升效率
有关如何在程序中包含和使用模型的示例,请参阅
hello_world_test.cc
(位于 Hello World 示例中)。
模型架构和训练
在设计用于微控制器的模型时,请务必考虑 模型大小、工作负载和使用的操作。
模型大小
模型必须足够小,以适应目标设备的内存 以二进制文件的形式和在运行时的形式对程序的其余部分进行编译。
要创建更小的模型,可以在模型中使用越来越少的层, 架构。但是,小型模型更有可能出现欠拟合。 这意味着,对于许多问题,尝试使用最大的模型 可以存储在内存中的资源。不过,使用较大的模型也会导致 处理器工作负载
工作负载
模型的大小和复杂性会影响工作负载。大型、复杂 可能会导致更长的占空比,这意味着设备的处理器 减少空闲时间。这将增加功率 这可能是一个问题,具体取决于您的 应用。
运营支持
适用于微控制器的 LiteRT 目前只支持一部分 TensorFlow 运算,这会影响所能实现的模型架构 运行。我们正在努力扩大运营支持范围, 针对特定架构的参考实现和优化。
支持的操作可在文件中查看
micro_mutable_ops_resolver.h