首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google批处理预测错误:运行图形期间的异常:断言失败:[无法将字节解码为JPEG、PNG、GIF或BMP]

Google批处理预测错误:运行图形期间的异常:断言失败:[无法将字节解码为JPEG、PNG、GIF或BMP]
EN

Stack Overflow用户
提问于 2018-06-03 12:14:56
回答 1查看 284关注 0票数 1

我在Google中部署了一个对象检测模型,我可以制作在线预测,但是失败了使批处理预测,堆栈驱动程序日志中的错误如下:

运行图形期间的异常:断言失败:无法将字节解码为JPEG、PNG、GIF或BMP[Node: map/while/decode_image/cond_jpeg/cond_png/cond_gif/Assert_1/Assert = Assertdevice="/job:localhost/replica:0/task:0/device:CPU:0"]]

我尝试了gcloud命令和python,但没有成功。用于在线预测的request.json文件。

代码语言:javascript
复制
{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAAAAHAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAA2gITAAMAAAABAAEAAIdpAAQAAAABAAAA7oglAAQAAAABAAAC0gAAAyhYaWFvbWkAAE1.....}}

它已经被b64编码了。它适用于在线预测:

代码语言:javascript
复制
gcloud ml-engine predict --model object_detector  --version v2 --json-instances request.json

但是对于批处理预测失败,下面是batch_request.json文件的两行

代码语言:javascript
复制
{'instances': [{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAHAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}]}
{'instances': [{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAAAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}]}

用于批处理预测的python请求的主体:

代码语言:javascript
复制
{'jobId': 'mycloud_machine_object_detector_115252',
'predictionInput': {'dataFormat': 'TEXT',
'inputPaths': 'gs://my-bucket/object-detection/batch_request.json',
'outputPath': 'gs://my-bucket/object-detection/',
'region': 'us-central1',
'versionName': 'projects/mycloud_machine/models/object_detector/versions/v2'}}

我使用Google的python代码进行批处理请求。

代码语言:javascript
复制
project_id = 'projects/{}'.format(project_name)

ml = discovery.build('ml', 'v1', credentials=credentials)
request = ml.projects().jobs().create(parent=project_id,
                                  body=body_fn())

try:
    response = request.execute()

    print('Job requested.')

    # The state returned will almost always be QUEUED.
    print('state : {}'.format(response['state']))

except errors.HttpError as err:
    # Something went wrong, print out some information.
    print('There was an error getting the prediction results.' +
      'Check the details:')
    print(err._get_reason())
EN

回答 1

Stack Overflow用户

发布于 2018-06-04 14:27:22

尝试此格式进行批处理预测:

代码语言:javascript
复制
{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAHAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}
{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAAAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}

换句话说,与gcloud一起使用的发送在线预测请求的格式相同。

批处理预测、gcloud和在线预测请求之间的关系如下:

  • local predictpredict的文件格式与批处理预测相同
  • 当使用gcloud时发送到联机预测的请求的实际主体将文件的每一行转换为“实例”数组的元素。因此,请求的实际主体(例如,如果您不使用gcloud,即curl、Python的request库等)将发送给在线预测服务。是{"instances": [line1, line2, ...]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50666297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档