2023 年 2 月 2 日 — Scott Main(技术作家)和 Coral 团队发布 仅仅几年时间,用于移动和嵌入式系统的 ML 模型就取得了长足进步。借助 TensorFlow Lite(TFLite),您现在可以运行执行姿势估计和对象分割的复杂模型,但这些模型仍然需要移动设备或树莓派等小型计算机中相对强大的处理器和高级操作系统。或者,您可以在低功耗微控制器 (MCU) 上使用 TensorFlow Lite Micro (TFLM) 来运行简单的模型,例如图像和音频分类。但是,MCU 的模型要小得多,因此其功能和准确性有限。
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 附加板)。
Dev Board Micro 使用 TFLM 执行您的模型,而 TFLM 仅支持 TFLite 中的一部分操作。即使 TFLM 支持所有相同的操作,MCU 对复杂模型(例如用于对象检测和姿势估计的模型)的实际应用来说仍然太慢。但是,当您为 Edge TPU 编译 TFLite 模型时,MCU 只需要设置模型的输入,将模型操作委托给 Edge TPU,然后读取输出。
我们基于 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 的示例。
2023 年 2 月 2 日 — Scott Main(技术作家)和 Coral 团队发布 仅仅几年时间,用于移动和嵌入式系统的 ML 模型就取得了长足进步。借助 TensorFlow Lite(TFLite),您现在可以运行执行姿势估计和对象分割的复杂模型,但这些模型仍然需要移动设备或树莓派等小型计算机中相对强大的处理器和高级操作系统。或者,您可以在低功耗微控制器 (MCU) 上使用 TensorFlow Lite Micro (TFLM) 来运行简单的模型,例如图像和音频分类。但是,MCU 的模型要小得多,因此其功能和准确性有限。