Ошибка прогнозирования пакета Google ML: Исключительная ситуация при выполнении графика: утверждение не выполнено: [Невозможно декодировать байты в формате JPEG, PNG, GIF или BMP] - PullRequest
0 голосов
/ 03 июня 2018

Я развернул модель обнаружения объектов в Google ML, Я могу сделать онлайн-прогноз , но он СБОЙ , чтобы сделать пакетное прогнозирование , с ошибкой нижев журналах стекадрайвера:

Исключительная ситуация при запуске графика: утверждение не выполнено: [Невозможно декодировать байты в формате JPEG, PNG, GIF или BMP] [[Узел: map / while / decode_image / cond_jpeg / cond_png/ cond_gif / Assert_1 / Assert = Assert [T = [DT_STRING], резюмировать = 3, _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"] (map / while / decode_image / cond_jpeg/ cond_png / cond_gif / is_bmp, map / while / decode_image / cond_jpeg / cond_png / cond_gif / Assert_1 / Assert / data_0)]] *

Я пробовал обе команды gcloud и python api, но не повезло.Файл request.json для онлайн-прогноза.

{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAAAAHAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAA2gITAAMAAAABAAEAAIdpAAQAAAABAAAA7oglAAQAAAABAAAC0gAAAyhYaWFvbWkAAE1.....}}

Это уже кодируется b64.Он отлично работает с онлайн-прогнозированием:

gcloud ml-engine predict --model object_detector  --version v2 --json-instances request.json

НО для пакетного прогнозирования не получается, ниже две строки для файла batch_request.json

{'instances': [{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAHAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}]}
{'instances': [{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAAAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}]}

тело запроса Python API, выполненного для пакетного прогнозирования:

{'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'}}

Я использовал код Python из Google Docs для выполнения пакетного запроса.

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())

1 Ответ

0 голосов
/ 04 июня 2018

Попробуйте этот формат для пакетного прогнозирования:

{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAHAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}
{"inputs": {"b64": "/9j/4SurRXhpZgAATU0AKgAAAAgACgEPAAIAAAAAAhgEQAAIAAAAFAAAAjgEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAExAAIAAAA1AAAApAEyAAIAAAAUA...}}

Другими словами, тот же формат, который вы использовали с gcloud для отправки запросов онлайн-прогнозирования.

Связь между пакетным прогнозированием,gcloud и запросы онлайн-прогнозирования выглядят следующим образом:

  • формат файла gcloud для local predict и predict такой же, как и для пакетного прогнозирования
  • Фактическое тело запроса, котороеотправляется в оперативный прогноз при использовании gcloud преобразует каждую строку файла в элемент массива "instances".Таким образом, фактическое тело запроса (например, того, которое вы отправили бы в службу онлайн-прогнозирования, если бы вы не использовали gcloud, то есть с curl, библиотекой Python request и т. Д.), Было {"instances": [line1, line2, ...]}
...