Tensorflow服务在基本路径下找不到可使用的<MODEL>版本
deep-learning
object-detection
tensorflow
tensorflow-serving
6
0

我正在按照教程使用对象检测模型使用tensorflow serving 。我正在使用tensorflow对象检测来生成模型。我创建了使用冷冻模型这个出口(生成的冷冻样板工程使用python脚本)。

冻结的图形目录具有以下内容( variables目录中没有内容)

变量/

saved_model.pb

现在,当我尝试使用以下命令为模型提供服务时,

tensorflow_model_server --port=9000 --model_name=ssd --model_base_path=/serving/ssd_frozen/

它总是告诉我

...

tensorflow_serving / model_servers / server_core.cc:421](重新)添加模型:ssd 2017-08-07 10:22:43.892834:W tensorflow_serving / sources / storage_path / file_system_storage_path_source.cc:262]在基础下找不到可使用的ssd版本路径/ serving / ssd_frozen / 2017-08-07 10:22:44.892901:W tensorflow_serving / sources / storage_path / file_system_storage_path_source.cc:262]在基本路径/ serving / ssd_frozen /下找不到可使用的ssd版本

...

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

如您所知,对于新版本的tf服务,它不再支持过去由SessionBundle导出的模型格式,但现在支持SavedModelBuilder。

我想最好从旧的模型格式还原会话,然后通过SavedModelBuilder导出它。您可以使用它指示模型的版本。

    def export_saved_model(version, path, sess=None):
        tf.app.flags.DEFINE_integer('version', version, 'version number of the model.')
        tf.app.flags.DEFINE_string('work_dir', path, 'your older model  directory.')
        tf.app.flags.DEFINE_string('model_dir', '/tmp/model_name', 'saved model directory')
        FLAGS = tf.app.flags.FLAGS

        # you can give the session and export your model immediately after training 
        if not sess: 
            saver = tf.train.import_meta_graph(os.path.join(path, 'xxx.ckpt.meta'))
            saver.restore(sess, tf.train.latest_checkpoint(path))

        export_path = os.path.join(
            tf.compat.as_bytes(FLAGS.model_dir),
            tf.compat.as_bytes(str(FLAGS.version)))
        builder = tf.saved_model.builder.SavedModelBuilder(export_path)

        # define the signature def map here
        # ...

        legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
        builder.add_meta_graph_and_variables(
            sess, [tf.saved_model.tag_constants.SERVING],
            signature_def_map={
                'predict_xxx':
                    prediction_signature
            },
            legacy_init_op=legacy_init_op
        )

        builder.save()
        print('Export SavedModel!')

您可以在tf服务示例中找到上述代码的主要部分。最终,它将以可提供的格式生成SavedModel。

在此处输入图片说明

收藏
评论

我有同样的问题,原因是因为导出检测模型时,对象检测api没有分配模型的版本。但是,张量流服务要求您分配检测模型的版本号,以便您可以选择要服务的模型的不同版本。对于您的情况,应将检测模型(.pb文件和变量文件夹)放在以下文件夹中:/ serving / ssd_frozen / 1 /。这样,您将模型分配给版本1,并且由于只有一个版本,因此tensorflow服务将自动加载该版本。默认情况下,tensorflow服务将自动提供最新版本(即,最大数量的版本)。

请注意,创建1 /文件夹后,仍然需要将model_base_path设置为--model_base_path = / serving / ssd_frozen /。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号