文 / 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 任务
ImageClassifier
API 支持常见的图像处理和配置,还允许在特定的受支持区域设置中显示标签,并根据标签许可名单和禁止名单筛选结果。
ObjectDetector
API 支持类似于
ImageClassifer
的图像处理选项。输出结果将列出检测到的前 k 个物体并带有标签、边界框和概率。
ImageSegmenter
还支持两种类型的输出蒙版:类别蒙版和置信度蒙版。
NLClassifier
将输入文本分为不同的类别。可对该通用 API 进行配置,使其可以加载任何支持文本输入和分数输出的 TFLite 模型。
BertNLClassifier
与 NLClassifier 类似,不同之处在于,此 API 专门为 BERT 相关模型量身定制,需要在 TFLite 模型之外进行 Wordpiece 和 Sentencepiece 分词。
BertQuestionAnswerer
BertQuestionAnswerer 加载 BERT 模型并根据给定段落的内容回答问题。目前支持 MobileBERT 和 ALBERT。与 BertonCollector 类似,BertQuestionAnswerer 封装了对输入文本的复杂分词处理。您可以将上下文和问题以字符串形式传递给 BertQuestionAnswerer 模型。
支持的模型
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 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
未来工作
改善跨平台支持,针对 iOS 支持更多任务。
反馈
欢迎大家提供反馈,并就 Task Library 中支持的新用例给出建议。请向 tflite@tensorflow.org 发送电子邮件或在 GitHub 中提 issue。
issue
https://github.com/tensorflow/tflite-support/issues/new
致谢
开发基础结构和发布流程的主要贡献者 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
了解更多请点击 “阅读原文” 访问官网。
分享 💬 点赞 👍 在看 ❤️
以“三连”行动支持优质内容!