มีคำถาม? เชื่อมต่อกับชุมชนที่ฟอรัม TensorFlow เยี่ยมชมฟอรัม

การตรวจจับวัตถุ

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

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

ภาพหน้าจอของตัวอย่าง Android

เริ่ม

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

หากคุณใช้แพลตฟอร์มอื่นที่ไม่ใช่ Android หรือ iOS หรือหากคุณคุ้นเคยกับ TensorFlow Lite API แล้วคุณสามารถดาวน์โหลดโมเดลการตรวจจับวัตถุเริ่มต้นและป้ายกำกับที่มาพร้อมกันได้

ดาวน์โหลดโมเดลเริ่มต้นด้วยข้อมูลเมตา

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลเมตาและช่องที่เกี่ยวข้อง (เช่น labels.txt ) โปรดดูที่ อ่านข้อมูลเมตาจากแบบจำลอง

หากคุณต้องการฝึกโมเดลการตรวจจับแบบกำหนดเองสำหรับงานของคุณเองโปรดดูการ ปรับแต่งโมเดล

สำหรับกรณีการใช้งานต่อไปนี้คุณควรใช้โมเดลประเภทอื่น:

  • การคาดการณ์ว่าป้ายกำกับเดียวใดที่รูปภาพน่าจะแสดงถึง (ดูการ จัดประเภทรูปภาพ )
  • การคาดคะเนองค์ประกอบของภาพตัวอย่างเช่นเรื่องกับพื้นหลัง (ดู การแบ่งส่วน )

ตัวอย่างการใช้งานและคำแนะนำ

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

Android

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

ตัวอย่าง Android ด้านล่างนี้แสดงให้เห็นถึงการใช้งานสำหรับทั้งสองวิธีเป็น lib_task_api และ lib_interpreter ตามลำดับ

ดูตัวอย่าง Android

iOS

คุณสามารถรวมโมเดลโดยใช้ TensorFlow Lite Interpreter Swift API ดูตัวอย่าง iOS ด้านล่าง

ดูตัวอย่าง iOS

คำอธิบายแบบจำลอง

ส่วนนี้อธิบายลายเซ็นสำหรับรุ่น Single-Shot Detector ที่ แปลงเป็น TensorFlow Lite จาก TensorFlow Object Detection API

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

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

ป้อนลายเซ็น

โมเดลใช้ภาพเป็นอินพุต

สมมติว่าภาพที่คาดไว้คือ 300x300 พิกเซลโดยมีสามช่องสัญญาณ (สีแดงสีน้ำเงินและสีเขียว) ต่อพิกเซล ควรป้อนให้กับโมเดลเป็นบัฟเฟอร์แบบแบนที่มีค่า 270,000 ไบต์ (300x300x3) หากโมเดลมีการ วัดปริมาณ แต่ละค่าควรเป็นไบต์เดียวที่แสดงค่าระหว่าง 0 ถึง 255

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

ลายเซ็นเอาต์พุต

แบบจำลองส่งออกสี่อาร์เรย์ที่แมปกับดัชนี 0-4 อาร์เรย์ 0, 1 และ 2 อธิบายอ็อบเจ็กต์ที่ตรวจพบ N โดยมีองค์ประกอบหนึ่งในแต่ละอาร์เรย์ที่สอดคล้องกับแต่ละอ็อบเจ็กต์

ดัชนี ชื่อ คำอธิบาย
0 สถานที่ อาร์เรย์หลายมิติของ [N] [4] ค่าทศนิยมระหว่าง 0 ถึง 1 อาร์เรย์ด้านในที่แสดงกรอบขอบเขตในรูปแบบ [บน, ซ้าย, ล่าง, ขวา]
1 ชั้นเรียน อาร์เรย์ของจำนวนเต็ม N (เอาต์พุตเป็นค่าทศนิยม) แต่ละตัวบ่งชี้ดัชนีของคลาสเลเบลจากไฟล์เลเบล
2 คะแนน อาร์เรย์ของค่าจุดลอยตัว N ระหว่าง 0 ถึง 1 แสดงถึงความน่าจะเป็นที่ตรวจพบคลาส
3 จำนวนการตรวจจับ ค่าจำนวนเต็มของ N

