การตรวจจับวัตถุ

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

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

ภาพหน้าจอของตัวอย่าง Android

เริ่ม

หากต้องการเรียนรู้วิธีใช้การตรวจจับวัตถุในแอปมือถือ ให้สำรวจ ตัวอย่างแอปพลิเคชันและคำแนะนำ

หากคุณใช้แพลตฟอร์มอื่นที่ไม่ใช่ Android หรือ iOS หรือหากคุณคุ้นเคยกับ TensorFlow Lite API อยู่แล้ว คุณสามารถดาวน์โหลดโมเดลการตรวจจับออบเจ็กต์เริ่มต้นและป้ายกำกับที่แนบมาได้

ดาวน์โหลดโมเดลเริ่มต้นพร้อมข้อมูลเมตา

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลเมตาและฟิลด์ที่เกี่ยวข้อง (เช่น labels.txt ) โปรดดู อ่านข้อมูลเมตาจากโมเดล

หากคุณต้องการฝึกโมเดลการตรวจจับแบบกำหนดเองสำหรับงานของคุณเอง โปรดดู การปรับแต่งโมเดล

สำหรับกรณีการใช้งานต่อไปนี้ คุณควรใช้โมเดลประเภทอื่น:

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

ตัวอย่างการใช้งานและคำแนะนำ

หากคุณยังใหม่กับ TensorFlow Lite และใช้งานกับ Android หรือ iOS เราขอแนะนำให้สำรวจแอปพลิเคชันตัวอย่างต่อไปนี้ที่สามารถช่วยคุณเริ่มต้นได้

หุ่นยนต์

คุณสามารถใช้ประโยชน์จาก API แบบสำเร็จรูปจาก ไลบรารีงาน TensorFlow Lite เพื่อผสานรวมโมเดลการตรวจจับวัตถุด้วยโค้ดเพียงไม่กี่บรรทัด คุณยังสามารถสร้างไปป์ไลน์การอนุมานที่กำหนดเองได้โดยใช้ TensorFlow Lite Interpreter Java API

ตัวอย่าง Android ด้านล่างแสดงให้เห็นถึงการใช้งานสำหรับทั้งสองวิธีโดยใช้ ไลบรารีงาน และ ล่าม API ตามลำดับ

ดูตัวอย่าง Android

ไอโอเอส

คุณสามารถรวมโมเดลได้โดยใช้ TensorFlow Lite Interpreter Swift API ดูตัวอย่าง iOS ด้านล่าง

ดูตัวอย่าง iOS

คำอธิบายโมเดล

ส่วนนี้อธิบายลายเซ็นสำหรับรุ่น Single-Shot Detector ที่แปลงเป็น TensorFlow Lite จาก TensorFlow Object Detection API

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

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

ลายเซ็นอินพุต

โมเดลใช้รูปภาพเป็นอินพุต

สมมติว่าภาพที่คาดหวังคือ 300x300 พิกเซล โดยมี 3 ช่อง (แดง น้ำเงิน และเขียว) ต่อพิกเซล ควรป้อนสิ่งนี้ให้กับโมเดลเป็นบัฟเฟอร์แบบแบนที่มีค่า 270,000 ไบต์ (300x300x3) หากโมเดลเป็นแบบ เชิงปริมาณ แต่ละค่าควรเป็นไบต์เดียวซึ่งแสดงถึงค่าระหว่าง 0 ถึง 255

คุณสามารถดู โค้ดแอปตัวอย่าง ของเราเพื่อทำความเข้าใจวิธีการประมวลผลล่วงหน้าบน Android

ลายเซ็นเอาท์พุต

โมเดลส่งออกอาร์เรย์สี่ชุด โดยแมปกับดัชนี 0-4 อาร์เรย์ 0, 1 และ 2 อธิบายวัตถุ N ที่ตรวจพบ โดยมีหนึ่งองค์ประกอบในแต่ละอาร์เรย์ที่สอดคล้องกับแต่ละวัตถุ

ดัชนี ชื่อ คำอธิบาย
0 สถานที่ อาร์เรย์หลายมิติของค่าจุดลอยตัว [N] [4] ระหว่าง 0 ถึง 1 อาร์เรย์ภายในแทนกล่องขอบเขตในรูปแบบ [บน ซ้าย ล่าง ขวา]
1 ชั้นเรียน อาร์เรย์ของจำนวนเต็ม N (เอาต์พุตเป็นค่าทศนิยม) แต่ละค่าระบุดัชนีของป้ายกำกับคลาสจากไฟล์ป้ายกำกับ
2 คะแนน อาร์เรย์ของค่าจุดลอยตัว N ระหว่าง 0 ถึง 1 ซึ่งแสดงถึงความน่าจะเป็นที่ตรวจพบคลาส
3 จำนวนการตรวจจับ ค่าจำนวนเต็มของ N

