มีคำถาม? เชื่อมต่อกับชุมชนที่ฟอรัม TensorFlow เยี่ยมชมฟอรัม

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 คือค่าคงที่เฉพาะโมดูลโดยไม่ขึ้นกับขนาดอินพุต

รายละเอียด API

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

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

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

หมายเหตุ

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

ตัวอย่าง

นำมาใช้ใหม่ SavedModels สำหรับคุณสมบัติภาพเวกเตอร์ถูกนำมาใช้ในรูปแบบ

การจำแนกภาพ

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

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

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 (สำหรับคลาสมุมฉาก) หรืออย่างอื่น เอกสารประกอบโมดูลควรอธิบายสิ่งนี้และอ้างถึงคำจำกัดความของดัชนีคลาส

รายละเอียด API

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

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

ใน Keras สิ่งนี้ได้รับการดูแลโดย hub.KerasLayer : เริ่มต้นด้วย 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 ) หากจำเป็น