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.
micro_error_reporter.h
输出调试信息。micro_interpreter.h
包含用于处理和运行模型的代码。
如需了解相关信息,请参阅微控制器使用入门 完整演示
构建系统提供某些针对特定平台的实现,
文件。它们都位于包含平台名称的目录中,例如
cortex-m
。
还有其他一些目录,包括:
启动新项目
我们建议您使用 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.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 库
如果您需要生成库的新 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
。