SavedModel API ทั่วไปสำหรับงานรูปภาพ

หน้านี้อธิบายว่า TF2 SavedModels สำหรับงานที่เกี่ยวข้องกับรูปภาพควรใช้ Reusable SavedModel API อย่างไร (ซึ่งจะแทนที่ ลายเซ็นทั่วไปสำหรับรูปภาพ สำหรับ รูปแบบ TF1 Hub ที่เลิกใช้แล้ว)

ภาพคุณลักษณะเวกเตอร์

สรุปการใช้งาน

เวกเตอร์คุณลักษณะรูปภาพ คือเทนเซอร์ 1 มิติที่มีความหนาแน่นสูงซึ่งแสดงถึงรูปภาพทั้งหมด โดยทั่วไปจะใช้โดยตัวแยกประเภทฟีดฟอร์เวิร์ดอย่างง่ายในโมเดลผู้บริโภค (ในแง่ของ CNN แบบคลาสสิก นี่คือค่าคอขวดหลังจากขอบเขตเชิงพื้นที่ถูกรวมกลุ่มหรือถูกทำให้ราบเรียบ แต่ก่อนที่จะจำแนกเสร็จสิ้น สำหรับเรื่องนั้น โปรดดู การจัดหมวดหมู่รูปภาพ ด้านล่าง)

SavedModel ที่นำกลับมาใช้ใหม่ได้สำหรับการแยกคุณลักษณะรูปภาพมีเมธอด __call__ บนออบเจ็กต์รูทที่แมปชุดรูปภาพกับชุดของเวกเตอร์คุณลักษณะ มันสามารถใช้งานได้ดังนี้:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
features = obj(images)   # A batch with shape [batch_size, num_features].

ใน Keras สิ่งที่เทียบเท่าคือ

features = hub.KerasLayer("path/to/model")(images)

อินพุตเป็นไปตามแบบแผนทั่วไปสำหรับ การป้อนรูปภาพ เอกสารประกอบแบบจำลองระบุช่วงที่อนุญาตสำหรับ height และ width ของอินพุต

เอาต์พุตเป็นเทนเซอร์ตัวเดียวของ dtype float32 และรูปร่าง [batch_size, num_features] batch_size เหมือนกับในอินพุต num_features เป็นค่าคงที่เฉพาะโมดูล โดยไม่ขึ้นกับขนาดอินพุต

รายละเอียดเอพีไอ

Reusable SavedModel API ยังมีรายการ obj.variables (เช่น สำหรับการเริ่มต้นเมื่อไม่ได้โหลดอย่างกระตือรือร้น)

โมเดลที่รองรับการปรับแต่งอย่างละเอียดจะแสดงรายการของ obj.trainable_variables คุณอาจต้องผ่าน training=True เพื่อดำเนินการในโหมดการฝึกอบรม (เช่น สำหรับการออกจากระบบ) บางรุ่นอนุญาตให้มีอาร์กิวเมนต์เพิ่มเติมเพื่อแทนที่ไฮเปอร์พารามิเตอร์ (เช่น อัตราการออกกลางคัน ซึ่งจะอธิบายไว้ในเอกสารประกอบของโมเดล) โมเดลยังอาจจัดให้มีรายการ obj.regularization_losses สำหรับรายละเอียด โปรดดูที่ Reusable SavedModel API

ใน Keras สิ่งนี้ได้รับการดูแลโดย hub.KerasLayer : เริ่มต้นด้วย trainable=True เพื่อเปิดใช้งานการปรับแต่งแบบละเอียดและ (ในกรณีที่ไม่ค่อยเกิดขึ้นที่การใช้การแทนที่ hparam) ด้วย arguments=dict(some_hparam=some_value, ...)) .

หมายเหตุ

การใช้การออกกลางคันกับคุณลักษณะเอาต์พุต (หรือไม่) ควรปล่อยให้เป็นของผู้บริโภครุ่น SavedModel เองไม่ควรดำเนินการออกกลางคันกับเอาต์พุตจริง (แม้ว่าจะใช้การออกกลางคันภายในในที่อื่นก็ตาม)

ตัวอย่าง

มีการใช้ SavedModels ที่นำมาใช้ซ้ำได้สำหรับเวกเตอร์ฟีเจอร์รูปภาพ

การจำแนกประเภทภาพ

สรุปการใช้งาน

การจัดหมวดหมู่รูปภาพ จะจับคู่พิกเซลของรูปภาพกับคะแนนเชิงเส้น (บันทึก) สำหรับการเป็นสมาชิกในคลาสของอนุกรมวิธาน ที่เลือกโดยผู้เผยแพร่โมดูล ซึ่งช่วยให้ผู้บริโภคแบบจำลองสามารถสรุปผลจากการจัดหมวดหมู่เฉพาะที่เรียนรู้จากโมดูลผู้เผยแพร่ (สำหรับการจัดประเภทรูปภาพด้วยชุดคลาสใหม่ เป็นเรื่องปกติที่จะนำโมเดล Image Feature Vector กลับมาใช้ใหม่พร้อมกับตัวแยกประเภทใหม่แทน)

