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

TensorFlow Lite Task Library简化了移动端机器学习应用开发流程。它提供了一系列易于使用的接口,支持图像分类、物体检测等任务,使开发者仅需少量代码即可实现复杂的模型推理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转载,如果打不开,可以直接读本文,内容完全一致:

推出 TF Lite Task Library 接口,简化 ML移动端开发流程 - 技术分享 - tf.wiki 社区

 

概述

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

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

支持的 ML 任务

TensorFlow Lite Task Library 目前支持六个 ML 任务,包括视觉和自然语言处理用例。下面将逐一进行简要介绍。

  • ImageClassifier
    图像分类器是机器学习的一种常见用例,用于识别图像所代表的内容。例如,我们可能想知道给定图片中出现了哪种动物。 ImageClassifier API 支持常见的图像处理和配置,还允许在特定的受支持区域设置中显示标签,并根据标签许可名单和禁止名单筛选结果。
  • ObjectDetector 2
    物体检测器可以识别一组中可能存在哪些已知物体,并提供这些物体在给定图像或视频串流中的位置信息。 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 与下列已知的模型源兼容:

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

使用 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.”

为您的用例构建一个 Task API

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

未来工作

我们将继续改善 Task Library 的用户体验。近期的路线图如下:

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

反馈

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

致谢

这项成果离不开以下人员的共同努力:

  • Task Library Vision API 的主要贡献者 Cédric Deltheil Maxime Brénon
  • Task Library 原生/Android/iOS 基础架构和 Text API 的主要贡献者 Chen Cen
  • 开发基础结构和发布流程的主要贡献者 Xunkai YoungSeok Yoon

以及 Tian LinSijia MaYoungSeok YoonYuqi LiHsiu WangQifei WangAlec GoChristine Kaeser-ChenYicheng FanElizabeth KempWilli GierkeArun VenkatesanAmy JangMike LiangDenis BruléGaurav NemadeKhanh LeVietLuiz GUStavo MartinsShuangfeng LiJared DukeErik VeeSarah Sirajuddin 以及 Tim Davis 都对本项目给予了大力支持,在此一并表示感谢。

原文:Easy ML mobile development with TensorFlow Lite Task Library
中文: 推出 TF Lite Task Library 接口,简化 ML移动端开发流程

<think>好的,我现在需要解决用户在使用TFLite模型时遇到的错误“The model does not have metadata”。首先,我得理解这个错误的原因。根据经验,TFLite模型的元数据(metadata)通常是模型转换或生成时添加的额外信息,用于说明模型的输入输出格式、预处理方法等。如果模型没有元数据,当用户尝试使用某些依赖元数据的API(比如TensorFlow Lite Task Library)时,就会报这个错误。 接下来,我需要考虑可能的解决方案。首先,用户可能是在转换模型到TFLite格式时没有启用元数据的添加。所以,第一个解决方案应该是检查模型转换的步骤,确保在转换时添加了必要的元数据。例如,使用TensorFlow的转换器时,可能需要设置相关的参数,或者使用特定的工具来附加元数据。 其次,用户可能使用的模型本身就没有包含元数据,这时候可能需要手动添加元数据。TensorFlow提供了Metadata Writer API,可以用来给现有的TFLite模型添加元数据。这需要用户了解模型的输入输出细节,比如数据类型、形状、归一化参数等,然后通过编写相应的代码来添加这些信息。 另外,用户可能在加载模型时使用了需要元数据的方法,比如使用Task Library中的ImageClassifier。如果模型没有元数据,这种方法自然会失败。因此,另一个解决方案是改用底层的Interpreter API,直接处理输入和输出张量,而不依赖元数据。虽然这需要用户自己处理数据的预处理和后处理,但可以绕过元数据缺失的问题。 此外,还需要提醒用户检查模型来源。如果模型是从第三方获取的,可能需要确认该模型是否应该包含元数据,或者是否需要联系提供者获取带有元数据的版本。有时候,用户可能错误地下载了不带元数据的模型文件,这时候重新下载正确的版本即可解决问题。 最后,验证解决方案的有效性。用户可以在添加元数据后,使用metadata_reader工具检查是否成功,或者尝试用Interpreter API加载模型进行推断,确认是否不再报错。同时,应该注意不同TensorFlow版本之间的差异,确保使用的API和工具与当前环境兼容。 在编写代码示例时,需要确保语法正确,特别是使用TFLite的Python API的部分。例如,正确导入相关的库,处理输入数据的格式,正确调用Interpreter的方法等。同时,提醒用户替换示例中的模型路径和输入数据,以适应他们的实际情况。 可能的相关问题包括如何转换模型并添加元数据,如何检查现有模型的元数据,以及如何处理没有元数据模型的输入输出。这些问题可以帮助用户更全面地理解和解决类似的问题。</think>针对TFLite模型加载时出现的"The model does not have metadata"错误,以下是分步解决方案: ### 1. 错误原因分析 该错误表明模型缺少元数据信息。TFLite元数据包含模型的输入/输出格式、预处理参数等结构化描述,使用TensorFlow Lite Task Library等高级API时必须依赖该信息[^1]。 ### 2. 解决方案 #### 方法一:添加元数据(推荐) ```python from tflite_support.metadata_writers import image_classifier from tflite_support.metadata_writers import writer_utils writer = image_classifier.MetadataWriter.create_for_inference( writer_utils.load_file("model.tflite"), input_norm_mean=[0], # 输入标准化参数 input_norm_std=[255], label_files=["labels.txt"] # 标签文件路径 ) writer_utils.save_file(writer.populate(), "model_with_metadata.tflite") ``` 使用metadata_reader验证: ```bash tflite_metadata_parser --model=model_with_metadata.tflite ``` #### 方法二:使用底层Interpreter API ```python import tensorflow as tf # 加载模型 interpreter = tf.lite.Interpreter(model_path="model.tflite") interpreter.allocate_tensors() # 手动处理输入输出 input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() # 示例预处理 input_data = ... # 根据实际输入形状和类型处理数据 interpreter.set_tensor(input_details[0]['index'], input_data) interpreter.invoke() output_data = interpreter.get_tensor(output_details[0]['index']) ``` ### 3. 模型转换验证 确保转换时包含元数据: ```python converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS] converter.optimizations = [tf.lite.Optimize.DEFAULT] # 添加元数据生成配置 converter._experimental_custom_metadata_writers = [...] # 自定义元数据生成器 tflite_model = converter.convert() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值