เข้าร่วม Women in ML Symposium ในวันที่ 7 ธันวาคม ลงทะเบียนตอนนี้

ลายเซ็นทั่วไปสำหรับรูปภาพ

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

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

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

ภาพคุณสมบัติเวกเตอร์

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

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

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

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  features = module(images)   # A batch with shape [batch_size, num_features].

นอกจากนี้ยังกำหนดลายเซ็นที่มีชื่อที่สอดคล้องกัน

ข้อกำหนดลายเซ็น

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

  outputs = module(dict(images=images), signature="image_feature_vector",
                   as_dict=True)
  features = outputs["default"]

อินพุตเป็นไปตามแบบแผนทั่วไปสำหรับการ ป้อนรูปภาพ

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

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

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

พจนานุกรมเอาต์พุตอาจให้เอาต์พุตเพิ่มเติม เช่น การเปิดใช้งานเลเยอร์ที่ซ่อนอยู่ภายในโมดูล คีย์และค่าขึ้นอยู่กับโมดูล ขอแนะนำให้นำหน้าคีย์ที่ขึ้นกับสถาปัตยกรรมด้วยชื่อสถาปัตยกรรม (เช่น เพื่อหลีกเลี่ยงความ "InceptionV3/Mixed_5c" ระหว่างชั้น "InceptionV2/Mixed_5c"

การจำแนกภาพ

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

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

โมดูลสำหรับการแยกคุณลักษณะรูปภาพมีลายเซ็นเริ่มต้นที่แม็พชุดของรูปภาพกับชุดบันทึก สามารถใช้งานได้ดังนี้:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  logits = module(images)   # A batch with shape [batch_size, num_classes].

นอกจากนี้ยังกำหนดลายเซ็นที่มีชื่อที่สอดคล้องกัน

ข้อกำหนดลายเซ็น

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

  outputs = module(dict(images=images), signature="image_classification",
                   as_dict=True)
  logits = outputs["default"]

อินพุตเป็นไปตามแบบแผนทั่วไปสำหรับการ ป้อนรูปภาพ

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

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

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

พจนานุกรมเอาต์พุตอาจให้เอาต์พุตเพิ่มเติม เช่น การเปิดใช้งานเลเยอร์ที่ซ่อนอยู่ภายในโมดูล คีย์และค่าขึ้นอยู่กับโมดูล ขอแนะนำให้นำหน้าคีย์ที่ขึ้นกับสถาปัตยกรรมด้วยชื่อสถาปัตยกรรม (เช่น เพื่อหลีกเลี่ยงความ "InceptionV3/Mixed_5c" ระหว่างชั้น "InceptionV2/Mixed_5c"

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

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

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

โมดูลที่มีการป้อนรูปภาพเพียงหนึ่งรายการ (หรือหลักเดียว) จะใช้ชื่อ "images" สำหรับอินพุตนี้

โมดูลยอมรับ batch_size ใดๆ และตั้งค่ามิติแรกของ TensorInfo.tensor_shape ให้สอดคล้องกันเป็น "ไม่ทราบ" ขนาดสุดท้ายถูกกำหนดไว้ที่หมายเลข 3 ของช่องสัญญาณ RGB ขนาด height และ width ถูกกำหนดให้เป็นขนาดที่คาดไว้ของรูปภาพอินพุต (งานในอนาคตอาจลบข้อจำกัดนั้นสำหรับโมดูล Convolutional ทั้งหมด)

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

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