คู่มืองานการตรวจจับวัตถุ

แมวและสุนัขที่ไฮไลต์ด้วยกรอบขอบเขตที่ติดป้ายกำกับอย่างถูกต้อง

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

ลองใช้เลย

เริ่มต้นใช้งาน

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

คู่มือเฉพาะแพลตฟอร์มเหล่านี้จะแนะนำการใช้งานพื้นฐานของงานนี้ รวมถึงรูปแบบที่แนะนําและตัวอย่างโค้ดที่มีตัวเลือกการกําหนดค่าที่แนะนํา

รายละเอียดงาน

ส่วนนี้อธิบายความสามารถ อินพุต และเอาต์พุตของงานนี้

ฟีเจอร์

  • การประมวลผลรูปภาพอินพุต - การประมวลผลประกอบด้วยการหมุนรูปภาพ การปรับขนาด การปรับให้เป็นมาตรฐาน และการแปลงพื้นที่สี
  • ภาษาของแผนที่ป้ายกำกับ - ตั้งค่าภาษาที่ใช้สำหรับชื่อที่แสดง
  • เกณฑ์คะแนน - กรองผลลัพธ์ตามคะแนนการคาดการณ์
  • การตรวจหา Top-k - กรองผลลัพธ์การตรวจหาตัวเลข
  • ติดป้ายกำกับรายการที่อนุญาตและรายการที่ปฏิเสธ - ระบุหมวดหมู่ที่ตรวจพบ
อินพุตงาน เอาต์พุตของงาน
Object Detector API ยอมรับอินพุตประเภทข้อมูลอย่างใดอย่างหนึ่งต่อไปนี้
  • ภาพนิ่ง
  • เฟรมวิดีโอที่ถอดรหัสแล้ว
  • ฟีดวิดีโอสด
Object Detector API จะแสดงผลลัพธ์ต่อไปนี้สำหรับวัตถุที่ตรวจพบ
  • หมวดหมู่ของวัตถุ
  • คะแนนความน่าจะเป็น
  • พิกัดกรอบล้อมรอบ

ตัวเลือกการกําหนดค่า

งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้

ชื่อตัวเลือก คำอธิบาย ช่วงของค่า ค่าเริ่มต้น
running_mode ตั้งค่าโหมดการทํางานสําหรับงาน โดยโหมดมี 3 แบบ ดังนี้

รูปภาพ: โหมดสำหรับอินพุตรูปภาพเดียว

วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสของวิดีโอ

LIVE_STREAM: โหมดสตรีมแบบสดของข้อมูลอินพุต เช่น จากกล้อง ในโหมดนี้ คุณต้องเรียกใช้ resultListener เพื่อตั้งค่า Listener เพื่อรับผลลัพธ์แบบไม่พร้อมกัน
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names ตั้งค่าภาษาของป้ายกำกับที่จะใช้สำหรับชื่อที่แสดงซึ่งระบุไว้ในข้อมูลเมตาของโมเดลของงาน (หากมี) ค่าเริ่มต้นคือ en สำหรับภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลแล้วลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้โดยใช้ TensorFlow Lite Metadata Writer API รหัสภาษา en
max_results กําหนดจํานวนสูงสุดของผลการค้นหาที่ตรวจพบซึ่งได้คะแนนสูงสุดที่จะแสดง (ไม่บังคับ) ตัวเลขบวกใดก็ได้ -1 (แสดงผลลัพธ์ทั้งหมด)
score_threshold ตั้งค่าเกณฑ์คะแนนการคาดการณ์ที่จะลบล้างเกณฑ์ที่ระบุไว้ในข้อมูลเมตาของโมเดล (หากมี) ระบบจะปฏิเสธผลลัพธ์ที่ต่ำกว่าค่านี้ ตัวเลขทศนิยม ไม่ได้ตั้งค่า
category_allowlist ตั้งค่ารายการชื่อหมวดหมู่ที่อนุญาต (ไม่บังคับ) หากไม่ว่างเปล่า ระบบจะกรองผลการตรวจหาที่มีชื่อหมวดหมู่ไม่อยู่ในชุดนี้ออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้ใช้ร่วมกับ category_denylist ไม่ได้ และการใช้ทั้ง 2 ตัวเลือกจะทำให้เกิดข้อผิดพลาด สตริงใดก็ได้ ไม่ได้ตั้งค่า
category_denylist ตั้งค่ารายการชื่อหมวดหมู่ที่ไม่อนุญาต (ไม่บังคับ) หากไม่ว่างเปล่า ระบบจะกรองผลการตรวจหาที่มีชื่อหมวดหมู่อยู่ในชุดนี้ออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้ใช้ร่วมกันกับ category_allowlist ไม่ได้ และการใช้ทั้ง 2 ตัวเลือกจะทำให้เกิดข้อผิดพลาด สตริงใดก็ได้ ไม่ได้ตั้งค่า

