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