推出 TF Lite Task Library 接口,简化 ML移动端开发流程

2020 年 9 月 24 日 TensorFlow

文 / Lu Wang、Chen Cen、Arun Venkatesan 和 Khanh LeViet


概述

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

  • 额外的代码
    https://tensorflow.google.cn/lite/guide/lite_support


今天,我们将为大家介绍 TensorFlow Lite Task Library,这是一组功能强大且易于使用的模型接口,可代您处理大多数预处理和后处理以及其他复杂逻辑。Task Library 支持主流的机器学习任务,包括图像分类与分割、目标检测和自然语言处理。模型接口针对每个任务进行过专门设计,可实现最佳性能和易用性——现在,只需 5 行代码就可以在受支持任务的预训练和自定义模型上执行推理!目前,Task Library 已广泛用于许多 Google 产品的生产环境中。

  • TensorFlow Lite Task Library
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/overview



支持的 ML 任务

TensorFlow Lite Task Library 目前支持六个 ML 任务,包括视觉和自然语言处理用例。下面将逐一进行简要介绍。
  • ImageClassifier
    图像分类器是机器学习的一种常见用例,用于识别图像所代表的内容。例如,我们可能想知道给定图片中出现了哪种动物。 ImageClassifier API 支持常见的图像处理和配置,还允许在特定的受支持区域设置中显示标签,并根据标签许可名单和禁止名单筛选结果。
  • ObjectDetector
    物体检测器可以识别一组中可能存在哪些已知物体,并提供这些物体在给定图像或视频串流中的位置信息。 ObjectDetector API 支持类似于 ImageClassifer 的图像处理选项。输出结果将列出检测到的前 k 个物体并带有标签、边界框和概率。
  • ImageSegmenter
    图像分割器预测图像的每个像素是否与某个类相关联。这与物体检测(检测矩形区域中的物体)和图像分类(对整个图像进行分类)相反。除图像处理外, ImageSegmenter 还支持两种类型的输出蒙版:类别蒙版和置信度蒙版。
  • NLClassifierBertNLClassifier
    • NLClassifier将输入文本分为不同的类别。可对该通用 API 进行配置,使其可以加载任何支持文本输入和分数输出的 TFLite 模型。
    • BertNLClassifier 与 NLClassifier 类似,不同之处在于,此 API 专门为 BERT 相关模型量身定制,需要在 TFLite 模型之外进行 Wordpiece 和 Sentencepiece 分词。
  • BertQuestionAnswerer
    BertQuestionAnswerer 加载 BERT 模型并根据给定段落的内容回答问题。目前支持 MobileBERTALBERT。与 BertonCollector 类似,BertQuestionAnswerer 封装了对输入文本的复杂分词处理。您可以将上下文和问题以字符串形式传递给 BertQuestionAnswerer 模型。



支持的模型

Task Library 与下列已知的模型源兼容:
  • TensorFlow Hub Task Library 模型集合( 图像分类/物体检测/图像分割/问答)。
  • TensorFlow Lite Model Maker 创建的模型。
  • AutoML Vision Edge 创建的模型。


Task Library 还支持符合每个 Task API 的模型兼容性要求的自定义模型。关联的文件(即标签图和 vocab 文件)和处理参数(如果适用)应正确填充到模型元数据中。有关更多详细信息,请参见 TensorFlow 网站上针对每个 API 的文档

  • 模型元数据
    https://tensorflow.google.cn/lite/convert/metadata

  • TensorFlow 网站上针对每个 API 的文档
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/overview



使用 Task Library 运行推理

Task Library 可跨平台工作,并且在 JavaC++(实验性)和 Swift(实验性)上均受支持。使用 Task Library 运行推理十分简单,只需编写几行代码。例如,您可以使用 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 所示。


三个文本 API 均支持 Swift。要在 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.”
  • DeepLab v3 TFLite 模型
    https://tfhub.dev/tensorflow/lite-model/deeplabv3/1/metadata/1

  • SQuAD v1 TFLite 模型
    https://tfhub.dev/tensorflow/lite-model/albert_lite_base/squadv1/1


为您的用例构建一个 Task API

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

  • 指南
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/customized_task_api



未来工作

我们将继续改善 Task Library 的用户体验。近期的路线图如下:
  • 改善 C++ Task Library 的易用性,例如为希望从源代码构建的用户提供预构建的二进制文件并创建人性化工作流。
  • 使用 Task Library 发布参考示例。
  • 通过新的任务类型支持更多的机器学习用例。
  • 改善跨平台支持,针对 iOS 支持更多任务。



