如何从Tensorflow.js(.json)模型转换为Tensorflow(SavedModel)或Tensorflo



我从Google下载了一个预先训练的Tensorflow.js(tfjs(的PoseNet模型,所以它是一个json文件。

但是,我想在Android上使用它,所以我需要.tflite模型。尽管有人在这里将类似的模型从tfjs"移植"到tflite,但我不知道他们转换了什么模型(PoseNet有许多变体(。我想自己做这些步骤。另外,我不想运行某人上传到堆栈溢出文件中的任意代码:

警告:小心不受信任的代码 - TensorFlow 模型是代码。有关详细信息,请参阅安全地使用 TensorFlow。张量流文档

有谁知道任何方便的方法可以做到这一点?

您可以通过查看 json 文件来了解您拥有的 tfjs 格式。它经常说"图模型"。它们之间的区别就在这里。

从tfjs图模型到保存模型(更常见(

使用 Patrick Levin 的 tfjs-to-tf。

import tfjs_graph_converter.api as tfjs
tfjs.graph_model_to_saved_model(
"savedmodel/posenet/mobilenet/float/050/model-stride16.json",
"realsavedmodel"
)
# Code below taken from https://www.tensorflow.org/lite/convert/python_api
converter = tf.lite.TFLiteConverter.from_saved_model("realsavedmodel")
tflite_model = converter.convert()
# Save the TF Lite model.
with tf.io.gfile.GFile('model.tflite', 'wb') as f:
f.write(tflite_model)

从 tfjs 层模型到 SavedModel

注意:这仅适用于图层模型格式,不适用于问题中的图形模型格式。我在这里写了它们之间的区别。


  1. 安装并使用tensorflowjs-convert将.json文件转换为Keras HDF5文件(来自另一个SO线程(。

在Mac上,您将遇到运行pyenv(修复(的问题,而在Z-shell上,pyenv无法正确加载(修复(。另外,一旦pyenv运行,请使用python -m pip install tensorflowjs而不是pip install tensorflowjs,因为pyenv没有为我更改pip使用的python。

按照tensorflowjs_converter指南进行操作后,运行tensorflowjs_converter以验证它是否正常工作,并且应该只是警告您Missing input_path argument。然后:

tensorflowjs_converter --input_format=tfjs_layers_model --output_format=keras tfjs_model.json hdf5_keras_model.hdf5
  1. 使用 TFLiteConverter 将 Keras HDF5 文件转换为 SavedModel(标准 Tensorflow 模型文件(或直接转换为.tflite文件。以下内容在 Python 文件中运行:
# Convert the model.
model = tf.keras.models.load_model('hdf5_keras_model.hdf5')
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert() 

# Save the TF Lite model.
with tf.io.gfile.GFile('model.tflite', 'wb') as f:
f.write(tflite_model)

或保存到已保存的模型:

# Convert the model.
model = tf.keras.models.load_model('hdf5_keras_model.hdf5')
tf.keras.models.save_model(
model, filepath, overwrite=True, include_optimizer=True, save_format=None,
signatures=None, options=None
)

相关内容

  • 没有找到相关文章

最新更新