งานตัวแยกประเภทรูปภาพ MediaPipe ให้คุณดำเนินการแยกประเภทรูปภาพได้ คุณสามารถใช้งานนี้เพื่อระบุว่ารูปภาพแสดงถึงอะไรจากชุดหมวดหมู่ที่กำหนดไว้ในเวลาการฝึก งานนี้ดำเนินการกับข้อมูลอิมเมจที่มีโมเดลแมชชีนเลิร์นนิง (ML) เป็นข้อมูลคงที่หรือสตรีมอย่างต่อเนื่อง และแสดงรายการหมวดหมู่ที่เป็นไปได้ซึ่งจัดอันดับตามคะแนนความน่าจะเป็นจากมากไปน้อย
เริ่มต้นใช้งาน
เริ่มใช้งานนี้โดยทำตามคำแนะนำในการใช้งานสำหรับแพลตฟอร์มเป้าหมาย คำแนะนำเฉพาะแพลตฟอร์มเหล่านี้จะแนะนำการใช้งานเบื้องต้นของงานนี้ โดยใช้โมเดลที่แนะนำ และแสดงตัวอย่างโค้ดที่มีตัวเลือกการกำหนดค่าที่แนะนำ
- Android - ตัวอย่างโค้ด - คำแนะนำ
- Python - ตัวอย่างโค้ด - คำแนะนำ
- เว็บ - ตัวอย่างโค้ด - คำแนะนำ
- iOS - ตัวอย่างโค้ด - คำแนะนำ
รายละเอียดงาน
ส่วนนี้จะอธิบายความสามารถ อินพุต เอาต์พุต และตัวเลือกการกำหนดค่าของงานนี้
ฟีเจอร์
- การประมวลผลรูปภาพอินพุต - การประมวลผลรวมถึงการหมุนรูปภาพ การปรับขนาด การทำให้เป็นมาตรฐาน และการแปลงพื้นที่สี
- ภูมิภาคที่สนใจ - ทำการแยกประเภทในภูมิภาคของรูปภาพ แทนที่จะเป็นทั้งรูปภาพ
- ติดป้ายกำกับภาษาในแผนที่ - ตั้งค่าภาษาที่ใช้สำหรับชื่อที่แสดง
- เกณฑ์คะแนน - กรองผลลัพธ์ตามคะแนนการคาดการณ์
- การจัดประเภทแบบ Top-k - จำกัดจำนวนผลลัพธ์การจัดประเภท
- ติดป้ายกำกับรายการที่อนุญาตและรายการที่ปฏิเสธ - ระบุหมวดหมู่ที่จัดประเภทแล้ว
ข้อมูลงาน | เอาต์พุตของงาน |
---|---|
อินพุตอาจเป็นข้อมูลประเภทใดประเภทหนึ่งดังต่อไปนี้
|
ตัวแยกประเภทรูปภาพจะแสดงรายการหมวดหมู่ที่มี
|
ตัวเลือกการกำหนดค่า
งานมีตัวเลือกการกำหนดค่าต่อไปนี้
ชื่อตัวเลือก | คำอธิบาย | ช่วงของค่า | ค่าเริ่มต้น |
---|---|---|---|
running_mode |
ตั้งค่าโหมดการทำงาน มี 3 โหมดดังนี้ IMAGE: โหมดสำหรับการป้อนข้อมูลรูปภาพเดียว วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสของวิดีโอ LIVE_Stream: โหมดสำหรับสตรีมแบบสดของข้อมูลอินพุต เช่น จากกล้อง ในโหมดนี้ ต้องมีการเรียกใช้ resultsListener เพื่อตั้งค่า Listener เพื่อรับผลลัพธ์แบบไม่พร้อมกัน |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names_locale |
ตั้งค่าภาษาของป้ายกำกับที่จะใช้กับชื่อที่แสดงซึ่งระบุไว้ในข้อมูลเมตาของโมเดลของงาน หากมี ค่าเริ่มต้นคือ en สำหรับภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลเป็นภาษาท้องถิ่นลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้โดยใช้ TensorFlow Lite Metadata Writer API |
รหัสภาษา | en |
max_results |
ตั้งค่าจำนวนสูงสุดของผลลัพธ์การจัดประเภทที่มีคะแนนสูงสุด หากต้องการแสดงผล หาก < 0 ระบบจะแสดงผลทั้งหมดที่มี | ตัวเลขจำนวนบวกใดก็ได้ | -1 |
score_threshold |
ตั้งค่าเกณฑ์คะแนนการคาดการณ์ที่จะลบล้างเกณฑ์ที่ระบุไว้ในข้อมูลเมตาของโมเดล (หากมี) ผลลัพธ์ที่ต่ำกว่าค่านี้ถูกปฏิเสธ | จำนวนลอยตัวใดก็ได้ | ไม่ได้ตั้งค่า |
category_allowlist |
ตั้งค่ารายการตัวเลือกของชื่อหมวดหมู่ที่อนุญาต หากไม่ว่างเปล่า ผลลัพธ์การจัดประเภทที่ไม่มีชื่อหมวดหมู่ในชุดนี้จะถูกกรองออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก
ตัวเลือกนี้ใช้ด้วยกันกับ category_denylist ไม่ได้ และการใช้ทั้ง 2 รายการจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
category_denylist |
ตั้งค่ารายการตัวเลือกของชื่อหมวดหมู่ที่ไม่ได้รับอนุญาต หากไม่ว่างเปล่า ผลลัพธ์การจัดประเภทซึ่งมีชื่อหมวดหมู่อยู่ในชุดนี้จะถูกกรองออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้ใช้ด้วยกันกับ category_allowlist ไม่ได้เลย และใช้ทั้ง 2 ผลลัพธ์เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
result_callback |
ตั้งค่า Listener ผลลัพธ์เพื่อรับผลการจัดประเภทแบบไม่พร้อมกันเมื่อตัวแยกประเภทรูปภาพอยู่ในโหมดสตรีมแบบสด ใช้ได้เมื่อตั้งค่าโหมดการทำงานเป็น LIVE_STREAM เท่านั้น |
ไม่มีข้อมูล | ไม่ได้ตั้งค่า |
รูปแบบ
ตัวแยกประเภทรูปภาพกำหนดให้ต้องดาวน์โหลดและจัดเก็บโมเดลการจัดประเภทรูปภาพในไดเรกทอรีโปรเจ็กต์ เริ่มต้นด้วยโมเดลเริ่มต้นที่แนะนำสำหรับแพลตฟอร์มเป้าหมายเมื่อคุณเริ่มพัฒนาด้วยงานนี้ รุ่นอื่นๆ ที่มีอยู่มักมีข้อดีข้อเสียระหว่างประสิทธิภาพ ความแม่นยำ ความละเอียด และข้อกำหนดทรัพยากร และในบางกรณีอาจมีฟีเจอร์เพิ่มเติมรวมอยู่ด้วย
โมเดล EfficientNet-Lite0 (แนะนำ)
โมเดล EfficientNet-Lite0 ใช้สถาปัตยกรรม EfficientNet และได้รับการฝึกโดยใช้ ImageNet ให้จดจำคลาส 1,000 รายการ เช่น ต้นไม้ สัตว์ อาหาร ยานพาหนะ บุคคล ฯลฯ ดูรายการแบบเต็มของป้ายกำกับที่รองรับ EfficientNet-Lite0 มีให้ใช้งานในโมเดล int8 และ Float 32 เราขอแนะนำให้ใช้รูปแบบนี้เพราะมีความสมดุลระหว่างเวลาในการตอบสนองกับความแม่นยำ ทั้งมีความแม่นยำและน้ำหนักเบาเพียงพอสำหรับการใช้งานต่างๆ
ชื่อโมเดล | รูปร่างอินพุต | ประเภทการหาปริมาณ | ฉบับ |
---|---|---|---|
EfficientNet-Lite0 (int8) | 224 X 224 | int8 | ล่าสุด |
EfficientNet-Lite0 (ทศนิยม 32) | 224 X 224 | ไม่มี (Float32) | ล่าสุด |
โมเดล EfficientNet-Lite2
โมเดล EfficientNet-Lite2 ใช้สถาปัตยกรรม EfficientNet และได้รับการฝึกโดยใช้ ImageNet ให้จดจำคลาส 1,000 รายการ เช่น ต้นไม้ สัตว์ อาหาร ยานพาหนะ บุคคล ฯลฯ ดูรายการแบบเต็มของป้ายกำกับที่รองรับ EfficientNet-Lite2 มีให้ใช้งานในโมเดล int8 และ Float 32 โดยทั่วไปแล้วโมเดลนี้จะมีความแม่นยำมากกว่า EfficientNet-Lite0 แต่ก็ช้ากว่าและใช้หน่วยความจำมากกว่าด้วย รูปแบบนี้เหมาะสำหรับกรณีการใช้งานที่ความแม่นยำสูงกว่าความเร็วหรือขนาด
ชื่อโมเดล | รูปร่างอินพุต | ประเภทการหาปริมาณ | ฉบับ |
---|---|---|---|
EfficientNet-Lite2 (int8) | 224 X 224 | int8 | ล่าสุด |
EfficientNet-Lite2 (Float 32) | 224 X 224 | ไม่มี (Float32) | ล่าสุด |
การเปรียบเทียบงาน
นี่คือการเปรียบเทียบงานสำหรับทั้งไปป์ไลน์ตามโมเดลที่ฝึกล่วงหน้าไว้ข้างต้น ผลของเวลาในการตอบสนองคือเวลาในการตอบสนองโดยเฉลี่ยใน Pixel 6 ที่ใช้ CPU / GPU
ชื่อโมเดล | เวลาในการตอบสนองของ CPU | เวลาในการตอบสนองของ GPU |
---|---|---|
EfficientNet-Lite0 (ทศนิยม 32) | 23.52 มิลลิวินาที | 18.90 มิลลิวินาที |
EfficientNet-Lite0 (int8) | 10.08 มิลลิวินาที | - |
EfficientNet-Lite2 (ทศนิยม 32) | 44.17 มิลลิวินาที | 22.20 มิลลิวินาที |
EfficientNet-Lite2 (int8) | 19.43 มิลลิวินาที | - |
โมเดลที่กำหนดเอง
คุณใช้โมเดล ML ที่กำหนดเองกับงานนี้ได้หากต้องการปรับปรุงหรือแก้ไขความสามารถของโมเดลที่มีให้ คุณสามารถใช้ Model Maker เพื่อแก้ไขโมเดลที่มีอยู่ หรือสร้างโมเดลโดยใช้เครื่องมืออย่าง TensorFlow โมเดลที่กำหนดเองซึ่งใช้กับ MediaPipe ต้องอยู่ในรูปแบบ TensorFlow Lite และต้องมีข้อมูลเมตาที่เจาะจงซึ่งอธิบายถึงพารามิเตอร์การดำเนินการของโมเดล คุณควรพิจารณาใช้ Model Maker เพื่อแก้ไขโมเดลที่มีให้สำหรับงานนี้ ก่อนที่จะสร้างโมเดลของคุณเอง
หากสนใจสร้างตัวแยกประเภทรูปภาพที่กำหนดเองโดยใช้ชุดข้อมูลของคุณเอง ให้เริ่มจากบทแนะนำการปรับแต่งตัวแยกประเภทรูปภาพ