Google Article
新的 Coral API 和工具,助力边缘 AI
2020 年 11 月 6 日

作者:Carlos Mendonça,Coral

Coral Fall 2020 image

秋天终于来了,随之而来的是 Coral 的 C++Python API 和工具的新版本,以及针对 Edge TPU 优化的 新模型,以及对基于 TensorFlow 2.0 的工作流程的进一步支持。

Coral 是一个完整的工具包,用于构建具有本地 AI 的产品。我们的设备上推理功能允许您构建高效、私密、快速且离线的产品,这些产品借助 TensorFlow Lite 和 Edge TPU 实现。

从一开始,我们就提供 Python 和 C++ API,使开发人员能够利用 Edge TPU 的本地推理速度。机器学习模型的离线处理可以节省大量带宽和云计算成本,它可以将数据保存在本地,并保护用户隐私。最近,我们一直在努力重构我们的 API,使其更加模块化、可重用和高性能,同时消除不必要的 API 抽象,并提供更多开发人员熟悉的原生 TensorFlow Lite API。

因此,在我们最新的版本中,我们现在提供两个独立的可重用库,每个库都基于强大的 TensorFlow Lite API 构建,并且每个库都隔离在自己的存储库中:用于 C++ 的 libcoral 和用于 Python 的 PyCoral

libcoral (C++)

与我们之前的某些 API 不同,libcoral 不会隐藏 tflite::Interpreter。相反,我们正在将这个原生 TensorFlow Lite 类作为一等公民,并提供一些额外的辅助 API,这些 API 在使用分类和检测等常见模型时可以简化您的代码。

使用我们的新 libcoral 库,开发人员通常应遵循以下模式在 C++ 中执行推理

  1. 使用 Edge TPU 上下文创建 tflite::Interpreter 实例并分配内存。

    为了简化此步骤,libcoral 提供了 MakeEdgeTpuInterpreter() 函数

     
    // Load the model
    auto model = coral::LoadModelOrDie(absl::GetFlag(FLAGS_model_path));
    
    // Get the Edge TPU context
    auto tpu_context = coral::ContainsEdgeTpuCustomOp(*model) ?
     	coral::GetEdgeTpuContextOrDie() :
     	nullptr;
    
    // Get the interpreter
    auto interpreter = coral::MakeEdgeTpuInterpreterOrDie(
     	*model,
     	tpu_context.get());  
  2. 配置解释器的输入。
  3. 调用解释器
  4. 
    interpreter->Invoke();
     

    作为 Invoke() 的替代方法,您可以使用 InvokeWithMemBuffer()InvokeWithDmaBuffer() 函数来实现更高的性能,这些函数分别允许在不从内存的另一个区域或 DMA 文件描述符复制的情况下处理输入数据。

  5. 处理解释器的输出。

为了简化此步骤,libcoral 提供了一些适配器,需要您编写更少的代码


auto result = coral::GetClassificationResults(
 	*interpreter,
 	/* threshold= */0.0f,
 	/*top_k=*/3);
 

以上是分类适配器的示例,开发人员可以在其中指定最小置信度阈值以及要返回的最大结果数。该 API 还具有一个检测适配器,它具有自己的结果过滤参数。

有关示例应用程序源代码的完整视图,请参阅 GitHub 上的 classify_image.cc,有关如何将 libcoral 集成到您的应用程序中的说明,请参阅 GitHub 上的 README.md

此新版本还通过将烙印功能从更新后的 ImprintingEngine 上的推理中分离来更新设备上重新训练。新设计使烙印引擎可以直接与 tflite::Interpreter 协同工作。

为了轻松解决主机上可用的 Edge TPU,libcoral 支持诸如 "usb:0""pci:1" 之类的标签。这应该使管理多 Edge TPU 系统上的资源变得更加容易。

最后,我们进行了一些性能改进,例如更有效的内存使用和基于内存而不是基于文件的抽象。此外,该 API 的设计通过利用 Abseil 库进行错误传播、通用接口和其他常见模式,更加一致,这应该提供更加一致和稳定的开发人员体验。

