如何将 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"