反馈

欢迎大家提供反馈,并就 Task Library 中支持的新用例给出建议。请向 tflite@tensorflow.org 发送电子邮件或在 GitHub 中提 issue

  • issue
    https://github.com/tensorflow/tflite-support/issues/new



致谢

这项成果离不开以下人员的共同努力:
  • Task Library Vision API 的主要贡献者 Cédric Deltheil 和 Maxime Brénon。
  • Task Library 原生/Android/iOS 基础架构和 Text API 的主要贡献者 Chen Cen。
  • 开发基础结构和发布流程的主要贡献者 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 都对本项目给予了大力支持,在此一并表示感谢。



如果您想详细了解 本文提及 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:

  • ImageClassifier
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/image_classifier

  • ObjectDetector
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/object_detector

  • ImageSegmenter
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/image_segmenter

  • NLClassifier
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/nl_classifier

  • BertNLClassifier
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/bert_nl_classifier

  • BertQuestionAnswerer
    https://tensorflow.google.cn/lite/inference_with_metadata/task_library/bert_question_answerer

  • MobileBERT
    https://tfhub.dev/tensorflow/lite-model/mobilebert/1/metadata/1

  • ALBERT
    https://tfhub.dev/tensorflow/lite-model/albert_lite_base/squadv1/metadata/1

  • 图像分类
    https://tfhub.dev/tensorflow/collections/lite/task-library/image-classifier/1

  • 物体检测
    https://tfhub.dev/tensorflow/collections/lite/task-library/object-detector/1

  • 图像分割
    https://tfhub.dev/tensorflow/collections/lite/task-library/image-segmenter/1

  • 问答
    https://tfhub.dev/tensorflow/collections/lite/task-library/bert-question-answerer/1

  • TensorFlow Lite Model Maker 
    https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/g3doc/tutorials

  • AutoML Vision Edge
    https://cloud.google.com/vision/automl/docs/edge-quickstart

  • Java
    https://github.com/tensorflow/tflite-support/tree/master/tensorflow_lite_support/java/src/java/org/tensorflow/lite/task

  • C++
    https://github.com/tensorflow/tflite-support/tree/master/tensorflow_lite_support/cc/task

  • Swift
    https://github.com/tensorflow/tflite-support/tree/master/tensorflow_lite_support/ios



— 推荐阅读 —



了解更多请点击 “阅读原文” 访问官网。

分享 💬  点赞 👍  在看 ❤️ 

以“三连”行动支持优质内容!

登录查看更多
1

相关内容

TensorFlowLite:端侧机器学习框架
专知会员服务
32+阅读 · 2020年8月27日
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
KGCN:使用TensorFlow进行知识图谱的机器学习
专知会员服务
81+阅读 · 2020年1月13日
TensorFlow 2.0 学习资源汇总
专知会员服务
66+阅读 · 2019年10月9日
利用 AutoML 的功能构建和部署 TensorFlow.js 模型
TensorFlow
6+阅读 · 2019年12月16日
基于TensorFlow和Keras的图像识别
Python程序员
16+阅读 · 2019年6月24日
TensorFlow 2.0如何在Colab中使用TensorBoard
专知
17+阅读 · 2019年3月15日
运用 MXNet Scala API 接口进行图像分类(附代码)
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
3月份Github上最热门的数据科学和机器学习项目
大数据技术
7+阅读 · 2018年4月23日
TensorFlow图像分类教程
机器学习研究会
33+阅读 · 2017年12月29日
Arxiv
0+阅读 · 2020年12月3日
Arxiv
29+阅读 · 2020年3月16日
Arxiv
15+阅读 · 2020年2月6日
VIP会员
相关资讯
利用 AutoML 的功能构建和部署 TensorFlow.js 模型
TensorFlow
6+阅读 · 2019年12月16日
基于TensorFlow和Keras的图像识别
Python程序员
16+阅读 · 2019年6月24日
TensorFlow 2.0如何在Colab中使用TensorBoard
专知
17+阅读 · 2019年3月15日
运用 MXNet Scala API 接口进行图像分类(附代码)
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
3月份Github上最热门的数据科学和机器学习项目
大数据技术
7+阅读 · 2018年4月23日
TensorFlow图像分类教程
机器学习研究会
33+阅读 · 2017年12月29日
Top
微信扫码咨询专知VIP会员