了解 C++ 库

LiteRT for Microcontrollers C++ 库是 TensorFlow 代码库。 它具有可读性、易于修改、经过充分测试、易于集成的特点, 并且与常规的 LiteRT 兼容。

以下文档概述了 C++ 库的基本结构, 介绍了如何自行创建项目。

文件结构

通过 micro 根目录的结构相对简单。不过,由于它位于 在庞大的 TensorFlow 代码库内,我们创建了脚本, 预先生成的项目文件,单独提供相关的源文件 各种嵌入式开发环境中

关键文件

使用适用于微控制器的 LiteRT 的最重要的文件 解释器位于项目的根目录中,附带测试:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

如需了解相关信息,请参阅微控制器使用入门 完整演示

构建系统提供某些针对特定平台的实现, 文件。它们都位于包含平台名称的目录中,例如 cortex-m

还有其他一些目录,包括:

  • kernel、 其中包含运算实现和关联代码。
  • tools、 其中包含构建工具及其输出。
  • examples、 其中包含示例代码

启动新项目

我们建议您使用 Hello World 示例作为新项目的模板。您 您可以按照 具体说明。

使用 Arduino 库

如果您使用的是 Arduino,则 Hello World 示例包含在 Arduino_TensorFlowLite Arduino 库,您可以在 Arduino IDE 和 Arduino Create

添加该库后,前往 File -> Examples。您应该会看到 TensorFlowLite:hello_world 列表底部附近的一个示例。选择 然后点击 hello_world 加载示例。然后,您可以将 并将其用作自己项目的基础。

生成适用于其他平台的项目

适用于微控制器的 LiteRT 能够生成独立项目 其中包含所有必要的源文件,请使用 Makefile。当前 支持的环境包括 Keil、Make 和 Mbed。

要使用 Make 生成这些项目,请克隆 TensorFlow/tflite-micro 代码库 然后运行以下命令:

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

这需要几分钟时间,因为它必须下载一些大型工具链以进行 依赖项完成后,您应该会看到一些文件夹已创建 gen/linux_x86_64/prj/(即 确切路径取决于您的主机操作系统)。这些文件夹包含 生成的项目和源文件

运行此命令后,您将能够在以下位置找到 Hello World 项目 gen/linux_x86_64/prj/hello_world。对于 例如,hello_world/keil 将包含 Keil 项目。

运行测试

如需构建库并运行其所有单元测试,请使用以下命令:

make -f tensorflow/lite/micro/tools/make/Makefile test

如需运行单个测试,请使用以下命令(替换掉 <test_name>) 替换为测试名称:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

您可以在项目的 Makefile 中找到测试名称。例如: examples/hello_world/Makefile.inc 指定 Hello 的测试名称 World 示例。

构建二进制文件

如需为给定项目(例如示例应用)构建可运行的二进制文件,请执行以下操作: 请使用以下命令,并将 <project_name> 替换为您想要的项目 构建:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

例如,以下命令将构建适用于 Hello World 的二进制文件 应用:

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

默认情况下,项目将针对主机操作系统进行编译。接收者 指定不同的目标架构,请使用 TARGET=TARGET_ARCH=。通过 以下示例展示了如何为通用示例构建 Hello World 示例 cortex-m0:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

指定目标后,所有特定于目标的可用源文件都将 来代替原始代码。例如,子目录 examples/hello_world/cortex_m_generic 包含 SparkFun Edge 实现 文件 constants.ccoutput_handler.cc 的一部分,当 已指定目标cortex_m_generic

您可以在项目的 Makefile 中找到项目名称。例如: examples/hello_world/Makefile.inc 指定 Hello 的二进制文件名称 World 示例。

优化的内核

tensorflow/lite/micro/kernels 的根目录中的参考内核为 使用纯 C/C++ 实现,并且不包含平台专用硬件 优化。

内核的优化版本在子目录中提供。例如: kernels/cmsis-nn 包含几个经过优化的内核,这些内核利用了 ARM 的 CMSIS-NN 库。

如需使用经过优化的内核生成项目,请使用以下命令: 将 <subdirectory_name> 替换为包含 优化:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

您可以添加自己的优化建议,只需为其创建新的子文件夹即可。周三 鼓励发出针对新优化实现的拉取请求。

生成 Arduino 库

如果您需要生成库的新 build,可以运行以下命令 脚本:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

生成的库可在 gen/arduino_x86_64/prj/tensorflow_lite.zip

移植到新设备

将适用于微控制器的 LiteRT 移植到新平台以及 设备可以在 micro/docs/new_platform_support.md