关于 tflite 移动端部署中如何为 tflite 模型添加 metadata

文章目录

*
写在前面
第一步
第二步
第三步

+ metadata 简介
+ 拥有 metadata 的模型格式
+ 建立 metadata 工具
+ 使用 Flatbuffers Python API 添加 metadata
+
* 支持的 Input / Output 类型
* 打包 associated files(对图像分类 or 物体检测任务就肯定有 labelmap)
* Normalization and quantization parameters
* Examples
*
Image classification
第四步
总结

写在前面

本篇是 详解 TensorFlow TFLite 移动端(安卓)部署物体检测 demo(2)——量化模型 的辅助篇,主要记录如何向 tflite 模型中写入 metadata 的相关信息以适应 tflite 更新后的 lib_task_apilib_interpreter 两种方式。由于 tensorflow 相关文档更新得不及时,所以有些引导和线索获取得磕磕绊绊,本篇主要是我自己查找资料的过程。

2021.07 更新
最近在细看 models 项目的文档,发现 tensorflow 把移动端部署 tflite 模型更新需要添加 metadata 这个介绍放在 models 下面了……但是并没有从 examples 项目中的 object detection demo 引导 models 项目去……so,放上来,在 /models/research/object_detection/g3doc/running_on_mobile_tf2.md 中,介绍了三步,freeze、convert 和 metadata……哎脑瓜子嗡嗡地,能不能不要藏着掖着鸭,难道先接触 examples 再接触 models 项目就不配做人了嘛/(ㄒoㄒ)/~~ 而且起名叫 running on mobile tf2,你给的 object detection demo 明明只能在 tf1 下运行啊……

关于 tflite 移动端部署中如何为 tflite 模型添加 metadata

; 第一步

/examples/lite/examples/object_detection/android/README.md 中的 Switch between inference solutions (Task library vs TFLite Interpreter) 部分,此部分给了关于 lib_task_apilib_interpreter 两种方式的资料链接,以及在 Android Studio 中如何切换两种方式。

其中, lib_interpreter 的资料链接里面,目前没有更新(没有提及 metadata 的信息,但是实际上使用 interpreter 的方式也需要向 tflite 写入 metadata……),对本篇主题没有贡献,pass。所以下一步的信息是从 lib_task_api 的资料链接中获取的。

第二步

根据 lib_task_api 的资料链接,查看到其对 metadata 的兼容性要求(强制性 ):

关于 tflite 移动端部署中如何为 tflite 模型添加 metadata
下一步就点击上图中的链接,其内容主要围绕如何向 tflite 模型中添加 metadata。

; 第三步

这个链接中有关 metadata 的资料很多,整体方便对 metadata 格式的了解。但也可以跳着看,其中关键部分在于 建立 metadata 工具 以及 后面 Examples 下给的 Image Classification 的例子。

metadata 简介

TensorFlow Lite metadata 为模型描述提供了标准,是了解模型的功能及其输入/输出信息的重要来源,由两部分组成(1)人类可读部分和 (2)机器可读部分。

并且提到:在 TensorFlow Lite 托管模型和 TensorFlow Hub 上发布的所有图像模型都已添加 metadata。

拥有 metadata 的模型格式

关于 tflite 移动端部署中如何为 tflite 模型添加 metadata
Figure 1. TFLite model with metadata and associated files.

Model metadata 定义在 metadata_schema.fbs(FlatBuffer文件)中。如图1所示,它存储在 TFLite 模型模式的 metadata 字段中,名称为”TFLITE_METADATA”。某些模型可能附带相关文件,例如分类标签文件。这些文件使用 ZipFile 的 “append” mode(”a” mode)作为 ZIP 文件连接到原始模型文件的末尾。TFLite 解释器可以像以前一样使用新的文件格式。有关详细信息,请参见打包相关文件。请参阅下面关于如何构建、可视化和读取 metadata 的说明。

建立 metadata 工具

首先,要有一个环境用来运行 Tensorflow,略过了。在环境中安装 tflite-support。

pip install tflite-support

使用 Flatbuffers Python API 添加 metadata

架构中的模型 metadate 包括三个部分:

  • 模型信息:模型的总体描述以及许可条款等项。请参见 ModelMetadata。
  • 输入信息:对输入和所需的预处理(如规范化)的描述。请参阅 SubGraphMetadata.input_tensor_metadata。
  • 输出信息:描述输出和所需的后处理,如映射到标签。请参见 SubGraphMetadata.output_tensor_metadata。

由于 TensorFlow Lite 此时仅支持单个子图,因此在显示 metadata 和生成代码时,TensorFlow Lite 代码生成器和 Android Studio ML 绑定功能将使用 ModelMetadata.name 和 ModelMetadata.description,而不是 SubGraphMetadata.name 和 SubGraphMetadata.description。

支持的 Input / Output 类型

