логика предварительной обработки кераса - PullRequest
3 голосов
/ 05 октября 2019

Справочная информация:

В приложении для визуализации на GCP мы используем порцию TF. Приложение с использованием TF Serving написано на Go. Это приложение преобразует изображение в Tensor и отправляет его на обслуживание TF, используя gRPC.

Проблема:

Логика предварительной обработки в Golang не работает так же хорошо, как работаетв Python, используя библиотеку изображений Keras (страдает точность вывода). Одной из причин может быть то, что библиотеки Python использовались во время обучения.

Мы пытались,

Служба Tensorflow предоставляет способ представить препроцессор, который может работатьна сервировочном контейнере. Кажется, он имеет ограниченную функциональность (не может упаковать библиотеку Keras вместе с моделью). Мы попробовали следующие два варианта

Что работает - это предварительная обработка Keras (Python) на стороне клиента следующим образом.

img = tf.keras.preprocessing.image.load_img(file_name, target_size=(HEIGHT, WIDTH))
img_array = tf.keras.preprocessing.image.img_to_array(img)

… grpc вызов TensorflowServing .. .

Наша цель - использовать «serve_input_receiver_fn» и образ предварительной обработки в пространстве TFServing, как описано в этом сообщении в блоге: https://medium.com/devseed/technical-walkthrough-packaging-ml-models-for-inference-with-tf-serving-2a50f73ce6f8

Но следующий код, который выполняется как «serve_input_receiver_fn», выполняетне дает правильных выводов.

image = tf.image.decode_image(image_str_tensor, channels=CHANNELS                                       dtype=tf.uint8)
image = tf.reshape(image, [HEIGHT, WIDTH, CHANNELS])

Наша цель - запустить следующий код Keras (аналогичным образом) внутри «serve_input_receiver_fn» (при условии, что мы можем загрузить изображение изПоток "grpc").

img = tf.keras.preprocessing.image.load_img(file_name, target_size=(HEIGHT, WIDTH))
img_array = tf.keras.preprocessing.image.img_to_array(img)

Возможно ли это? Это массовое развертывание (70 графических процессоров и 2300 процессоров), поэтому каждый бит производительности имеет значение. В нашем случае предобработка изображений на TF-Serving является наиболее оптимальной.

1 Ответ

0 голосов
/ 11 октября 2019

На самом деле у меня нет ответа, но, возможно, я могу указать вам некоторые ресурсы, чтобы помочь. Во-первых, я думаю, что keras.preprocessing должен быть довольно медленным, проверьте https://www.tensorflow.org/tutorials/load_data/images и рекомендует построить конвейер предварительной обработки в виде конвейера tf.data.Dataset

Вышеуказанные керасыМетод предварительной обработки удобен, но имеет два недостатка:

Это медленно. Смотрите раздел производительности ниже. Ему не хватает мелкозернистого контроля. Он плохо интегрирован с остальной частью TensorFlow. Чтобы загрузить файлы в виде tf.data.Dataset

Почему бы не включить слой предварительной обработки в качестве части самого графа модели, чтобы он работал в режиме обработки тензорного потока WITHIN?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...