логика предварительной обработки keras

Фон:

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


person saawan    schedule 05.10.2019    source источник
comment
В этом вопросе отсутствуют детали: какие функции предварительной обработки keras вы использовали и как вы пытались воспроизвести их в Go? Более того, keras является открытым исходным кодом: вы можете получить код функции, который вы используете, и повторно реализовать его в собственном TensorFlow для использования с препроцессором TF Serving.   -  person Lescurel    schedule 05.10.2019


Ответы (1)


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

Вышеупомянутый метод keras.preprocessing удобен, но имеет два недостатка:

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

Почему бы не включить уровень предварительной обработки как часть самого графа модели, чтобы он выполнялся ВНУТРИ обслуживания тензорного потока?

person opti420sk    schedule 11.10.2019