saa*_*wan 5 keras tensorflow-serving
背景:
\n\n在 GCP 上的视觉应用程序中,我们使用 TF 服务。使用 TF Serving 的应用程序是用 Go 编写的。该应用程序将图像转换为 Tensor,并使用 gRPC 将其发送到 TF 服务。
\n\n问题:
\n\nGolang 中的预处理逻辑不像 Python 中那样工作,使用 Keras 图像库(推理的准确性受到影响)。部分原因可能是训练期间使用了 Python 库。
\n\n我们尝试了,
\n\nTensorflow 服务提供了一种引入可在服务容器上运行的预处理器的方法。它的功能似乎有限(无法将 Keras 库与模型打包)。我们尝试了以下两种选择
\n\n有效的是 Keras 预处理 (Python),在客户端如下。
\n\nimg = tf.keras.preprocessing.image.load_img(file_name, target_size=(HEIGHT, WIDTH))\nimg_array = tf.keras.preprocessing.image.img_to_array(img)\n\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 grpc 调用 TensorflowServing...
\n\n我们的目标是使用 \xe2\x80\x9cserving_input_receiver_fn\xe2\x80\x9d 并在 TFServing 空间中预处理图像,如本博客文章中所述: https ://medium.com/devseed/technical-walkthrough-packaging-ml-models -for-inference-with-tf-serving-2a50f73ce6f8
\n\n但是以下作为 \xe2\x80\x9cserving_input_receiver_fn\xe2\x80\x9d 执行的代码不会产生正确的推论。
\n\nimage = tf.image.decode_image(image_str_tensor, channels=CHANNELS dtype=tf.uint8)\nimage = tf.reshape(image, [HEIGHT, WIDTH, CHANNELS])\nRun Code Online (Sandbox Code Playgroud)\n\n我们的目标是在 \xe2\x80\x9c\xe2\x80\x9cserving_input_receiver_fn\xe2\x80\x9d 中运行以下 Keras 代码(以类似的方式)(假设我们可以从 \xe2\x80\x9cgrpc\ 加载图像) xe2\x80\x9d 流)。
\n\nimg = tf.keras.preprocessing.image.load_img(file_name, target_size=(HEIGHT, WIDTH))\nimg_array = tf.keras.preprocessing.image.img_to_array(img)\nRun Code Online (Sandbox Code Playgroud)\n\n是否可以?这是一个大规模部署(70 个 GPU 和 2300 个 CPU),因此每一点性能都很重要。在我们的例子中,TF-Serving 机器上的图像预处理是最优的。
\n小智 0
我实际上没有答案,但也许可以向您指出一些可以提供帮助的资源。我认为首先,keras.preprocessing 应该相当慢,请查看https://www.tensorflow.org/tutorials/load_data/images,它建议将预处理管道构建为 tf.data.Dataset 管道
上面的 keras.preprocessing 方法很方便,但有两个缺点:
很慢。请参阅下面的性能部分。它缺乏细粒度的控制。它与 TensorFlow 的其余部分没有很好地集成。将文件加载为 tf.data.Dataset
为什么不将预处理层作为模型图本身的一部分,以便它可以在张量流服务中运行?
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |