งานตัวตรวจจับวัตถุ MediaPipe ช่วยให้คุณตรวจหาการมีอยู่และตำแหน่งของวัตถุหลายคลาสภายในรูปภาพหรือวิดีโอได้ เช่น เครื่องมือตรวจจับวัตถุสามารถหาตำแหน่งสุนัขในรูปภาพ งานนี้จะดำเนินการกับข้อมูลรูปภาพด้วยโมเดลแมชชีนเลิร์นนิง (ML) โดยรับข้อมูลแบบคงที่หรือสตรีมวิดีโอต่อเนื่องเป็นอินพุต และแสดงผลรายการผลการตรวจจับ ผลการตรวจจับแต่ละรายการแสดงถึงวัตถุที่ปรากฏในรูปภาพหรือวิดีโอ
เริ่มต้นใช้งาน
เริ่มใช้งานนี้โดยทำตามคู่มือการใช้งานต่อไปนี้สำหรับแพลตฟอร์มที่คุณใช้
- Android - ตัวอย่างโค้ด - คำแนะนำ
- Python - ตัวอย่างโค้ด - คู่มือ
- เว็บ - ตัวอย่างโค้ด - คำแนะนำ
- iOS - ตัวอย่างโค้ด - คำแนะนำ
คู่มือเฉพาะแพลตฟอร์มเหล่านี้จะแนะนำการใช้งานพื้นฐานของงานนี้ รวมถึงรูปแบบที่แนะนําและตัวอย่างโค้ดที่มีตัวเลือกการกําหนดค่าที่แนะนํา
รายละเอียดงาน
ส่วนนี้อธิบายความสามารถ อินพุต และเอาต์พุตของงานนี้
ฟีเจอร์
- การประมวลผลรูปภาพอินพุต - การประมวลผลประกอบด้วยการหมุนรูปภาพ การปรับขนาด การปรับให้เป็นมาตรฐาน และการแปลงพื้นที่สี
- ภาษาของแผนที่ป้ายกำกับ - ตั้งค่าภาษาที่ใช้สำหรับชื่อที่แสดง
- เกณฑ์คะแนน - กรองผลลัพธ์ตามคะแนนการคาดการณ์
- การตรวจหา 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 (แนะนำ)
โมเดล 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 มิลลิวินาที |