Справочная информация:
В приложении для визуализации на 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 является наиболее оптимальной.