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

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

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

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

เริ่ม

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

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

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

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

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

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

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

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

แอนดรอยด์

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

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

ดูตัวอย่าง Android

iOS

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

ดูตัวอย่าง iOS

คำอธิบายรุ่น

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

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

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

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

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

สมมติว่าภาพที่คาดไว้คือ 300x300 พิกเซล โดยมีสามช่อง (แดง น้ำเงิน และเขียว) ต่อพิกเซล สิ่งนี้ควรป้อนให้กับโมเดลเป็นบัฟเฟอร์แบบแบนที่มีค่า 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 v1.1 27 ลบ พิกเซล 3 (แอนดรอยด์ 10) 22ms 46ms*
พิกเซล 4 (แอนดรอยด์ 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7.6ms 11 มิลลิวินาที**

* ใช้ 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