Press "Enter" to skip to content

TensorFlow推出新接口,简化 ML移动端开发流程

概述

 

在移动设备上使用 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 还支持两种类型的输出蒙版:类别蒙版和置信度蒙版。
NLClassifier 和 BertNLClassifier
NLClassifier将输入文本分为不同的类别。可对该通用 API 进行配置,使其可以加载任何支持文本输入和分数输出的 TFLite 模型。
BertNLClassifier 与 NLClassifier 类似,不同之处在于,此 API 专门为 BERT 相关模型量身定制,需要在 TFLite 模型之外进行 Wordpiece 和 Sentencepiece 分词。

BertQuestionAnswerer
BertQuestionAnswerer 加载 BERT 模型并根据给定段落的内容回答问题。目前支持MobileBERT 和 ALBERT。与 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 可跨平台工作,并且在 Java、C++(实验性)和 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 imageTensorImage image = TensorImage.fromBitmap(bitmap);List results = imageSegmenter.segment(image);

 

 

ImageSegmenter 输入图像

 

 

分割蒙版

 

然后,您可以在结果中使用彩色标签和类别蒙版来构造分割蒙版图像,如图 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 questionlet 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 中支持的新用例给出建议。请向 [email protected]发送电子邮件或在 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 都对本项目给予了大力支持,在此一并表示感谢。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注