logika pemrosesan awal yang keras

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.


person saawan    schedule 05.10.2019    source sumber
comment
Pertanyaan ini kurang detail: fungsi praproses keras apa yang Anda gunakan, dan bagaimana Anda mencoba mereproduksinya di Go? Selain itu, keras adalah sumber terbuka: Anda dapat mengambil kode fungsi yang Anda gunakan dan menerapkannya kembali di TensorFlow asli untuk digunakan dengan praprosesor TF Serving.   -  person Lescurel    schedule 05.10.2019


Jawaban (1)


Saya sebenarnya tidak punya jawaban tetapi mungkin bisa mengarahkan Anda ke beberapa sumber untuk membantu. Menurut saya pertama-tama, keras.preprocessing seharusnya cukup lambat, lihat https://www.tensorflow.org/tutorials/load_data/images dan merekomendasikan pembuatan pipeline pra-pemrosesan sebagai pipeline tf.data.Dataset

Metode keras.preprocessing di atas nyaman, tetapi memiliki dua kelemahan:

Ini lambat. Lihat bagian kinerja di bawah. Ia tidak memiliki kontrol yang baik. Itu tidak terintegrasi dengan baik dengan TensorFlow lainnya. Untuk memuat file sebagai tf.data.Dataset

Mengapa tidak menyertakan lapisan pra-pemrosesan sebagai bagian dari grafik model itu sendiri sehingga dapat berjalan DALAM penyajian tensorflow?

person opti420sk    schedule 11.10.2019