ตรรกะการประมวลผลล่วงหน้าของ keras

พื้นหลัง:

ในแอปพลิเคชันการมองเห็นบน GCP เรากำลังใช้การให้บริการ TF แอปพลิเคชันที่ใช้ TF Serving เขียนเป็นภาษา Go แอปพลิเคชันนี้แปลงรูปภาพเป็น Tensor และส่งไปยัง TF ที่ให้บริการโดยใช้ gRPC

ปัญหา:

ตรรกะการประมวลผลล่วงหน้าใน Golang ไม่ทำงานเช่นเดียวกับใน Python โดยใช้ไลบรารีรูปภาพ Keras (ความแม่นยำของการอนุมานลดลง) สาเหตุส่วนหนึ่งอาจเป็นเพราะมีการใช้ไลบรารี Python ในระหว่างการฝึก

เราพยายามแล้ว

การให้บริการ Tensorflow เป็นวิธีในการแนะนำตัวประมวลผลล่วงหน้าที่สามารถทำงานบนคอนเทนเนอร์ที่ให้บริการได้ ดูเหมือนว่าจะมีฟังก์ชันการทำงานที่จำกัด (ไม่สามารถรวมไลบรารี Keras กับโมเดลได้) เราลองสองตัวเลือกต่อไปนี้

สิ่งที่ได้ผลคือ Keras Preprocessing (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...

เป้าหมายของเราคือการใช้ “serving_input_receiver_fn” และประมวลผลรูปภาพล่วงหน้าในพื้นที่ TFServing ตามที่อธิบายไว้ในโพสต์บนบล็อกนี้: https://medium.com/devseed/technical-walkthrough-packaging-ml-models-for-inference-with-tf-serving-2a50f73ce6f8

แต่โค้ดต่อไปนี้ซึ่งดำเนินการเป็น "serving_input_receiver_fn" ไม่ได้ให้ผลการอนุมานที่ถูกต้อง

image = tf.image.decode_image(image_str_tensor, channels=CHANNELS                                       dtype=tf.uint8)
image = tf.reshape(image, [HEIGHT, WIDTH, CHANNELS])

เป้าหมายของเราคือการเรียกใช้โค้ด Keras ต่อไปนี้ (ในทำนองเดียวกัน) ภายใน ““serving_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 GPU และ 2300 CPU) ดังนั้นประสิทธิภาพทุกบิตจึงมีความสำคัญ ในกรณีของเรา การประมวลผลภาพล่วงหน้าบนเครื่อง TF-Serving นั้นเหมาะสมที่สุด


person saawan    schedule 05.10.2019    source แหล่งที่มา
comment
คำถามนี้ไม่มีรายละเอียด: คุณใช้ฟังก์ชันการประมวลผลล่วงหน้าของ keras ใด และคุณพยายามสร้างมันขึ้นมาใหม่ใน Go อย่างไร นอกจากนี้ keras ยังเป็นโอเพ่นซอร์ส : คุณสามารถดึงโค้ดฟังก์ชันที่คุณใช้และปรับใช้ใหม่ใน TensorFlow ดั้งเดิมเพื่อใช้กับ TF Serving preprocessor   -  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