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

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

ลองเลย

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

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

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

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

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

ฟีเจอร์

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

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

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

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

IMAGE: โหมดสำหรับการป้อนข้อมูลรูปภาพเดียว

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

LIVE_Stream: โหมดสำหรับสตรีมแบบสดของข้อมูลอินพุต เช่น จากกล้อง ในโหมดนี้ ต้องมีการเรียกใช้ resultsListener เพื่อตั้งค่า 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 (ทศนิยม 16) 320 x 320 ทศนิยม 16 ล่าสุด
EfficientDet-Lite0 (ทศนิยม 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 (ทศนิยม 16) 448 x 448 ทศนิยม 16 ล่าสุด
EfficientDet-Lite2 (ทศนิยม 32) 448 x 448 ไม่มี (Float32) ล่าสุด

โมเดล SSD MobileNetV2

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

ชื่อโมเดล รูปร่างอินพุต ประเภทการหาปริมาณ ฉบับ
SSDMobileNet-V2 (int8) 256 x 256 int8 ล่าสุด
SSDMobileNet-V2 (ทศนิยม 32) 256 x 256 ไม่มี (Float32) ล่าสุด

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

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

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

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

ข้อกำหนดข้อมูลเมตา

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

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

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

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