โมเดล

Object Detector API กำหนดให้ต้องดาวน์โหลดและจัดเก็บโมเดลการตรวจจับวัตถุไว้ในไดเรกทอรีโปรเจ็กต์ หากยังไม่มีโมเดล ให้เริ่มต้นด้วยโมเดลเริ่มต้นที่แนะนํา โมเดลอื่นๆ ที่แสดงในส่วนนี้จะเลือกระหว่างเวลาในการตอบสนองกับความแม่นยำ

โมเดล EfficientDet-Lite0 ใช้แบ็กโบนน์ EfficientNet-Lite0 ขนาดอินพุต 320x320 และเครือข่ายฟีเจอร์ BiFPN โมเดลได้รับการฝึกด้วยชุดข้อมูล COCO ซึ่งเป็นชุดข้อมูลการตรวจจับวัตถุขนาดใหญ่ที่มีอินสแตนซ์ของวัตถุ 1.5 ล้านรายการและป้ายกำกับวัตถุ 80 รายการ ดูรายการทั้งหมดของป้ายกำกับที่รองรับ EfficientDet-Lite0 มีให้บริการในรูปแบบ int8, float16 หรือ float32 เราขอแนะนํารูปแบบนี้เนื่องจากช่วยให้เกิดความสมดุลระหว่างเวลาในการตอบสนองกับความแม่นยำ ทั้งยังแม่นยำและเบาพอสําหรับกรณีการใช้งานหลายประเภท

ชื่อโมเดล รูปร่างอินพุต ประเภทการแปลงค่าเป็นจำนวนเต็ม เวอร์ชัน
EfficientDet-Lite0 (int8) 320 x 320 int8 ล่าสุด
EfficientDet-Lite0 (float 16) 320 x 320 ลอย 16 ล่าสุด
EfficientDet-Lite0 (float 32) 320 x 320 ไม่มี (float32) ล่าสุด

โมเดล EfficientDet-Lite2

โมเดล EfficientDet-Lite2 ใช้แบ็กโบนน์ EfficientNet-Lite2 ที่มีขนาดอินพุต 448x448 และเครือข่ายฟีเจอร์ BiFPN โมเดลได้รับการฝึกด้วยชุดข้อมูล COCO ซึ่งเป็นชุดข้อมูลการตรวจจับวัตถุขนาดใหญ่ที่มีอินสแตนซ์ของวัตถุ 1.5 ล้านรายการและป้ายกำกับวัตถุ 80 รายการ ดูรายการทั้งหมดของป้ายกำกับที่รองรับ EfficientDet-Lite2 มีให้บริการในรูปแบบ int8, float16 หรือ float32 โดยทั่วไปแล้วโมเดลนี้จะแม่นยำกว่า EfficientDet-Lite0 แต่ก็ช้ากว่าและใช้หน่วยความจํามากกว่า โมเดลนี้เหมาะสำหรับกรณีที่มีความแม่นยำสำคัญกว่าความเร็วและขนาด

ชื่อโมเดล รูปร่างอินพุต ประเภทการแปลงค่าเป็นจำนวนเต็ม เวอร์ชัน
EfficientDet-Lite2 (int8) 448 x 448 int8 ล่าสุด
EfficientDet-Lite2 (float 16) 448 x 448 ลอย 16 ล่าสุด
EfficientDet-Lite2 (float 32) 448 x 448 ไม่มี (float32) ล่าสุด

โมเดล SSD MobileNetV2

โมเดล SSD MobileNetV2 ใช้แบ็กโบน MobileNetV2 ที่มีขนาดอินพุต 256x256 และเครือข่ายฟีเจอร์ SSD โมเดลได้รับการฝึกด้วยชุดข้อมูล COCO ซึ่งเป็นชุดข้อมูลการตรวจจับวัตถุขนาดใหญ่ที่มีอินสแตนซ์ของวัตถุ 1.5 ล้านรายการและป้ายกำกับวัตถุ 80 รายการ ดูรายการทั้งหมดของป้ายกำกับที่รองรับ SSD MobileNetV2 มีให้บริการเป็นโมเดล int8 และ float 32 โมเดลนี้เร็วกว่าและเบากว่า EfficientDet-Lite0 แต่โดยทั่วไปแล้วก็จะแม่นยำน้อยกว่าด้วย รูปแบบนี้เหมาะสำหรับกรณีการใช้งานที่ต้องใช้รูปแบบที่รวดเร็วและเบา แต่ลดความแม่นยำลง

