saved_model/{saved_model.pbtxt|saved_model.pb} 处不存在 SavedModel 文件

Dhe*_*oho 5 artificial-intelligence tensorflow

我尝试在 Tensorflow 2 上运行 Tensorflow 对象检测 API,但收到该错误,有人可以提供解决方案吗?

\n\n

代码 :

\n\n

装载机

\n\n
def load_model(model_name):\n  base_url = \'http://download.tensorflow.org/models/object_detection/\'\n  model_file = model_name + \'.tar.gz\'\n  model_dir = tf.keras.utils.get_file(\n    fname=model_name, \n    origin=base_url + model_file,\n    untar=True)\n\xe2\x80\x8b\n  model_dir = pathlib.Path(model_dir)/"saved_model"\n\xe2\x80\x8b\n  model = tf.saved_model.load(str(model_dir))\n  model = model.signatures[\'serving_default\']\n\xe2\x80\x8b\n  return model\n
Run Code Online (Sandbox Code Playgroud)\n\n

加载标签图

\n\n

标签将索引映射到类别名称,因此当我们的卷积网络预测为 5 时,我们知道这对应于飞机。这里我们使用内部实用函数,但是任何返回将整数映射到适当字符串标签的字典的东西都可以

\n\n
# List of the strings that is used to add correct label for each box.\nPATH_TO_LABELS = \'data/mscoco_label_map.pbtxt\'\ncategory_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS, use_display_name=True)\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了简单起见,我们将在 2 个图像上进行测试:

\n\n
# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.\nPATH_TO_TEST_IMAGES_DIR = pathlib.Path(\'test_images\')\nTEST_IMAGE_PATHS = sorted(list(PATH_TO_TEST_IMAGES_DIR.glob("*.jpg")))\nTEST_IMAGE_PATHS\n
Run Code Online (Sandbox Code Playgroud)\n\n

检测

\n\n

加载对象检测模型:

\n\n
model_name = \'ssd_mobilenet_v1_coco_11_06_2017\'\ndetection_model = load_model(model_name)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到了这个错误

\n\n
OSError                                   Traceback (most recent call last)\n<ipython-input-7-e89d9e690495> in <module>\n      1 model_name = \'ssd_mobilenet_v1_coco_11_06_2017\'\n----> 2 detection_model = load_model(model_name)\n\n<ipython-input-4-f8a3c92a04a4> in load_model(model_name)\n      9   model_dir = pathlib.Path(model_dir)/"saved_model"\n     10 \n---> 11   model = tf.saved_model.load(str(model_dir))\n     12   model = model.signatures[\'serving_default\']\n     13 \n\nD:\\Anaconda\\lib\\site-packages\\tensorflow_core\\python\\saved_model\\load.py in load(export_dir, tags)\n    515     ValueError: If `tags` don\'t match a MetaGraph in the SavedModel.\n    516   """\n--> 517   return load_internal(export_dir, tags)\n    518 \n    519 \n\nD:\\Anaconda\\lib\\site-packages\\tensorflow_core\\python\\saved_model\\load.py in load_internal(export_dir, tags, loader_cls)\n    524     # sequences for nest.flatten, so we put those through as-is.\n    525     tags = nest.flatten(tags)\n--> 526   saved_model_proto = loader_impl.parse_saved_model(export_dir)\n    527   if (len(saved_model_proto.meta_graphs) == 1\n    528       and saved_model_proto.meta_graphs[0].HasField("object_graph_def")):\n\nD:\\Anaconda\\lib\\site-packages\\tensorflow_core\\python\\saved_model\\loader_impl.py in parse_saved_model(export_dir)\n     81                   (export_dir,\n     82                    constants.SAVED_MODEL_FILENAME_PBTXT,\n---> 83                    constants.SAVED_MODEL_FILENAME_PB))\n     84 \n     85 \n\nOSError: SavedModel file does not exist at: C:\\Users\\Asus\\.keras\\datasets\\ssd_mobilenet_v1_coco_11_06_2017\\saved_model/{saved_model.pbtxt|saved_model.pb}\n
Run Code Online (Sandbox Code Playgroud)\n

V D*_*emo 1

我假设您正在此处运行detector_model_zoo 教程。请注意,也许您可​​以将模型名称从 更改ssd_mobilenet_v1_coco_11_06_2017ssd_mobilenet_v1_coco_2017_11_17,这将解决我测试中的问题。

这些文件的内容如下所示:

# ssd_mobilenet_v1_coco_11_06_2017
frozen_inference_graph.pb  model.ckpt.data-00000-of-00001  model.ckpt.meta
graph.pbtxt        model.ckpt.index

# ssd_mobilenet_v1_coco_2017_11_17
checkpoint         model.ckpt.data-00000-of-00001  model.ckpt.meta
frozen_inference_graph.pb  model.ckpt.index        saved_model
Run Code Online (Sandbox Code Playgroud)

参考:

  1. 在哪里可以找到张量流预训练模型(列表或下载链接)
  2. 检测模型动物园

  3. 使用SavedModel格式官方博客