В этом сообщении показано, как экспортировать модель Keras и обслуживать ее с помощью Tensorflow Serving с входными данными в виде изображений base64.

👉 перейти прямо к коду

(обязательное условие) Построить и обучить модель Keras

Этот шаг довольно прост. У нас уже должна быть определена и обучена наша модель. Для краткости в этом примере мы будем использовать предварительно обученную модель Xception.

Сериализация шагов предварительной обработки

Чтобы обслуживающий API мог напрямую принимать файлы необработанных изображений в качестве входных данных вместо массивов RGB, нам нужно сериализовать все необходимые шаги, включая

  1. декодирование входных изображений, закодированных в строке base64
  2. преобразовать его в тензор
  3. изменение размера
  4. применение шагов предварительной обработки изображения, необходимых модели

теперь мы можем создать объект serving_input_receiver, который позаботится о декодировании пакета строковых файлов base64, кодирующих необработанные файлы изображений (см. tf.io.decode_image), изменяя их размер, а затем применяя keras.applications.xception.preprocess_input.

Обратите внимание, что аргумент input_name соответствует model.input_names. Если ваша модель имеет другое имя для ввода, вам может потребоваться изменить его соответствующим образом.

Экспорт модели для TF Serving

Далее нам нужно создать объект tf.estimator, который позволит нам экспортировать нашу модель Keras для TF Serving с определенным ранее serving_input_receiver.

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

models
└── classification
    └── xception
        └── 1586063263
            ├── saved_model.pb
            └── variables
                ├── variables.data-00000-of-00002
                ├── variables.data-00001-of-00002
                └── variables.index

, где 1586063263 — временная метка экспорта в эпоху Unix.

Обслуживание экспортированной модели

Как только модель успешно экспортирована, все остальное довольно просто. Пожалуйста, обратитесь к официальной странице обслуживания TF для получения более подробной информации и вариантов.

Тестирование модели обслуживания переходов

Ниже приведен пример кода драйвера для отправки изображения на сервер TF для классификации imagenet.

И отправить запрос.

пример JSON-ответа:

{'predictions': [[0.000263870839,
   0.000306949107,
   0.000248591678,
   0.000319328334,
   0.000141894678,
   0.000295011501,
   0.000241611619,
   ...]]
  }

Собираем и собираем все вместе

Образец рабочего кода можно найти здесь.