ตัวอย่างเช่นสมมติว่ามีการฝึกนางแบบให้ตรวจจับแอปเปิ้ลกล้วยและสตรอเบอร์รี่ เมื่อจัดเตรียมรูปภาพภาพจะแสดงผลการตรวจจับตามจำนวนที่กำหนดไว้ - ในตัวอย่างนี้ 5

คลาส คะแนน สถานที่
แอปเปิ้ล 0.92 [18, 21, 57, 63]
กล้วย 0.88 [100, 30, 180, 150]
สตรอเบอร์รี่ 0.87 [7, 82, 89, 163]
กล้วย 0.23 [42, 66, 57, 83]
แอปเปิ้ล 0.11 [6, 42, 31, 58]

คะแนนความมั่นใจ

ในการตีความผลลัพธ์เหล่านี้เราสามารถดูคะแนนและตำแหน่งของวัตถุที่ตรวจพบแต่ละชิ้น คะแนนคือตัวเลขระหว่าง 0 ถึง 1 ที่บ่งบอกถึงความมั่นใจว่าตรวจพบวัตถุจริง ยิ่งตัวเลขใกล้ 1 มากเท่าไหร่โมเดลก็ยิ่งมั่นใจมากขึ้นเท่านั้น

ขึ้นอยู่กับแอปพลิเคชันของคุณคุณสามารถกำหนดเกณฑ์การตัดออกด้านล่างซึ่งคุณจะทิ้งผลการตรวจจับ สำหรับตัวอย่างปัจจุบันการตัดที่เหมาะสมคือคะแนน 0.5 (หมายถึงความน่าจะเป็น 50% ที่การตรวจจับนั้นถูกต้อง) ในกรณีนั้นวัตถุสองชิ้นสุดท้ายในอาร์เรย์จะถูกละเว้นเนื่องจากคะแนนความเชื่อมั่นเหล่านั้นต่ำกว่า 0.5:

คลาส คะแนน สถานที่
แอปเปิ้ล 0.92 [18, 21, 57, 63]
กล้วย 0.88 [100, 30, 180, 150]
สตรอเบอร์รี่ 0.87 [7, 82, 89, 163]
กล้วย 0.23 [42, 66, 57, 83]
แอปเปิ้ล 0.11 [6, 42, 31, 58]

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

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

ภาพหน้าจอของตัวอย่าง Android แสดงผลบวกที่ผิดพลาด

สถานที่

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

[ ด้านบน ซ้าย, ด้านล่าง, ขวา ]

ค่าสูงสุดแสดงระยะห่างของขอบด้านบนของรูปสี่เหลี่ยมผืนผ้าจากด้านบนของรูปภาพเป็นพิกเซล ค่าด้านซ้ายหมายถึงระยะห่างของขอบด้านซ้ายจากด้านซ้ายของภาพอินพุต ค่าอื่น ๆ แสดงขอบด้านล่างและด้านขวาในลักษณะที่คล้ายกัน

เกณฑ์มาตรฐานประสิทธิภาพ

หมายเลขมาตรฐานประสิทธิภาพสำหรับ รุ่นเริ่มต้น ของเราสร้างขึ้นด้วยเครื่องมือที่ อธิบายไว้ที่นี่

ชื่อรุ่น ขนาดโมเดล อุปกรณ์ GPU ซีพียู
COCO SSD MobileNet v1.0 27 ล้านบาท พิกเซล 3 (Android 10) 22 มิลลิวินาที 46 มิลลิวินาที *
พิกเซล 4 (Android 10) 20 มิลลิวินาที 29 มิลลิวินาที *
iPhone XS (iOS 12.4.1) 7.6 ม 11 มิลลิวินาที **

* 4 เธรดที่ใช้

** 2 เธรดที่ใช้บน iPhone เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด

การปรับแต่งโมเดล

แบบจำลองก่อนการฝึกอบรม

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