PyCoral (Python)

新的 PyCoral 库(在新的 pycoral Python 模块中提供)遵循 libcoral 中引入的一些设计模式,并在我们的 C++ 和 Python API 之间实现一致性。PyCoral 实施了相同的分离烙印设计、用于分类和检测的模型适配器以及相同的基于标签的 TPU 地址语义。

在 PyCoral 上,"运行推理" 功能现在完全委托给本机 TensorFlow Lite 库,因为我们已经取消了抽象 TensorFlow 解释器的模型 "引擎"。此更改使我们能够消除 Coral 特定的 BasicEngine、ClassificationEngine 和 DetectionEngine 类引入的代码重复(这些 API - 来自 "Edge TPU Python 库" - 现在已弃用)。

要使用 PyCoral 执行推理,我们遵循与 libcoral 相似的模式

  1. 创建一个解释器
  2. 
    interpreter = edgetpu.make_interpreter(model_file)
    interpreter.allocate_tensors()
     
  3. 配置解释器的输入
  4. 
    common.set_input(interpreter, image)
     
  5. 调用解释器
  6. 
    interpreter.invoke()
     
  7. 处理解释器的输出
  8. 
    classes = classify.get_classes(interpreter, top_k=3)
     

    有关完整详细的示例代码,请查看 我们针对 Python 的文档

    Coral 模型库的更新

    在此版本中,我们正在使用 **MobileDet** 进一步扩展 Coral 模型库。MobileDet 指的是使用 TensorFlow 对象检测 API 的一系列轻量级单次检测器,它们在 Edge TPU 上实现了最先进的精度-延迟权衡。与 MobileNet 模型家族相比,它是一种低延迟检测模型,可以提供更高的精度。

    查看来自 Coral 的 针对 Edge TPU 可用的模型的完整集合,包括分类、检测、分割以及专门为设备上训练准备的模型。

    将我们的整个工作流程和模型库迁移到 TensorFlow 2 是一项持续的努力。Coral 机器学习 API 的此版本开始引入对基于 TensorFlow 2 的工作流程的支持。目前,MobileNet v1 (ImageNet)、MobileNet v2 (ImageNet)、MobileNet v3 (ImageNet)、ResNet50 v1 (ImageNet) 和 UNet MobileNet v2 (Oxford pets) 都支持使用 TensorFlow 2 进行训练和转换。

    模型流水线

    libcoral 和 PyCoral 都已将模型流水线功能从测试版升级到正式版。模型流水线使大型模型能够被划分并分布在多个 Edge TPU 上,以便以更快地速度运行它们。

    请参阅 C++Python 中的 API 示例文档。

    模型的划分是使用 Edge TPU 编译器完成的,该编译器采用参数计数算法,将模型划分成具有相似参数大小的片段。对于此算法无法提供您所需吞吐量的案例,此版本引入了一种新的工具,该工具支持基于分析的算法,该算法根据实际运行模型多次观察到的延迟来划分片段,可能导致更加平衡的输出。

    新的 profiling_partition 工具可以用作

    
    ./profiling_partition \
      --edgetpu_compiler_binary $PATH_TO_COMPILER \
      --model_path $PATH_TO_MODEL \
      --output_dir $OUT_DIR \
      --num_segments $NUM_SEGMENTS
     

    了解更多信息

    有关上述 Coral API 的更多信息,请参阅以下文档

下一篇文章
New Coral APIs and tools for AI at the edge

作者:Carlos Mendonça,Coral 秋天终于来了,随之而来的是 Coral 的 C++Python API 和工具的新版本,以及针对 Edge TPU 优化的 新模型,以及对基于 TensorFlow 2.0 的工作流程的进一步支持。Coral 是一个完整的工具包,用于构建具有本地 AI 的产品。我们的设备上推理功能允许您构建高效、私密、快速的产品……