如何将 Tensorflow 对象检测 API 模型转换为 TFLite?
How to convert Tensorflow Object Detection API model to TFLite?
我正在尝试将 Tensorflow 对象检测模型(ssd-mobilenet-v2-fpnlite,从 TensorFlow 2 Detection Model Zoo) to TFLite. First of all, I train the model using the model_main_tf2.py and then I use the export_tflite_graph_tf2.py 转换为导出保存的模型 (.pb)。但是,在将 .pb 文件转换为 .tflite 时,它会抛出此 error:
OSError: SavedModel file does not exist at: /content/gdrive/My Drive/models/research/object_detection/fine_tuned_model/saved_model/saved_model.pb/{saved_model.pbtxt|saved_model.pb}
要转换我使用的 .pb 文件:
import tensorflow as tf
SAVED_MODEL_PATH = os.path.join(os.getcwd(),'object_detection', 'fine_tuned_model', 'saved_model', 'saved_model.pb')
# SAVED_MODEL_PATH: '/content/gdrive/My Drive/models/research/object_detection/exported_model/saved_model/saved_model.pb'
converter = tf.lite.TFLiteConverter.from_saved_model(SAVED_MODEL_PATH)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.experimental_new_converter = True
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()
open("detect.tflite", "wb").write(tflite_model)
或命令行中的“tflite_convert”,但出现相同的错误。我还尝试 运行 使用最新的 tf-nightly 版本 here,但结果是一样的。我尝试通过各种方式传递路径,似乎 .pd 写得不好(不是正确的文件)。有没有办法设法将模型转换为 tflite,以便将其实现为 android?谢谢!
我没有足够的声誉来发表评论,但这里的问题似乎是你的 SAVED_MODEL_PATH
。
您可以尝试对路径进行硬编码并删除 .pb
文件。我不记得这里到底有什么技巧,但肯定是由于路径
您的 saved_model 路径应该是“/content/gdrive/My Drive/models/research/object_detection/fine_tuned_model/saved_model/”。它是文件夹而不是该文件夹中的文件
为了快速测试,请尝试在终端中输入
tflite_convert \
--saved_model_dir="path to saved_folder" \
--output_file="path to tflite file u want to save"
我正在尝试将 Tensorflow 对象检测模型(ssd-mobilenet-v2-fpnlite,从 TensorFlow 2 Detection Model Zoo) to TFLite. First of all, I train the model using the model_main_tf2.py and then I use the export_tflite_graph_tf2.py 转换为导出保存的模型 (.pb)。但是,在将 .pb 文件转换为 .tflite 时,它会抛出此 error:
OSError: SavedModel file does not exist at: /content/gdrive/My Drive/models/research/object_detection/fine_tuned_model/saved_model/saved_model.pb/{saved_model.pbtxt|saved_model.pb}
要转换我使用的 .pb 文件:
import tensorflow as tf
SAVED_MODEL_PATH = os.path.join(os.getcwd(),'object_detection', 'fine_tuned_model', 'saved_model', 'saved_model.pb')
# SAVED_MODEL_PATH: '/content/gdrive/My Drive/models/research/object_detection/exported_model/saved_model/saved_model.pb'
converter = tf.lite.TFLiteConverter.from_saved_model(SAVED_MODEL_PATH)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.experimental_new_converter = True
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()
open("detect.tflite", "wb").write(tflite_model)
或命令行中的“tflite_convert”,但出现相同的错误。我还尝试 运行 使用最新的 tf-nightly 版本 here,但结果是一样的。我尝试通过各种方式传递路径,似乎 .pd 写得不好(不是正确的文件)。有没有办法设法将模型转换为 tflite,以便将其实现为 android?谢谢!
我没有足够的声誉来发表评论,但这里的问题似乎是你的 SAVED_MODEL_PATH
。
您可以尝试对路径进行硬编码并删除 .pb
文件。我不记得这里到底有什么技巧,但肯定是由于路径
您的 saved_model 路径应该是“/content/gdrive/My Drive/models/research/object_detection/fine_tuned_model/saved_model/”。它是文件夹而不是该文件夹中的文件
为了快速测试,请尝试在终端中输入
tflite_convert \
--saved_model_dir="path to saved_folder" \
--output_file="path to tflite file u want to save"