Skip to main content
您可以将 TensorFlow 模型转换为 LiteRT 格式,并针对设备端推理进行优化。有关 LiteRT 模型转换的更多信息,请参阅模型转换概述。 LiteRT 模型转换支持以下输出精度:
  • 32 位浮点精度
  • 16 位浮点精度
  • uint8/int8 精度(模型量化)
下表列出了 TensorFlow 框架中提供的转换方法: TensorFlow 模型转换方法 Python API 提供了更大的灵活性,可根据您的需求转换、优化和量化模型。

使用 Python API 转换模型

下表列出了 TensorFlow 提供的用于将 TensorFlow SavedModel 或 Keras 模型转换为 LiteRT 的 Python API: 用于转换模型的 TensorFlow Python API

使用 Python API 转换 TensorFlow SavedModel

以下示例将 SavedModel 格式的 TensorFlow 模型转换为 LiteRT:
转换后的 LiteRT 模型未经量化,其数据采用 32 位浮点精度。

使用 Python API 转换 Keras 模型

以下示例将 Keras 模型转换为 LiteRT:
转换后的 LiteRT 模型未经量化,其数据采用 32 位浮点精度。

量化模型

使用 Python API 将模型转换为 LiteRT 格式后,您可以对其进行量化。量化通过将高精度值(例如 32 位浮点数)转换为低精度格式(例如 8 位整数),从而减小模型的大小和计算需求。 神经网络模型的量化涉及以下步骤:
1

量化权重和偏置

权重和偏置已作为训练模型的一部分存在,无需额外的输入数据即可量化。这是一个静态步骤。
2

量化激活层

激活层输出的范围取决于前向传播期间的输入数据。需要一组样本输入(称为校准数据集或代表性数据集)来确定最小和最大范围。
要将 TensorFlow 浮点模型量化为 LiteRT 量化模型,LiteRT 提供了训练后量化技术。有关更多信息,请参阅训练后量化。 LiteRT 支持以下类型的训练后量化:

使用动态范围量化对模型进行量化

在动态范围量化中,权重和偏置从浮点精度静态量化为 8 位整数精度。激活层范围仍保持 32 位浮点精度。 为降低推理期间的延迟,动态范围算子会:
  • 根据激活值的范围将其量化为 8 位整数精度。
  • 使用 8 位权重和激活值执行计算。
此步骤仅量化权重,不需要额外的校准数据。
以下脚本将 TensorFlow 模型转换为 LiteRT 并应用动态范围量化:

使用全整数量化对模型进行量化

在全整数量化中,使用代表性数据集来量化模型中的激活层。这样生成的模型更适合定点整数硬件,例如 Qualcomm 开发套件上的 Hexagon 张量处理器。 以下脚本将 TensorFlow 模型转换并量化为全整数量化的 LiteRT 模型:
转换器中的 supported_ops 将 target_spec 设置为 tf.lite.OpsSet.TFLITE_BUILTINS_INT8。

使用 tflite_convert 命令转换模型

您可以使用 TensorFlow pip 包中附带的 tflite_convert CLI 工具,对 TensorFlow v2.x 及更高版本进行离线转换。
tflite_convert 命令仅适用于基本转换。对于训练后整数量化,请使用 Python API。
tflite_convert 命令需要 --output_file 标志,以及 --saved_model_dir 或 --keras_model_file 中的一个。运行 tflite_convert --help 可查看完整的选项列表。

转换 SavedModel

要转换 SavedModel 格式的 TensorFlow 模型,请运行:

转换 Keras H5 模型

要转换 Keras H5 模型,请运行: