keras预处理逻辑

keras预处理逻辑,keras,tensorflow-serving,Keras,Tensorflow Serving,背景: 在GCP上的vision应用程序中,我们使用TF服务。使用TF服务的应用程序是用Go编写的。此应用程序将图像转换为张量,并使用gRPC将其发送到TF服务 问题: 使用Keras图像库,Golang中的预处理逻辑不如Python中的预处理逻辑工作得好(推理的准确性受到影响)。部分原因可能是在培训期间使用了Python库 我们尝试过, Tensorflow服务提供了一种引入可在服务容器上运行的预处理器的方法。它的功能似乎有限(无法将Keras库打包到模型中)。我们尝试了以下两种选择 有效的是

背景:

在GCP上的vision应用程序中,我们使用TF服务。使用TF服务的应用程序是用Go编写的。此应用程序将图像转换为张量,并使用gRPC将其发送到TF服务

问题:

使用Keras图像库,Golang中的预处理逻辑不如Python中的预处理逻辑工作得好(推理的准确性受到影响)。部分原因可能是在培训期间使用了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

我们的目标是在TFServing空间中使用“serving_input_receiver_fn”并预处理图像,如本文所述:

但以下作为“服务输入接收器”执行的代码不能产生正确的推论

image = tf.image.decode_image(image_str_tensor, channels=CHANNELS                                       dtype=tf.uint8)
image = tf.reshape(image, [HEIGHT, WIDTH, CHANNELS])
我们的目标是在“serving_input_receiver_fn”(假设我们可以从“grpc”流加载图像)中运行以下Keras代码(以类似的方式)


可能吗?这是一个大规模部署(70个GPU和2300个CPU)因此,每一点性能都很重要。在我们的例子中,TF服务机器上的图像预处理是最优化的。

我实际上没有答案,但也许可以向您提供一些资源来帮助。我认为首先,keras.preprocessing应该非常慢,请查看,它建议您也建立预处理管道tf.data.Dataset管道

上述keras.预处理方法是方便的,但有两个优点 缺点:

速度很慢。请参阅下面的性能部分。它缺少细粒度 控制。它与TensorFlow的其余部分没有很好地集成。到 将文件作为tf.data.Dataset加载


为什么不将预处理层作为模型图本身的一部分,以便它在tensorflow服务中运行?

这个问题缺乏细节:您使用了什么keras预处理函数,以及您如何尝试在Go中复制它们?此外,keras是开源的:您可以在使用的地方获取函数代码并重新采样在原生TensorFlow中输入它们,以便与TF服务预处理器一起使用。
img = tf.keras.preprocessing.image.load_img(file_name, target_size=(HEIGHT, WIDTH))
img_array = tf.keras.preprocessing.image.img_to_array(img)