ชื่อโมเดล รูปร่างอินพุต ประเภทการแปลงค่าเป็นจำนวนเต็ม เวอร์ชัน
SSDMobileNet-V2 (int8) 256 x 256 int8 ล่าสุด
SSDMobileNet-V2 (float 32) 256 x 256 ไม่มี (float32) ล่าสุด

ข้อกําหนดและข้อมูลเมตาของโมเดล

ส่วนนี้อธิบายข้อกําหนดสําหรับโมเดลที่กําหนดเองหากคุณตัดสินใจที่จะสร้างโมเดลเพื่อใช้กับงานนี้ โมเดลที่กําหนดเองต้องอยู่ในรูปแบบ TensorFlow Lite และต้องระบุmetadataที่อธิบายพารามิเตอร์การทํางานของโมเดล

ข้อกำหนดด้านการออกแบบ

อินพุต รูปร่าง คำอธิบาย
รูปภาพอินพุต เทนเซอร์ Float32 ของรูปร่าง [1, height, width, 3] รูปภาพอินพุตที่แปลงเป็นรูปแบบมาตรฐาน
เอาต์พุต รูปร่าง คำอธิบาย
detection_boxes เทนเซอร์ Float32 ของรูปร่าง [1, num_boxes, 4] ตำแหน่งกล่องของวัตถุที่ตรวจพบแต่ละรายการ
detection_classes เทนเซอร์ Float32 รูปทรง [1, num_boxes] ดัชนีของชื่อคลาสสําหรับวัตถุที่ตรวจพบแต่ละรายการ
detection_scores เทนเซอร์ float32 รูปทรง [1, num_boxes] คะแนนการคาดการณ์สําหรับวัตถุที่ตรวจพบแต่ละรายการ
num_boxes เทนเซอร์ Float32 ขนาด 1 จํานวนกล่องที่ตรวจพบ

ข้อกำหนดเกี่ยวกับข้อมูลเมตา

พารามิเตอร์ คำอธิบาย คำอธิบาย
input_norm_mean ค่าเฉลี่ยที่ใช้ในการทำให้ Tensor อินพุตเป็นมาตรฐาน รูปภาพอินพุตที่แปลงเป็นรูปแบบมาตรฐาน
input_norm_std บรรทัดมาตรฐานที่ใช้ในการปรับให้เป็นมาตรฐานของ Tensor อินพุต ตำแหน่งกล่องของวัตถุที่ตรวจพบแต่ละรายการ
label_file_paths เส้นทางไปยังไฟล์ป้ายกำกับเทนเซอร์หมวดหมู่ หากโมเดลไม่มีไฟล์ป้ายกำกับ ให้ส่งรายการว่าง ดัชนีของชื่อคลาสสําหรับวัตถุที่ตรวจพบแต่ละรายการ
score_calibration_md ข้อมูลเกี่ยวกับการดําเนินการการปรับเทียบคะแนนในเทนเซอร์การจัดประเภท คุณไม่จำเป็นต้องระบุพารามิเตอร์นี้หากโมเดลไม่ได้ใช้การปรับเทียบคะแนน
คะแนนการคาดการณ์สําหรับวัตถุที่ตรวจพบแต่ละรายการ
num_boxes เทนเซอร์ Float32 ขนาด 1 จํานวนกล่องที่ตรวจพบ

การเปรียบเทียบงาน

ต่อไปนี้เป็นเกณฑ์การเปรียบเทียบงานสําหรับโมเดลที่ผ่านการฝึกล่วงหน้าข้างต้น ผลลัพธ์เวลาในการตอบสนองคือเวลาในการตอบสนองโดยเฉลี่ยใน Pixel 6 ที่ใช้ CPU / GPU

ชื่อแบบจำลอง เวลาในการตอบสนองของ CPU เวลาในการตอบสนองของ GPU
โมเดล EfficientDet-Lite0 float32 61.30 มิลลิวินาที 27.83 มิลลิวินาที
โมเดล EfficientDet-Lite0 float16 53.97 มิลลิวินาที 27.97ms
EfficientDet-Lite0 รุ่น int8 29.31 มิลลิวินาที -
โมเดล EfficientDet-Lite2 float32 197.98 มิลลิวินาที 41.15 มิลลิวินาที
โมเดล EfficientDet-Lite2 float16 198.77 มิลลิวินาที 47.31 มิลลิวินาที
โมเดล EfficientDet-Lite2 int8 70.91 มิลลิวินาที -
โมเดล SSD MobileNetV2 float32 36.30 มิลลิวินาที 24.01 มิลลิวินาที
โมเดล SSD MobileNetV2 float16 37.35 มิลลิวินาที 28.16 มิลลิวินาที