gpt4 book ai didi

python - 使用 tensorflow 服务为经过训练的对象检测模型提供服务

转载 作者:行者123 更新时间:2023-12-01 09:05:44 25 4
gpt4 key购买 nike

我很难为 tensorflow 模型提供服务,该模型是我使用 tensorflow 的对象检测 API 从预训练模型中训练的。

我已经用 model_main.py 训练了一个模型 (Resnet101)脚本和表演似乎已准备好用于生产使用。因此,我创建了一个运行tensorflow-serve 的docker 容器。我已经成功地提供了在培训过程结束时创建的模型。我猜这个功能是相当新的,但看起来 model_main.py脚本创建一个 servable在训练结束时。 (我在“train_dir”中发现了一个名为“export”的新文件夹,其中包含 saved_model.pbvariables variables.data-00000-of-00001variables.index )。然而,我已经设法为这个模型提供服务,并从 tensorflow_model_server 输出。看起来像这样:

2018-08-29 07:47:50.268810: I tensorflow_serving/core/loader_harness.cc:86] Successfully loaded servable version {name: my_model version: 123}
2018-08-29 07:47:50.271480: I tensorflow_serving/model_servers/main.cc:327] Running ModelServer at 0.0.0.0:8500 ...

所以服务似乎有效。

问题是,我很难用 python 客户端连接到服务器。我修改了 tensorflow 服务启动示例附带的客户端文件,如下所示:

from __future__ import print_function

# This is a placeholder for a Google-internal import.

import grpc
import tensorflow as tf

from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2_grpc


tf.app.flags.DEFINE_string('server', 'localhost:9000',
'PredictionService host:port')
tf.app.flags.DEFINE_string('image', '', 'path to image in JPEG format')
FLAGS = tf.app.flags.FLAGS

def main(_):
channel = grpc.insecure_channel(FLAGS.server)
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
# Send request
with open(FLAGS.image, 'rb') as f:
# See prediction_service.proto for gRPC request/response details.
data = f.read()
request = predict_pb2.PredictRequest()
request.model_spec.name = 'my_model'
request.model_spec.signature_name = 'serving_default'
request.inputs['serialized_example'].CopyFrom(
tf.contrib.util.make_tensor_proto(data, shape=[1]))
result = stub.Predict(request, 10.0) # 10 secs timeout
print(result)


if __name__ == '__main__':
tf.app.run()

如果我使用正确设置的端口运行此脚本,我会从模型服务器内部收到错误消息:

2018-08-29 08:32:48.426016: W external/org_tensorflow/tensorflow/core/framework/op_kernel.cc:1275] OP_REQUIRES failed at example_parsing_ops.cc:240 : Invalid argument: Could not parse example input, value: '����

客户端返回一些随机的二进制字符串。但显然存在连接并且请求到达服务器。

在我看来,客户端的请求有问题,但我不知道如何正确设置它。我没有找到任何有关默认签名 key 的信息,即 model_main.py脚本用于导出经过训练的模型,并尝试使用训练检查点和修改后的 exporter.py 创建新的服务。脚本失败。

有人知道在这种情况下如何正确设置客户的请求吗?

最佳答案

我在处理代码库时遇到了完全相同的问题。我找到的解决方案是模型导出时输入类型错误。在exporter.py 脚本中,不同的输入选项为['image_tensor', 'encoded_image_string_tensor', 'tf_example']。当我导出模型时,我设置了 INPUT_TYPE=image_tensor。使用 INPUT_TYPE=encoded_image_string_tensor 导出相同的模型后,客户端和服务器通信正常。

关于python - 使用 tensorflow 服务为经过训练的对象检测模型提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52073590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com