ซิปดาวน์โหลดส่วนใหญ่มีไฟล์ model.tflite หากไม่มีก็สามารถสร้าง Flatbuffer TensorFlow Lite ได้โดยใช้ คำแนะนำเหล่านี้ โมเดล SSD จาก TF2 Object Detection Zoo ยังสามารถแปลงเป็น TensorFlow Lite ได้โดยใช้คำแนะนำ ที่นี่ สิ่งสำคัญคือต้องทราบว่าโมเดลการตรวจจับไม่สามารถแปลงได้โดยตรงโดยใช้ TensorFlow Lite Converter เนื่องจากต้องใช้ขั้นตอนกลางในการสร้างโมเดลต้นทางที่เหมาะกับอุปกรณ์เคลื่อนที่ สคริปต์ที่เชื่อมโยงด้านบนดำเนินการขั้นตอนนี้

ทั้งสคริปต์การส่งออก TF1 และ TF2 มีพารามิเตอร์ที่สามารถเปิดใช้งานอ็อบเจ็กต์เอาต์พุตจำนวนมากขึ้นหรือช้าลงและมีการประมวลผลภายหลังที่แม่นยำมากขึ้น โปรดใช้ --help กับสคริปต์เพื่อดูรายการอาร์กิวเมนต์ที่สนับสนุนโดยละเอียด

ปัจจุบันการอนุมานบนอุปกรณ์ได้รับการปรับให้เหมาะสมกับรุ่น SSD เท่านั้น กำลังตรวจสอบการสนับสนุนที่ดีกว่าสำหรับสถาปัตยกรรมอื่น ๆ เช่น CenterNet และ EfficientDet

วิธีการเลือกรุ่นที่จะปรับแต่ง?

แต่ละรุ่นมาพร้อมกับความแม่นยำของตัวเอง (วัดตามค่าแผนที่) และคุณลักษณะเวลาในการตอบสนอง คุณควรเลือกรุ่นที่เหมาะกับการใช้งานและฮาร์ดแวร์ที่คุณต้องการมากที่สุด ตัวอย่างเช่นรุ่น Edge TPU เหมาะอย่างยิ่งสำหรับการอนุมาน Edge TPU ของ Google ใน Pixel 4

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

แบบจำลองการปรับแต่งข้อมูลที่กำหนดเอง

โมเดลที่ผ่านการฝึกอบรมที่เรามีให้นั้นได้รับการฝึกฝนมาเพื่อตรวจจับวัตถุ 90 คลาส สำหรับรายชื่อคลาสทั้งหมดโปรดดูไฟล์เลเบลใน ข้อมูลเมตาของโมเดล

คุณสามารถใช้เทคนิคที่เรียกว่าการถ่ายโอนการเรียนรู้เพื่อฝึกโมเดลซ้ำเพื่อจดจำชั้นเรียนที่ไม่ได้อยู่ในชุดเดิม ตัวอย่างเช่นคุณสามารถฝึกโมเดลอีกครั้งเพื่อตรวจจับผักหลายประเภทแม้ว่าจะมีผักเพียงชนิดเดียวในข้อมูลการฝึกอบรมเดิมก็ตาม ในการดำเนินการนี้คุณจะต้องมีภาพการฝึกอบรมสำหรับป้ายกำกับใหม่แต่ละรายการที่คุณต้องการฝึก วิธีที่แนะนำคือการใช้ ไลบรารี TensorFlow Lite Model Maker ซึ่งจะทำให้ขั้นตอนการฝึกโมเดล TensorFlow Lite ง่ายขึ้นโดยใช้ชุดข้อมูลที่กำหนดเองโดยมีโค้ดไม่กี่บรรทัด ใช้การถ่ายโอนการเรียนรู้เพื่อลดจำนวนข้อมูลและเวลาในการฝึกอบรมที่จำเป็น คุณยังสามารถเรียนรู้จาก Few-shot Detection Colab เป็นตัวอย่างของการปรับแต่งโมเดลที่ผ่านการฝึกอบรมมาแล้วพร้อมตัวอย่างเล็กน้อย

สำหรับการปรับแต่งด้วยชุดข้อมูลที่ใหญ่ขึ้นโปรดดูคำแนะนำเหล่านี้สำหรับการฝึกโมเดลของคุณเองด้วย TensorFlow Object Detection API: TF1 , TF2 เมื่อผ่านการฝึกอบรมแล้วสามารถแปลงเป็นรูปแบบที่เป็นมิตรกับ TFLite ได้ด้วยคำแนะนำที่นี่: TF1 , TF2