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

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

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

สกรีนช็อตของตัวอย่าง Android

เริ่ม

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

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

ดาวน์โหลดโมเดลสตาร์ทด้วย Metadata

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

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

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

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

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

Android

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

ตัวอย่าง Android ด้านล่างสาธิตการใช้งานสำหรับทั้งสองวิธีเป็น lib_task_api และ lib_interpreter ตามลำดับ

ดูตัวอย่าง Android

iOS

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

ดูตัวอย่าง iOS

คำอธิบายแบบจำลอง

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

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

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

ใส่ลายเซ็น

ตัวแบบใช้รูปภาพเป็นอินพุต

ให้สมมติว่าภาพที่คาดหวังคือ 300x300 พิกเซล โดยมีสามช่องสัญญาณ (แดง น้ำเงิน และเขียว) ต่อพิกเซล สิ่งนี้ควรป้อนให้กับโมเดลเป็นบัฟเฟอร์แบบแบนซึ่งมีค่า 270,000 ไบต์ (300x300x3) หากโมเดลเป็นแบบ quantized แต่ละค่าควรเป็นไบต์เดียวแทนค่าระหว่าง 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 ที่แสดงผลบวกลวง

ที่ตั้ง

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

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

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

มาตรฐานประสิทธิภาพ

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

ชื่อรุ่น ขนาดรุ่น อุปกรณ์ GPU ซีพียู
COCO SSD MobileNet v1 27 Mb พิกเซล 3 (แอนดรอยด์ 10) 22ms 46ms*
พิกเซล 4 (แอนดรอยด์ 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7.6ms 11ms**

* ใช้ 4 เธรด

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

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

รุ่นก่อนการฝึกอบรม

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

ไฟล์ zip ดาวน์โหลดส่วนใหญ่มีไฟล์ model.tflite หากไม่มี คุณสามารถสร้างบัฟเฟอร์แบบแบน 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 การตรวจจับภาพไม่กี่ช็อต เป็นตัวอย่างของการปรับแต่งโมเดลที่ได้รับการฝึกอบรมล่วงหน้าพร้อมตัวอย่างบางส่วน

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