ตัวอย่างเช่น ลองจินตนาการถึงแบบจำลองที่ได้รับการฝึกให้ตรวจจับแอปเปิ้ล กล้วย และสตรอเบอร์รี่ เมื่อระบุรูปภาพ มันจะส่งออกผลลัพธ์การตรวจจับตามจำนวนที่กำหนด - ในตัวอย่างนี้ 5

ระดับ คะแนน ที่ตั้ง
แอปเปิล 0.92 [18, 21, 57, 63]
กล้วย 0.88 [100, 30, 180, 150]
สตรอเบอร์รี่ 0.87 [7, 82, 89, 163]
กล้วย 0.23 [42, 66, 57, 83]
แอปเปิล 0.11 [6, 42, 31, 58]

คะแนนความเชื่อมั่น

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

คุณสามารถเลือกเกณฑ์การตัดยอดด้านล่างที่คุณจะทิ้งผลการตรวจจับได้ ทั้งนี้ขึ้นอยู่กับใบสมัครของคุณ สำหรับตัวอย่างปัจจุบัน จุดตัดที่สมเหตุสมผลคือคะแนน 0.5 (หมายถึงความน่าจะเป็น 50% ที่การตรวจจับนั้นถูกต้อง) ในกรณีนั้น ออบเจ็กต์สองรายการสุดท้ายในอาร์เรย์จะถูกละเว้น เนื่องจากคะแนนความเชื่อมั่นเหล่านั้นต่ำกว่า 0.5:

ระดับ คะแนน ที่ตั้ง
แอปเปิล 0.92 [18, 21, 57, 63]
กล้วย 0.88 [100, 30, 180, 150]
สตรอเบอร์รี่ 0.87 [7, 82, 89, 163]
กล้วย 0.23 [42, 66, 57, 83]
แอปเปิล 0.11 [6, 42, 31, 58]

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

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

ภาพหน้าจอของตัวอย่าง Android ที่แสดงผลบวกลวง

ที่ตั้ง

สำหรับวัตถุแต่ละชิ้นที่ตรวจพบ โมเดลจะส่งกลับอาร์เรย์ของตัวเลขสี่ตัวที่แสดงถึงกรอบสี่เหลี่ยมล้อมรอบตำแหน่ง สำหรับรุ่นสตาร์ทเตอร์ที่ให้มา จะเรียงลำดับเลขดังนี้:

[ สูงสุด, ซ้าย, ด้านล่าง, ขวา ]

ค่าบนสุดแสดงถึงระยะห่างของขอบด้านบนของสี่เหลี่ยมผืนผ้าจากด้านบนของภาพ มีหน่วยเป็นพิกเซล ค่าด้านซ้ายแสดงถึงระยะห่างของขอบด้านซ้ายจากด้านซ้ายของรูปภาพที่ป้อน ค่าอื่นๆ แสดงถึงขอบด้านล่างและด้านขวาในลักษณะที่คล้ายกัน

เกณฑ์มาตรฐานประสิทธิภาพ

หมายเลขเกณฑ์มาตรฐานประสิทธิภาพสำหรับ โมเดลเริ่มต้น ของเราสร้างขึ้นด้วยเครื่องมือ ที่อธิบายไว้ที่นี่

