คู่มืองานการแยกประเภทรูปภาพ

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

ลองเลย

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

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

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

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

ฟีเจอร์

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

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

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

ชื่อตัวเลือก คำอธิบาย ช่วงของค่า ค่าเริ่มต้น
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 และได้รับการฝึกโดยใช้ 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 เพื่อแก้ไขโมเดลที่มีให้สำหรับงานนี้ ก่อนที่จะสร้างโมเดลของคุณเอง

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