หน้านี้อธิบายว่า 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 ที่นำมาใช้ซ้ำได้สำหรับเวกเตอร์ฟีเจอร์รูปภาพ
- บทแนะนำ Colab การฝึกตัวแยกประเภทรูปภาพใหม่
การจำแนกประเภทภาพ
สรุปการใช้งาน
การจัดหมวดหมู่รูปภาพ จะจับคู่พิกเซลของรูปภาพกับคะแนนเชิงเส้น (บันทึก) สำหรับการเป็นสมาชิกในคลาสของอนุกรมวิธาน ที่เลือกโดยผู้เผยแพร่โมดูล ซึ่งช่วยให้ผู้บริโภคแบบจำลองสามารถสรุปผลจากการจัดหมวดหมู่เฉพาะที่เรียนรู้จากโมดูลผู้เผยแพร่ (สำหรับการจัดประเภทรูปภาพด้วยชุดคลาสใหม่ เป็นเรื่องปกติที่จะนำโมเดล 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
) หากจำเป็น