WedX - журнал о программировании и компьютерных науках

Ошибка при обслуживании модели Внимание_ocr (ошибка: ожидается один или два выходных тензора, найдено 17)

Я пытаюсь использовать модель внимания_окр на докере с помощью изображение тензорного потока / обслуживания.

Сначала я обучил эту модель на собственном наборе данных и получил хороший результат с demo_inference.py

Итак, я экспортирую обученную модель с помощью export_model. ру
python export_model.py --checkpoint=model.ckpt-111111 --export_dir=/tmp/mydir

Затем запустите контейнер докеров для обслуживания модели.
docker run -it --rm -p 8501:8501 -v /tmp/mydir:/models/aocr -e MODEL_NAME=aocr --gpus all tensorflow/serving

А это мой клиентский скрипт на Python.

data_dir = '/root/src/models/research/attention_ocr/python/datasets/data/demo/'

data_files = os.listdir(data_dir)

with open(data_dir + "0.jpg", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read())

## Some requests I tried ##
# predict_request = '{"examples": [{"inputs": ["%s"]}]}' % encoded_string
# predict_request = '{"examples": [{"inputs": "%s"}]}' % encoded_string
predict_request = '{"examples": [{"inputs": {"b64": ["%s"]}}]}' % encoded_string

r = requests.post('https://MY_IP_ADDR:8501/v1/models/aocr:classify', data=predict_request)
print(r.text)

Результат .. "error": "Expected one or two output Tensors, found 17"

Это первый раз, когда используется тензор потока / обслуживания. Я не могу справиться с этой ошибкой.

Пожалуйста, помогите этому новичку .. Заранее спасибо.


Ответы:


1

Спасибо, что сообщили об этой проблеме. Я зарегистрировал ошибку (# 9264) в Github от вашего имени. Проблема в том, что подпись по умолчанию включает все конечные точки, которые предоставляет модель. Если вы хотите использовать API классификации обслуживания, нам необходимо изменить сценарий export_model, чтобы экспортировать только 2 тензора, ожидаемых API классификации (т. Е. Прогнозы и оценки). А пока вы можете использовать Predict API, который поддерживает произвольное число выходных тензоров. Обратите внимание, что при использовании API прогноза через GRPC вы можете указать output_filter, но RESTful API не имеет этой опции, поэтому ответ довольно тяжелый, поскольку он отправляет обратно все маски внимания и необработанное изображение. Если кто-то еще пытается выяснить, как выполнить вывод, вот шаги, которые сработали для меня.

  1. Экспортируйте модель:
wget https://download.tensorflow.org/models/attention_ocr_2017_08_09.tar.gz
tar -xzvf attention_ocr_2017_08_09.tar.gz
python model_export.py --checkpoint=model.ckpt-399731 \
  --export_dir=/tmp/aocr_b1 --batch_size=1

Обратите внимание, что --batch_size=1 необходим из-за ошибки в model_export.py. Я позабочусь об этом, когда пришлю PR для выпуска подписи.

  1. Запустите док-контейнер для обслуживания модели.
sudo docker run -t --rm -p 8501:8501 \
  -v /tmp/aocr_b1:/models/aocr/1 -e MODEL_NAME=aocr tensorflow/serving

Обратите внимание, что путь должен содержать номер версии /models/aocr/1. Если вы не добавите /1, сервер жалуется, что не может найти никаких версий.

  1. Запускаем скрипт
python send_serving_request.py --image_file=testdata/fsns_train_00.png

Вот результаты

Prediction: Rue de la Gare░░░░░░░░░░░░░░░░░░░░░░░
Confidence: 0.899479449

Вот код:

send_serving_request.py

from absl import app
from absl import flags
import base64
import json
import os
from PIL import Image
import numpy as np
import requests
import tensorflow as tf

flags.DEFINE_string('image_file', None,
                    'Name of file containing image to request.')


def create_serialized_tf_example(image):
  """Create a serialized tf.Example proto for feeding the model."""
  example = tf.train.Example()
  example.features.feature['image/encoded'].float_list.value.extend(
      list(np.reshape(image, (-1))))
  return example.SerializeToString()


def main(_):
  pil_image = Image.open(flags.FLAGS.image_file)
  encoded_string = base64.b64encode(
      create_serialized_tf_example(np.asarray(pil_image)))
  predict_request = (
      b'{"instances": [{"inputs": {"b64": "%s"}}]}') % encoded_string
  r = requests.post(
      'https://localhost:8501/v1/models/aocr:predict', data=predict_request)
  data = json.loads(r.text)
  print('Prediction:', data['predictions'][0]['predicted_text'])
  print('Confidence:', data['predictions'][0]['normalized_seq_conf'])


if __name__ == '__main__':
  flags.mark_flag_as_required('image_file')
  app.run(main)
18.09.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]