【问题标题】:Google Cloud ML returns empty predictions with object detection modelGoogle Cloud ML 使用对象检测模型返回空预测
【发布时间】:2018-10-09 15:47:45
【问题描述】:

我是第一次将模型部署到 Google Cloud ML。我已经在本地训练和测试了模型,它仍然需要工作,但它工作正常。

我已将其上传到 Cloud ML,并使用我在本地测试的相同示例图像进行了测试,我知道这些图像可以检测到。 (使用this tutorial

当我这样做时,我没有得到任何检测。起初我以为我上传了错误的检查点,但我测试了相同的检查点可以离线处理这些图像,我不知道如何进一步调试。

当我查看文件的结果时

prediction.results-00000-of-00001

只是空的

和文件

prediction.errors_stats-00000-of-00001

包含以下文本:('No JSON object could be decoded', 1)

这是检测已运行但未检测到的迹象,还是运行时出现问题?

也许问题是我准备上传的图片有误?

日志显示完全没有错误

谢谢

编辑:

我进行了更多测试,并尝试使用命令“gcloud ml-engine local predict”而不是通常的本地代码在本地运行模型。我得到和网上一样的结果,完全没有答案,也没有错误信息

编辑 2: 我正在使用 TF_Record 文件,所以我不理解 JSON 响应。这是我的命令的副本:

gcloud ml-engine 作业提交预测 ${JOB_ID} --data- 格式=tf_record \ --input-paths=gs://MY_BUCKET/data_dir/inputs.tfr \ --output-path=gs://MY_BUCKET/data_dir/version4 \ --region us-central1 \ --model="gcp_detector" \ --version="Version4"

【问题讨论】:

  • 如果没有MCV sample 或更详细的说明您正在做什么以及如何做,很难解决您的问题。但是,鉴于显示的错误消息,我想说问题确实出在输入数据中(如果您使用本地/在线预测,它应该是一个 JSON 文件,如果您使用批量预测,它应该是一个 TFRecord)。您分享的教程提供了一个将 JPG 图像转换为有效 JSON 文件的 sn-p。你在用吗?如果没有,您如何将图像转换为 JSON 作为输入?
  • @dsesto 这是有道理的,但是,我使用的是 TF_Record 文件,所以我不理解 JSON 响应。这是我的命令的副本: gcloud ml-engine jobs submit prediction ${JOB_ID} --data-format=tf_record \ --input-paths=gs://my_inference/data_dir/inputs.tfr \ --output-path =gs://my_inference/data_dir/version4 \ --region us-central1 \ --model="gcp_detector" \ --version="Version4"
  • 如果您需要添加代码 sn-ps 和/或命令,请通过编辑问题做得更好,因为使用正确的格式更容易理解。此外,无需共享存储桶/项目名称,因此您可以使用 MY_BUCKET 之类的内容混淆该部分。
  • 回到主题,在您的问题中,您说过您尝试运行模型 localonline,正如我在上一篇中解释的那样评论,这些预测模式适用于 JSON 输入数据,而不是 TFRecord。但是,您在评论中分享的命令对应于批量预测,因此我认为这个主题有些混乱。我建议您首先使用 JSON 在本地测试您的模型(使用几个样本,2-3 个实例)。一旦您知道它有效,您就可以使用 Cloud ML Engine 在批处理/在线模式下运行预测,具体取决于您的需要。
  • @dsesto 我了解批量预测和单次预测之间的区别。我在进行单次离线预测时使用 json 文件。我发现这个用户和我有同样的问题,“没有 JSON 对象可以被解码”消息。 stackoverflow.com/questions/45984227/…

标签: google-cloud-ml


【解决方案1】:

使用以下命令

模型导出:

# From tensorflow/models
export PYTHONPATH=$PYTHONPATH:/home/[user]/repos/DeepLearning/tools/models/research:/home/[user]/repos/DeepLearning/tools/models/research/slim
cd /home/[user]/repos/DeepLearning/tools/models/research
python object_detection/export_inference_graph.py \
    --input_type encoded_image_string_tensor \
    --pipeline_config_path /home/[user]/[path]/ssd_mobilenet_v1_pets.config \
    --trained_checkpoint_prefix /[path_to_checkpoint]/model.ckpt-216593 \
    --output_directory /[output_path]/output_inference_graph.pb

云端执行

gcloud ml-engine jobs submit prediction ${JOB_ID} --data-format=TF_RECORD \
    --input-paths=gs://my_inference/data_dir/inputs/* \
    --output-path=${YOUR_OUTPUT_DIR}  \
    --region us-central1 \
    --model="model_name" \
    --version="version_name" 

我不知道究竟是什么改变解决了这个问题,但有一些小的改变,比如 tf_record 现在是 TF_RECORD。希望这对其他人有帮助。向谷歌支持提供帮助的道具(他们提出了更改建议)

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 2018-03-30
    • 2018-12-18
    • 2018-01-30
    • 2018-10-03
    • 1970-01-01
    • 2019-06-17
    • 2019-02-08
    相关资源
    最近更新 更多