适用于微控制器的 TensorFlow Lite C++ 库是 TensorFlow 存储库 的一部分。它旨在易于阅读、易于修改、经过良好测试、易于集成,并与常规 TensorFlow Lite 兼容。
以下文档概述了 C++ 库的基本结构,并提供有关创建您自己的项目的相关信息。
文件结构
micro
根目录具有相对简单的结构。但是,由于它位于庞大的 TensorFlow 存储库中,因此我们创建了脚本和预生成的项目文件,这些文件在各种嵌入式开发环境中以隔离的方式提供相关源文件。
关键文件
用于使用适用于微控制器的 TensorFlow Lite 解释器最重要的文件位于项目的根目录中,并附带测试
[`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.
micro_error_reporter.h
输出调试信息。micro_interpreter.h
包含用于处理和运行模型的代码。
请参阅 微控制器入门,了解典型用法的演练。
构建系统提供特定于平台的某些文件的实现。这些文件位于带有平台名称的目录中,例如 cortex-m
。
还存在其他几个目录,包括
启动新项目
我们建议使用Hello World 示例作为新项目的模板。您可以按照本节中的说明获取适用于您选择的平台的版本。
使用 Arduino 库
如果您使用的是 Arduino,则Hello World 示例包含在 Arduino_TensorFlowLite
Arduino 库中,您可以手动将其安装在 Arduino IDE 和 Arduino Create 中。
添加库后,转到 文件 -> 示例
。您应该在列表底部附近看到一个名为 TensorFlowLite:hello_world
的示例。选择它并单击 hello_world
加载示例。然后,您可以保存示例的副本,并将其用作您自己的项目的依据。
为其他平台生成项目
适用于微控制器的 TensorFlow Lite 能够使用 Makefile
生成包含所有必要源文件的独立项目。当前支持的环境是 Keil、Make 和 Mbed。
要使用 Make 生成这些项目,请克隆 TensorFlow/tflite-micro 存储库 并运行以下命令
make -f tensorflow/lite/micro/tools/make/Makefile generate_projects
这将需要几分钟,因为它需要下载一些大型工具链来满足依赖关系。完成后,您应该看到在类似 gen/linux_x86_64/prj/
的路径中创建了一些文件夹(确切路径取决于您的主机操作系统)。这些文件夹包含生成的项目和源文件。
运行命令后,您可以在 gen/linux_x86_64/prj/hello_world
中找到“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=
。以下示例显示了如何为通用 cortex-m0 构建“Hello World”示例
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.cc
和 output_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 库
如果您需要生成库的新版本,您可以从 TensorFlow 存储库中运行以下脚本
./tensorflow/lite/micro/tools/ci_build/test_arduino.sh
生成的库可以在 gen/arduino_x86_64/prj/tensorflow_lite.zip
中找到。
移植到新设备
有关将 TensorFlow Lite for Microcontrollers 移植到新平台和设备的指南,请参阅 micro/docs/new_platform_support.md
.