Фон:
В приложении Vision на 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-serve-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 machine наиболее оптимальна.