微控制器的 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