对于输入和输出,TensorFlow Lite metadata 在设计时并没有考虑特定的模型类型,而是考虑输入和输出类型。不管模型在功能上做什么,只要输入和输出类型包含以下内容或以下内容的组合,TensorFlow Lite metadata 就支持它:

  • 特征:无符号整数或浮点数32。
  • 图像:metadata 当前支持 RGB 和灰度图像。
  • 边界框:矩形形状边界框。该模式支持多种编号方案。

打包 associated files(对图像分类 or 物体检测任务就肯定有 labelmap)

TensorFlow Lite 模型可能附带不同的相关文件。例如,自然语言模型通常有将单词片段映射到单词 id 的 voab 文件;分类模型可能具有指示对象类别的标签文件。如果没有关联的文件(如果有),模型将无法正常工作。

现在,关联的文件可以通过metadata Python 库与模型绑定。新的 TensorFlowLite 模型将成为一个包含模型和相关文件的 zip 文件。它可以用普通的 zip 工具解包。此新模型格式始终使用相同的文件扩展名 .tflite。它与现有 TFLite 框架和解释器兼容。有关详细信息,请参见将 metadata 和相关文件打包到模型中。

相关文件信息可以记录在 metadata 中。根据文件类型和文件附着到的位置(即 ModelMetadata、SubgraphMetData 和 TensormeTata),TensorFlow Lite Android 代码生成器可以自动将相应的预/后处理应用于对象。有关详细信息,请参阅架构中每个关联文件类型的section。

Normalization and quantization parameters

归一化是机器学习中常用的数据预处理技术,目标是将值更改为一个共同的尺度,而不扭曲值范围中的差异。模型量化是一种允许降低权重表示精度的技术,并且可以选择激活存储和计算。

在预处理和后处理方面,归一化和量化是两个独立的步骤。以下是细节。

关于 tflite 移动端部署中如何为 tflite 模型添加 metadata
在处理 uint8 模型的图像数据时,标准化和量化有时被跳过。当像素值的范围为 [0,255]。但总的来说,你应该对数据进行归一化和量化处理适用时的参数。

TensorFlow Lite Task Library 可以为您处理规范化,如果您在 metadata 中设置 NormalizationOptions 。量化与去量化处理总是被封装的。

; Examples

Note: The export directory specified has to exist before you run the script; it does not get created as part of the process.

You can find examples on how the metadata should be populated for different types of models here:

Image classification

Download the script here, which populates metadata to mobilenet_v1_0.75_160_quantized.tflite. Run the script like this:

python ./metadata_writer_for_image_classifier.py \
    --model_file=./model_without_metadata/mobilenet_v1_0.75_160_quantized.tflite \
    --label_file=./model_without_metadata/labels.txt \
    --export_directory=model_with_metadata

这个下载链接一看就知道对应的是 examples 项目下的 /examples/lite/examples/image_classification/metadata/metadata_writer_for_image_classifier.py,其中的很多细节篇幅原因我不再讲了,总之是写入模型相关信息的。

看到这里的时候,还是有点懵的,难道这是离终点最近的资料了?我要照着分类的示例写物体检测的吗?

第四步

根据这个示例文件,我追看了 tflite_support 下面的 metadata_writer,发现其下有多种领域任务相关的包,其中也有 object detection,所以我更加坚定了,官方应该提供的了,只是没有很明显地放出来。

from tensorflow_lite_support.metadata.python.metadata_writers import audio_classifier
from tensorflow_lite_support.metadata.python.metadata_writers import image_classifier
from tensorflow_lite_support.metadata.python.metadata_writers import image_segmenter
from tensorflow_lite_support.metadata.python.metadata_writers import metadata_info
from tensorflow_lite_support.metadata.python.metadata_writers import nl_classifier
from tensorflow_lite_support.metadata.python.metadata_writers import object_detector
from tensorflow_lite_support.metadata.python.metadata_writers import writer_utils

之后我开始着手在 tensorflow 源码、examples 项目、models 项目下搜寻 metadata 的示例信息。终于到达了这里

关于 tflite 移动端部署中如何为 tflite 模型添加 metadata

关于 tflite 移动端部署中如何为 tflite 模型添加 metadata

; 总结

安装 tflite-support,然后使用官方代码为 tflite 模型添加 metadata 就好。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tflite-support
pip install --upgrade pip

我还反思了自己,在 app README 文件一路走来,是不是错过了什么信息,倒置找半天才找到官方的示例。回头看了一遍,真的没有啊……要我说,给 tflite 模型增加 metadata 就应该直接把我最后找到的这个链接放进 app README 中啊……算了,README 连添加 metadata 这一步都压根儿没讲(/(ㄒoㄒ)/~~)

Original: https://blog.csdn.net/Abandon_first/article/details/118336060
Author: Abandon_first
Title: 关于 tflite 移动端部署中如何为 tflite 模型添加 metadata

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/521587/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球