使用 TensorFlow Lite 任务库简化移动端机器学习开发
2020 年 9 月 10 日
作者:Lu Wang, 陈岑, Arun Venkatesan, Khanh LeViet

概述

在移动设备上使用 TensorFlow Lite 模型进行推断,不仅仅是与模型交互,还需要 额外代码 来处理复杂的逻辑,例如数据转换、预处理/后处理、加载相关文件等等。

今天,我们发布了 TensorFlow Lite 任务库,它是一套功能强大且易于使用的模型接口,可以为您处理大多数预处理和后处理以及其他复杂逻辑。任务库支持流行的机器学习任务,包括图像分类和分割、目标检测和自然语言处理。模型接口针对每个任务专门设计,以实现最佳的性能和可用性 - 现在,使用仅需 5 行代码即可在支持的任务上对预训练模型和自定义模型进行推断!任务库已在许多 Google 产品的生产环境中得到广泛应用。

支持的 ML 任务

目前,TensorFlow Lite 任务库 支持六种 ML 任务,包括视觉和 NLP 使用场景。以下是每种任务的简要介绍。
  • ImageClassifier
    图像分类是机器学习的一个常见用途,用于识别图像代表什么。例如,我们可能想知道给定图片中出现了什么类型的动物。ImageClassifier API 支持常见的图像处理和配置。它还允许以特定支持的语言区域显示标签,并根据标签允许列表和拒绝列表过滤结果。
  • ObjectDetector
    目标检测器可以识别给定图像或视频流中可能存在的已知目标集中的哪些目标,并提供有关其在图像中的位置的信息。ObjectDetector API 支持与ImageClassifer 类似的图像处理选项。输出是带有标签、边界框和概率的 top-k 检测到的目标列表。
  • ImageSegmenter
    图像分割器预测图像的每个像素是否与某个类别相关联。这与目标检测形成对比,目标检测在矩形区域内检测目标,而图像分类则对整个图像进行分类。除了图像处理之外,ImageSegmenter 还支持两种类型的输出掩码,类别掩码和置信度掩码。
  • NLClassifierBertNLClassifier
    NLClassifier 将输入文本分类到不同的类别。这个多功能的 API 可以配置为加载任何带有文本输入和分数输出的 TFLite 模型。

    BertNLClassifier 与 NLClassifier 类似,不同之处在于该 API 特别针对 BERT 相关的模型,这些模型需要在 TFLite 模型之外进行 Wordpiece 和 Sentencepiece 分词。
  • BertQuestionAnswerer
    BertQuestionAnswerer 加载 BERT 模型,并根据给定文章的内容回答问题。它目前支持 MobileBERTALBERT。与 BertNLClassifier 类似,BertQuestionAnswerer 封装了对输入文本的复杂分词处理。您可以简单地将上下文和问题以字符串形式传递给 BertQuestionAnswerer。

支持的模型

任务库与以下已知模型来源兼容任务库还支持符合每个任务 API 的模型兼容性要求的自定义模型。如果适用,关联文件(即标签映射和词汇表文件)和处理参数应正确填充到 模型元数据 中。有关更多详细信息,请参阅 TensorFlow 网站上的每个 API 文档

使用任务库进行推断

任务库跨平台工作,支持 JavaC++(实验性)和 Swift(实验性)。使用任务库进行推断就像编写几行代码一样简单。例如,您可以使用 DeepLab v3 TFLite 模型 在 Android 上分割飞机图像(图 1)。
// Create the API from a model file and options
String modelPath = "path/to/model.tflite"
ImageSegmenterOptions options = ImageSegmenterOptions.builder().setOutputType(OutputType.CONFIDENCE_MASK).build();

ImageSegmenter imageSegmenter = ImageSegmenter.createFromFileAndOptions(context, modelPath, options);

// Segment an image
TensorImage image = TensorImage.fromBitmap(bitmap);
List results = imageSegmenter.segment(image);
图 1. ImageSegmenter 输入图像。
图 2. 分割掩码。
然后,您可以使用结果中的彩色标签和类别掩码来构建分割掩码图像,如图 2 所示。

Swift 支持三种文本 API。要在 iOS 上使用 SQuAD v1 TFLite 模型 对给定上下文和问题执行问答,您可以运行以下命令:
let modelPath = "path/to/model.tflite"

// Create the API from a model file
let mobileBertAnswerer =   TFLBertQuestionAnswerer.mobilebertQuestionAnswerer(modelPath: modelPath)

let context = """
The Amazon rainforest, alternatively, the Amazon Jungle, also known in \
English as Amazonia, is a moist broadleaf tropical rainforest in the \
Amazon biome that covers most of the Amazon basin of South America. This \
basin encompasses 7,000,000 square kilometers(2,700,000 square miles), of \
which 5,500,000 square kilometers(2,100,000 square miles) are covered by \
the rainforest. This region includes territory belonging to nine nations.
"""
let question = "Where is Amazon rainforest?"
// Answer a question
let answers = mobileBertAnswerer.answer(context: context, question: question)
// answers.[0].text could be “South America.”

为您的用例构建任务 API

如果现有任务库不支持您的用例,您可以利用任务 API 基础架构构建自定义 C++/Android/iOS 推断 API。有关更多详细信息,请参阅此 指南

未来工作

我们将继续改进任务库的用户体验。以下是近期路线图:
  • 改进 C++ 任务库的可用性,例如提供预构建的二进制文件,并为想要从源代码构建的用户创建用户友好的工作流程。
  • 发布使用任务库的参考示例。
  • 通过新的任务类型支持更多机器学习用例。
  • 改进跨平台支持,并为 iOS 启用更多任务。

反馈

我们很乐意收到您的反馈和对任务库中要支持的新用例的建议。请发送电子邮件至 [email protected] 或创建 TensorFlow Lite 支持的 GitHub 问题

致谢

这项工作如果没有以下人士的努力将无法实现:
  • Cédric Deltheil 和 Maxime Brénon,任务库视觉 API 的主要贡献者。
  • 陈岑,任务库本机/Android/iOS 基础设施和文本 API 的主要贡献者。
  • Xunkai 和 YoungSeok Yoon,开发基础设施和发布流程的主要贡献者。
我们要感谢 Tian Lin、Sijia Ma、YoungSeok Yoon、Yuqi Li、Hsiu Wang、Qifei Wang、Alec Go、Christine Kaeser-Chen、Yicheng Fan、Elizabeth Kemp、Willi Gierke、Arun Venkatesan、Amy Jang、Mike Liang、Denis Brulé、Gaurav Nemade、Khanh LeViet、Luiz GUStavo Martins、Shuangfeng Li、Jared Duke、Erik Vee、Sarah Sirajuddin、Tim Davis 对这项工作的积极支持。
下一篇文章
 Easy ML mobile development with TensorFlow Lite Task Library

作者:Lu Wang, 陈岑, Arun Venkatesan, Khanh LeViet
概述在移动设备上使用 TensorFlow Lite 模型进行推断,不仅仅是与模型交互,还需要 额外代码 来处理复杂的逻辑,例如数据转换、预处理/后处理、加载相关文件等等。

今天,我们发布了 TensorFlow Lite 任务库,它是一套功能强大且易于使用的模型接口,可以为您处理大多数预处理和后处理以及其他复杂逻辑。任务库支持流行的机器学习任务,包括图像分类和分割、目标检测和自然语言处理。模型接口针对每个任务专门设计,以实现最佳的性能和可用性 - 现在,使用仅需 5 行代码即可在支持的任务上对预训练模型和自定义模型进行推断!任务库已在许多 Google 产品的生产环境中得到广泛应用。