ชื่อรุ่น ขนาดโมเดล อุปกรณ์ จีพียู ซีพียู
COCO SSD MobileNet เวอร์ชัน 1.1 27 ลบ พิกเซล 3 (Android 10) 22ms 46ms*
พิกเซล 4 (Android 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7.6ms 11 มิลลิวินาที**

* ใช้ 4 เธรด

** ใช้ 2 เธรดบน iPhone เพื่อผลลัพธ์ประสิทธิภาพที่ดีที่สุด

การปรับแต่งโมเดล

โมเดลที่ได้รับการฝึกอบรมล่วงหน้า

โมเดลการตรวจจับที่ปรับให้เหมาะกับมือถือพร้อมคุณสมบัติความหน่วงและความแม่นยำที่หลากหลายสามารถพบได้ใน Detection Zoo แต่ละรายการเป็นไปตามลายเซ็นอินพุตและเอาต์พุตที่อธิบายไว้ในส่วนต่อไปนี้

ไฟล์ zip ดาวน์โหลดส่วนใหญ่จะมีไฟล์ model.tflite หากไม่มี คุณสามารถสร้าง flatbuffer ของ TensorFlow Lite ได้โดยใช้ คำแนะนำเหล่านี้ โมเดล SSD จาก TF2 Object Detection Zoo สามารถแปลงเป็น TensorFlow Lite ได้โดยใช้คำแนะนำ ที่นี่ สิ่งสำคัญที่ควรทราบคือโมเดลการตรวจจับไม่สามารถแปลงได้โดยตรงโดยใช้ TensorFlow Lite Converter เนื่องจากต้องใช้ขั้นตอนกลางในการสร้างโมเดลต้นทางที่เหมาะกับอุปกรณ์พกพา สคริปต์ที่ลิงก์ด้านบนดำเนินการตามขั้นตอนนี้

สคริปต์การส่งออกทั้ง TF1 และ TF2 มีพารามิเตอร์ที่สามารถเปิดใช้งานออบเจ็กต์เอาต์พุตจำนวนมากขึ้นหรือการประมวลผลภายหลังที่ช้าลงและแม่นยำยิ่งขึ้น โปรดใช้ --help กับสคริปต์เพื่อดูรายการอาร์กิวเมนต์ที่รองรับทั้งหมด

ในปัจจุบัน การอนุมานบนอุปกรณ์ได้รับการปรับให้เหมาะกับรุ่น SSD เท่านั้น การสนับสนุนที่ดีขึ้นสำหรับสถาปัตยกรรมอื่นๆ เช่น CenterNet และ EfficientDet กำลังได้รับการตรวจสอบ

จะเลือกรุ่นเพื่อปรับแต่งได้อย่างไร?

แต่ละรุ่นมาพร้อมกับความแม่นยำของตัวเอง (วัดปริมาณด้วยค่า mAP) และคุณลักษณะเวลาในการตอบสนอง คุณควรเลือกรุ่นที่เหมาะกับการใช้งานและฮาร์ดแวร์ที่คุณต้องการมากที่สุด ตัวอย่างเช่น รุ่น Edge TPU เหมาะอย่างยิ่งสำหรับการอนุมานบน Edge TPU ของ Google บน Pixel 4

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

การปรับแต่งโมเดลอย่างละเอียดบนข้อมูลที่กำหนดเอง

โมเดลที่ได้รับการฝึกล่วงหน้าที่เราจัดเตรียมไว้ให้นั้นได้รับการฝึกฝนให้ตรวจจับวัตถุได้ 90 คลาส สำหรับรายการคลาสทั้งหมด โปรดดูไฟล์ป้ายกำกับใน ข้อมูลเมตาของโมเดล

คุณสามารถใช้เทคนิคที่เรียกว่าการเรียนรู้แบบถ่ายโอนเพื่อฝึกโมเดลใหม่เพื่อจดจำคลาสที่ไม่ได้อยู่ในชุดดั้งเดิม ตัวอย่างเช่น คุณสามารถฝึกแบบจำลองอีกครั้งเพื่อตรวจจับผักหลายประเภท แม้ว่าข้อมูลการฝึกดั้งเดิมจะมีผักเพียงชนิดเดียวก็ตาม ในการดำเนินการนี้ คุณจะต้องมีชุดอิมเมจการฝึกสำหรับป้ายกำกับใหม่แต่ละป้ายกำกับที่คุณต้องการฝึก วิธีที่แนะนำคือการใช้ไลบรารี TensorFlow Lite Model Maker ซึ่งช่วยให้กระบวนการฝึกโมเดล TensorFlow Lite ง่ายขึ้นโดยใช้ชุดข้อมูลที่กำหนดเอง โดยมีโค้ดไม่กี่บรรทัด ใช้การเรียนรู้แบบถ่ายโอนเพื่อลดปริมาณข้อมูลและเวลาการฝึกอบรมที่จำเป็น คุณยังสามารถเรียนรู้จาก Colab การตรวจจับ Few-shot เพื่อเป็นตัวอย่างของการปรับแต่งโมเดลที่ได้รับการฝึกล่วงหน้าโดยละเอียดพร้อมตัวอย่างบางส่วน

หากต้องการปรับแต่งอย่างละเอียดด้วยชุดข้อมูลขนาดใหญ่ โปรดดูคำแนะนำเหล่านี้เพื่อฝึกฝนโมเดลของคุณเองด้วย TensorFlow Object Detection API: TF1 , TF2 เมื่อผ่านการฝึกอบรมแล้ว พวกเขาสามารถแปลงเป็นรูปแบบที่เหมาะกับ TFLite ได้ โดยมีคำแนะนำที่นี่: TF1 , TF2