SavedModel ที่ใช้ซ้ำได้สำหรับการจัดหมวดหมู่รูปภาพมีเมธอด __call__ บนออบเจ็กต์รูทที่แมปชุดรูปภาพกับชุดการบันทึก มันสามารถใช้งานได้ดังนี้:

obj = hub.load("path/to/model")  # That's tf.saved_model.load() after download.
images = ...  # A batch of images with shape [batch_size, height, width, 3].
logits = obj(images)   # A batch with shape [batch_size, num_classes].

ใน Keras สิ่งที่เทียบเท่าคือ

logits = hub.KerasLayer("path/to/model")(images)

อินพุตเป็นไปตามแบบแผนทั่วไปสำหรับ การป้อนรูปภาพ เอกสารประกอบแบบจำลองระบุช่วงที่อนุญาตสำหรับ height และ width ของอินพุต

logits เอาต์พุตเป็นเทนเซอร์ตัวเดียวของ dtype float32 และรูปร่าง [batch_size, num_classes] batch_size เหมือนกับในอินพุต num_classes คือจำนวนคลาสในการจำแนกประเภท ซึ่งเป็นค่าคงที่เฉพาะรุ่น

ค่า logits[i, c] คือคะแนนที่ทำนายความเป็นสมาชิกของตัวอย่าง i ในคลาสที่มีดัชนี c

ขึ้นอยู่กับการจำแนกประเภทพื้นฐานว่าคะแนนเหล่านี้มีไว้สำหรับใช้กับ softmax (สำหรับคลาสที่ไม่เกิดร่วมกัน), sigmoid (สำหรับคลาส orthogonal) หรืออย่างอื่น เอกสารประกอบของโมดูลควรอธิบายสิ่งนี้ และอ้างอิงถึงคำจำกัดความของดัชนีคลาส

รายละเอียดเอพีไอ

Reusable SavedModel API ยังมีรายการ obj.variables (เช่น สำหรับการเริ่มต้นเมื่อไม่ได้โหลดอย่างกระตือรือร้น)

โมเดลที่รองรับการปรับแต่งอย่างละเอียดจะแสดงรายการของ obj.trainable_variables คุณอาจต้องผ่าน training=True เพื่อดำเนินการในโหมดการฝึกอบรม (เช่น สำหรับการออกจากระบบ) บางรุ่นอนุญาตให้มีอาร์กิวเมนต์เพิ่มเติมเพื่อแทนที่ไฮเปอร์พารามิเตอร์ (เช่น อัตราการออกกลางคัน ซึ่งจะอธิบายไว้ในเอกสารประกอบของโมเดล) โมเดลยังอาจจัดให้มีรายการ obj.regularization_losses สำหรับรายละเอียด โปรดดูที่ Reusable SavedModel API

ใน Keras สิ่งนี้ได้รับการดูแลโดย hub.KerasLayer : เริ่มต้นด้วย trainable=True เพื่อเปิดใช้งานการปรับแต่งแบบละเอียดและ (ในกรณีที่ไม่ค่อยเกิดขึ้นที่การใช้การแทนที่ hparam) ด้วย arguments=dict(some_hparam=some_value, ...)) .

อินพุตรูปภาพ

ซึ่งเป็นเรื่องปกติสำหรับโมเดลรูปภาพทุกประเภท

โมเดลที่รับชุดรูปภาพเป็นอินพุตยอมรับว่าเป็นเทนเซอร์ 4 มิติหนาแน่นของ dtype float32 และรูปร่าง [batch_size, height, width, 3] ซึ่งมีองค์ประกอบเป็นค่าสี RGB ของพิกเซลที่ถูกทำให้เป็นมาตรฐานในช่วง [0, 1] . นี่คือสิ่งที่คุณได้รับจากตามด้วย tf.image.decode_*() tf.image.convert_image_dtype(..., tf.float32)

โมเดลยอมรับใด ๆ ก็ตาม batch_size เอกสารประกอบแบบจำลองระบุช่วงที่อนุญาตสำหรับ height และ width มิติสุดท้ายถูกกำหนดไว้ที่ 3 ช่อง RGB

ขอแนะนำให้โมเดลต่างๆ ใช้เลย์เอาต์ของ channels_last (หรือ NHWC ) ของ Tensors ตลอด และปล่อยให้เป็นหน้าที่ของเครื่องมือเพิ่มประสิทธิภาพกราฟของ TensorFlow เพื่อเขียนใหม่เป็น channels_first (หรือ NCHW ) หากจำเป็น