Latar belakang:
Dalam aplikasi vision di GCP, kami menggunakan penyajian TF. Aplikasi yang menggunakan TF Serving ditulis dalam Go. Aplikasi ini mengonversi gambar menjadi Tensor dan mengirimkannya ke penyajian TF menggunakan gRPC.
Masalah:
Logika pra-pemrosesan di Golang tidak berfungsi sebaik di Python, menggunakan pustaka gambar Keras (akurasi inferensi menurun). Salah satu alasannya mungkin karena pustaka Python digunakan selama pelatihan.
Kami telah mencobanya,
Penyajian Tensorflow menyediakan cara untuk memperkenalkan pra-prosesor yang dapat dijalankan pada wadah penyajian. Tampaknya fungsinya terbatas (tidak dapat mengemas perpustakaan Keras dengan model). Kami mencoba dua opsi berikut
Yang berhasil adalah Keras Preprocessing (Python), di sisi klien sebagai berikut.
img = tf.keras.preprocessing.image.load_img(file_name, target_size=(HEIGHT, WIDTH))
img_array = tf.keras.preprocessing.image.img_to_array(img)
… panggilan grpc ke TensorflowServing...
Tujuan kami adalah menggunakan “serving_input_receiver_fn” dan praproses gambar di ruang TFServing seperti yang dijelaskan dalam postingan blog ini: https://medium.com/devseed/technical-walkthrough-packaging-ml-models-for-inference-with-tf-serving-2a50f73ce6f8
Namun kode berikut yang dijalankan sebagai “serving_input_receiver_fn” tidak menghasilkan kesimpulan yang benar.
image = tf.image.decode_image(image_str_tensor, channels=CHANNELS dtype=tf.uint8)
image = tf.reshape(image, [HEIGHT, WIDTH, CHANNELS])
Tujuan kami adalah menjalankan kode Keras berikut (dengan cara serupa) di dalam ““serving_input_receiver_fn” (dengan asumsi bahwa kami dapat memuat gambar dari aliran “grpc”).
img = tf.keras.preprocessing.image.load_img(file_name, target_size=(HEIGHT, WIDTH))
img_array = tf.keras.preprocessing.image.img_to_array(img)
Apa itu mungkin? Ini adalah penerapan besar-besaran (70 GPU & 2300 CPU) sehingga setiap kinerjanya diperhitungkan. Dalam kasus kami, pra-pemrosesan gambar pada mesin TF-Serving adalah yang paling optimal.