บันทึกวันที่! Google I / O ส่งคืนวันที่ 18-20 พฤษภาคม ลงทะเบียนเลย
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

บางโมดูลสามารถใช้ได้มากกว่าหนึ่งงาน (เช่นโมดูลการจัดประเภทรูปภาพมักจะทำการแยกคุณลักษณะบางอย่างระหว่างทาง) ดังนั้นแต่ละโมดูลจึงจัดเตรียมลายเซ็นที่มีชื่อ (1) สำหรับงานทั้งหมดที่คาดการณ์ไว้โดยผู้เผยแพร่และ (2) output = m(images) ลายเซ็นเริ่มต้น 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 และ shape [batch_size, num_features] batch_size เหมือนกับในอินพุต แต่ไม่ทราบในเวลาสร้างกราฟ num_features เป็นค่าคงที่เฉพาะโมดูลที่ทราบโดยไม่ขึ้นกับขนาดอินพุต

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

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

พจนานุกรมเอาต์พุตอาจให้เอาต์พุตเพิ่มเติมตัวอย่างเช่นการเปิดใช้งานเลเยอร์ที่ซ่อนอยู่ภายในโมดูล คีย์และค่าของพวกเขาขึ้นอยู่กับโมดูล ขอแนะนำให้ใส่คำนำหน้าคีย์ที่ขึ้นกับสถาปัตยกรรมด้วยชื่อสถาปัตยกรรม (เช่นเพื่อหลีกเลี่ยงความสับสนระหว่างเลเยอร์กลาง "InceptionV3/Mixed_5c" กับเลเยอร์ Convolutional บนสุด "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 และ shape [batch_size, num_classes] batch_size เหมือนกับในอินพุต แต่ไม่ทราบในเวลาสร้างกราฟ num_classes คือจำนวนคลาสในการจัดประเภทซึ่งเป็นค่าคงที่ที่ทราบโดยไม่ขึ้นกับขนาดอินพุต

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

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

พจนานุกรมเอาต์พุตอาจให้เอาต์พุตเพิ่มเติมตัวอย่างเช่นการเปิดใช้งานเลเยอร์ที่ซ่อนอยู่ภายในโมดูล คีย์และค่าของพวกเขาขึ้นอยู่กับโมดูล ขอแนะนำให้ใส่คำนำหน้าคีย์ที่ขึ้นกับสถาปัตยกรรมด้วยชื่อสถาปัตยกรรม (เช่นเพื่อหลีกเลี่ยงความสับสนระหว่างเลเยอร์กลาง "InceptionV3/Mixed_5c" กับเลเยอร์ Convolutional บนสุด "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 เป็น "Unknown" มิติสุดท้ายถูกกำหนดไว้ที่หมายเลข 3 ของช่อง RGB ขนาด height และ width ได้รับการแก้ไขตามขนาดที่คาดไว้ของภาพอินพุต (งานในอนาคตอาจลบข้อ จำกัด นั้นสำหรับโมดูลการแปลงสัญญาณอย่างสมบูรณ์)

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

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