张量流服务预测不适用于对象检测宠物示例
tensorflow serving prediction not working with object detection pets example
我尝试使用 tensorflow 对象检测宠物示例对 gcloud ml-engine 进行预测,但它不起作用。
我使用这个例子创建了一个检查点:https://github.com/tensorflow/models/blob/master/object_detection/g3doc/running_pets.md
在 tensorflow 团队的帮助下,我能够创建一个 saved_model 以上传到 gcloud ml-engine:
https://github.com/tensorflow/models/issues/1811
现在,我可以将模型上传到 gcloud ml-engine。但不幸的是,我无法对模型进行正确的预测请求。每次我尝试预测时,我都会得到同样的错误:
Input instances are not in JSON format.
我正在尝试使用
进行在线预测
gcloud ml-engine predict --model od_test --version v1 --json-instances prediction_test.json
我正在尝试使用
进行批量预测
gcloud ml-engine jobs submit prediction "prediction7"
--model od_test
--version v1
--data-format TEXT
--input-paths gs://ml_engine_test1/prediction_test.json
--output-path gs://ml_engine_test1/prediction_output
--region europe-west1
我想将图像列表作为 unit8 矩阵提交,因此对于导出,我使用的是输入类型 image_tensor
。
如此处文档所述:https://cloud.google.com/ml-engine/docs/concepts/prediction-overview#prediction_input_data,输入 json 应具有特定格式。但是在线预测的格式和批量预测的格式都不起作用。我最近的测试是一个包含以下内容的文件:
{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}
以及内容:
{"images": [0.0, 0.3, 0.1], "key": 3}
{"images": [0.0, 0.7, 0.1], "key": 2}
none 他们在工作。谁能帮帮我,输入格式应该怎样?
编辑
批处理的错误是
{
insertId: "1a26yhdg2wpxvg6"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.ml.api.v1beta1.PredictionLogEntry"
error_detail: {
detail: "No JSON object could be decoded"
input_snippet: "Input snippet is unavailable."
}
message: "No JSON object could be decoded"
}
logName: "projects/tensorflow-test-1-168615/logs/worker"
payload: {
@type: "type.googleapis.com/google.cloud.ml.api.v1beta1.PredictionLogEntry"
error_detail: {
detail: "No JSON object could be decoded"
input_snippet: "Input snippet is unavailable."
}
message: "No JSON object could be decoded"
}
receiveTimestamp: "2017-07-28T12:31:23.377623911Z"
resource: {
labels: {
job_id: "prediction10"
project_id: "tensorflow-test-1-168615"
task_name: ""
}
type: "ml_job"
}
severity: "ERROR"
timestamp: "2017-07-28T12:31:23.377623911Z"
}
我认为特定模型需要二进制图像数据进行预测。
我希望您的请求大致如下:
{
instances: [
{ "images": { "b64": "image-bytes-base64-encoded" }, "key": 1 },
...
]
}
希望这有助于找到可行的解决方案。如果没有,请告诉我们,我会尽力为您提供更明确的信息。
如果您使用 gcloud 提交您的 gcloud ml-engine local predict
请求以及批量预测,您导出的模型接受如下输入进行预测。
{"inputs": [[[242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 23]]]}
{"inputs": [[[232, 242, 219], [242, 240, 239], [242, 240, 239], [242, 242, 239], [242, 240, 123]]]}
...
如果您直接向服务发送请求(即,不使用 gcloud
),请求正文将如下所示:
{"instances": [{"inputs": [[[242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 23]]]}]}
{"instances": [{"inputs": [[[232, 242, 219], [242, 240, 239], [242, 240, 239], [242, 242, 239], [242, 240, 123]]]}]}
输入张量名称应为"inputs",因为它是what we've specified in the signature.inputs.The value of each JSON object is a 3-D array as you can tell from here。外部维度为 None 以支持批量输入。不需要 "instances"(除非你直接使用 http API)。请注意,您不能在输入中指定 "key",除非您修改图表以包含额外的占位符并使用 tf.identity 原封不动地输出它。
另外如the github issue所述,由于模型需要大量内存,在线服务可能无法使用。我们正在努力。
我尝试使用 tensorflow 对象检测宠物示例对 gcloud ml-engine 进行预测,但它不起作用。
我使用这个例子创建了一个检查点:https://github.com/tensorflow/models/blob/master/object_detection/g3doc/running_pets.md
在 tensorflow 团队的帮助下,我能够创建一个 saved_model 以上传到 gcloud ml-engine: https://github.com/tensorflow/models/issues/1811
现在,我可以将模型上传到 gcloud ml-engine。但不幸的是,我无法对模型进行正确的预测请求。每次我尝试预测时,我都会得到同样的错误:
Input instances are not in JSON format.
我正在尝试使用
进行在线预测gcloud ml-engine predict --model od_test --version v1 --json-instances prediction_test.json
我正在尝试使用
进行批量预测gcloud ml-engine jobs submit prediction "prediction7"
--model od_test
--version v1
--data-format TEXT
--input-paths gs://ml_engine_test1/prediction_test.json
--output-path gs://ml_engine_test1/prediction_output
--region europe-west1
我想将图像列表作为 unit8 矩阵提交,因此对于导出,我使用的是输入类型 image_tensor
。
如此处文档所述:https://cloud.google.com/ml-engine/docs/concepts/prediction-overview#prediction_input_data,输入 json 应具有特定格式。但是在线预测的格式和批量预测的格式都不起作用。我最近的测试是一个包含以下内容的文件:
{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}
以及内容:
{"images": [0.0, 0.3, 0.1], "key": 3}
{"images": [0.0, 0.7, 0.1], "key": 2}
none 他们在工作。谁能帮帮我,输入格式应该怎样?
编辑
批处理的错误是
{
insertId: "1a26yhdg2wpxvg6"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.ml.api.v1beta1.PredictionLogEntry"
error_detail: {
detail: "No JSON object could be decoded"
input_snippet: "Input snippet is unavailable."
}
message: "No JSON object could be decoded"
}
logName: "projects/tensorflow-test-1-168615/logs/worker"
payload: {
@type: "type.googleapis.com/google.cloud.ml.api.v1beta1.PredictionLogEntry"
error_detail: {
detail: "No JSON object could be decoded"
input_snippet: "Input snippet is unavailable."
}
message: "No JSON object could be decoded"
}
receiveTimestamp: "2017-07-28T12:31:23.377623911Z"
resource: {
labels: {
job_id: "prediction10"
project_id: "tensorflow-test-1-168615"
task_name: ""
}
type: "ml_job"
}
severity: "ERROR"
timestamp: "2017-07-28T12:31:23.377623911Z"
}
我认为特定模型需要二进制图像数据进行预测。
我希望您的请求大致如下:
{
instances: [
{ "images": { "b64": "image-bytes-base64-encoded" }, "key": 1 },
...
]
}
希望这有助于找到可行的解决方案。如果没有,请告诉我们,我会尽力为您提供更明确的信息。
如果您使用 gcloud 提交您的 gcloud ml-engine local predict
请求以及批量预测,您导出的模型接受如下输入进行预测。
{"inputs": [[[242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 23]]]}
{"inputs": [[[232, 242, 219], [242, 240, 239], [242, 240, 239], [242, 242, 239], [242, 240, 123]]]}
...
如果您直接向服务发送请求(即,不使用 gcloud
),请求正文将如下所示:
{"instances": [{"inputs": [[[242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 239], [242, 240, 23]]]}]}
{"instances": [{"inputs": [[[232, 242, 219], [242, 240, 239], [242, 240, 239], [242, 242, 239], [242, 240, 123]]]}]}
输入张量名称应为"inputs",因为它是what we've specified in the signature.inputs.The value of each JSON object is a 3-D array as you can tell from here。外部维度为 None 以支持批量输入。不需要 "instances"(除非你直接使用 http API)。请注意,您不能在输入中指定 "key",除非您修改图表以包含额外的占位符并使用 tf.identity 原封不动地输出它。
另外如the github issue所述,由于模型需要大量内存,在线服务可能无法使用。我们正在努力。