带 ML 加速的 TensorFlow Lite Micro
2023 年 2 月 2 日

Scott Main(技术作家)和 Coral 团队发布

仅仅几年时间,用于移动和嵌入式系统的 ML 模型就取得了长足进步。借助 TensorFlow Lite(TFLite),您现在可以运行执行姿势估计和对象分割的复杂模型,但这些模型仍然需要移动设备或树莓派等小型计算机中相对强大的处理器和高级操作系统。或者,您可以在低功耗微控制器 (MCU) 上使用 TensorFlow Lite Micro (TFLM) 来运行简单的模型,例如图像和音频分类。但是,MCU 的模型要小得多,因此其功能和准确性有限。

因此,在您必须在 TFLM(低功耗但模型性能有限)和常规 TFLite(出色的模型性能但功耗更高)之间进行选择时,会存在机会成本。如果您可以在一块板上同时获得两者,那不是很好吗?我们很高兴地宣布,Coral Dev Board Micro 现已上市,可以完全满足这一需求。

一块小巧但功能强大的板

Dev Board Micro 是一款微控制器板(带双核 Cortex-M7 和 Cortex-M4),因此它体积小巧且功耗效率高,但它还包含板载 Coral Edge TPU™,因此可为大型 TFLite 模型提供出色的推断速度。此外,它还配备板载摄像头 (324x324) 和麦克风。当然,它还提供大量的 GPIO 引脚和高密度连接器,用于附加板(例如我们自己的 无线附加板PoE 附加板)。

against a nebulous bright white background, a hand holding up a chip board with the words 'Dev Board Micro' and the Coral Logo on it between the thumb and index finger

Dev Board Micro 使用 TFLM 执行您的模型,而 TFLM 仅支持 TFLite 中的一部分操作。即使 TFLM 支持所有相同的操作,MCU 对复杂模型(例如用于对象检测和姿势估计的模型)的实际应用来说仍然太慢。但是,当您为 Edge TPU 编译 TFLite 模型时,MCU 只需要设置模型的输入,将模型操作委托给 Edge TPU,然后读取输出。

因此,即使您仍然使用较小的 TFLM 解释器,您也可以运行其他情况下与 TFLM 解释器不兼容的复杂 TFLite 模型,因为它们实际上是在 Edge TPU 上执行的。例如,借助 Dev Board Micro,您可以实时运行 PoseNet 进行姿势估计、BodyPix 进行人体分割、SSD MobileNet 进行对象检测以及 更多模型。例如
Table showing the different models with corresponding inference time on Dev Board Micro with Edge TPU
当然,运行 Edge TPU 需要更多功率,但这块板的双核 MCU 的妙处在于,您可以将低功耗应用运行在 M4 上(支持小型 TFLM 模型),然后仅在需要运行更复杂的 TFLite 模型时激活 M7 和 Edge TPU。

为了更好地了解这块板与其他 Coral 板的比较情况,以下是我们不同开发板的简要比较
Table comparing the price (USD), size, processor,RAM, camera, microphone, wi-fi/bluetooth, ethernet, and operating system capabilities across Dev Board Micro, Dev Board Mini and Dev Board

入门

我们基于 FreeRTOS 为 Dev Board Micro 构建了一个新平台,并包含了与 Arduino 编程语言的兼容性。因此,您可以使用 CMake 构建 C++ 应用,并使用我们的命令行工具将其刷入到板中,或者可以使用 Arduino IDE 编写和上传 Arduino 草图。我们称这个新平台为 coralmicro,它已完全 在 GitHub 上开源

如果您选择使用 FreeRTOS 编写代码,coralmicro 包含您在 MCU 上构建多任务应用所需的所有核心 FreeRTOS API,以及与 GPIO 进行交互、捕获照片、监听音频、执行多核处理等功能的自定义 coralmicro API

因为 coralmicro 使用 TensorFlow Lite for Microcontrollers 进行推断,所以在 Dev Board Micro 上运行 TensorFlow Lite 模型的工作方式与您在其他平台上使用 TensorFlow Lite 时几乎完全相同。与 TFLite 相比,TFLM 的一个区别是,您需要通过将它们添加到 MicroMutableOpResolver 中来指定模型使用的操作。例如,如果您的模型使用 2D 卷积,则需要调用 AddConv2D()。这样,您就可以通过仅编译在 MCU 上运行模型所需的实际操作内核来节省内存。但是,如果您的模型已编译为在 Edge TPU 上运行,则您还需要添加 Edge TPU 自定义操作,它将处理在 Edge TPU 上运行的所有操作。例如,在 Edge TPU 上使用 SSD MobileNet 进行对象检测时,只有反量化和后处理操作在 MCU 上运行,其余操作则委托给 Edge TPU 自定义操作,因此设置 MicroInterpreter 的代码如下所示

auto tpu_context = coralmicro::EdgeTpuManager::GetSingleton()->OpenDevice();
if (!tpu_context) {
  printf("ERROR: Failed to get EdgeTpu context\r\n");
  vTaskSuspend(nullptr);
}

tflite::MicroErrorReporter error_reporter;
tflite::MicroMutableOpResolver<3> resolver;
resolver.AddDequantize();
resolver.AddDetectionPostprocess();
resolver.AddCustom(coralmicro::kCustomOp, coralmicro::RegisterCustomOp());

tflite::MicroInterpreter interpreter(tflite::GetModel(model.data()), resolver,
                                     tensor_arena, kTensorArenaSize,
                                     &error_reporter);

请注意,您还需要使用 OpenDevice() 打开 Edge TPU。除了这个和 AddCustom() 之外,在 Dev Board Micro 上运行推断的代码非常标准的 TensorFlow 代码。有关更多详细信息,请参阅我们的 TFLM API 参考,并查看我们的 FreeRTOS 代码示例

如果您更喜欢使用 Arduino IDE 编写代码,我们提供了 Arduino 风格的 API,用于大多数与 FreeRTOS 中提供的功能相同的功能(Arduino 中不支持多核处理)。您只需在 Arduino IDE 的板管理器中安装“Coral”板包,选择 Dev Board Micro 板,然后即可在 文件 > 示例 中浏览我们所有针对 Dev Board Micro 的示例。

Table comparing the price (USD), size, processor,RAM, camera, microphone, wi-fi/bluetooth, ethernet, and operating system capabilities across Dev Board Micro, Dev Board Mini and Dev Board

您可以了解有关这块板的更多信息,并 在此处找到卖家,并按照我们的 入门指南 开始运行代码示例。

下一篇文章
TensorFlow Lite Micro with ML acceleration

Scott Main(技术作家)和 Coral 团队发布 仅仅几年时间,用于移动和嵌入式系统的 ML 模型就取得了长足进步。借助 TensorFlow Lite(TFLite),您现在可以运行执行姿势估计和对象分割的复杂模型,但这些模型仍然需要移动设备或树莓派等小型计算机中相对强大的处理器和高级操作系统。或者,您可以在低功耗微控制器 (MCU) 上使用 TensorFlow Lite Micro (TFLM) 来运行简单的模型,例如图像和音频分类。但是,MCU 的模型要小得多,因此其功能和准确性有限。