จากภาพหรือสตรีมวิดีโอ โมเดลการตรวจจับวัตถุสามารถระบุชุดของวัตถุที่รู้จักที่อาจมีอยู่และให้ข้อมูลเกี่ยวกับตำแหน่งภายในภาพ
ตัวอย่างเช่น ภาพหน้าจอของ แอปพลิเคชันตัวอย่าง นี้แสดงให้เห็นว่าวัตถุสองชิ้นได้รับการจดจำอย่างไรและตำแหน่งของวัตถุมีคำอธิบายประกอบ:
เริ่ม
หากต้องการเรียนรู้วิธีใช้การตรวจหาวัตถุในแอปบนอุปกรณ์เคลื่อนที่ ให้สำรวจ ตัวอย่างแอปพลิเคชันและคำแนะนำ
หากคุณกำลังใช้แพลตฟอร์มอื่นที่ไม่ใช่ Android หรือ iOS หรือหากคุณคุ้นเคยกับ TensorFlow Lite API อยู่แล้ว คุณสามารถดาวน์โหลดโมเดลการตรวจจับวัตถุเริ่มต้นของเราและป้ายกำกับที่มาพร้อมกันได้
ดาวน์โหลดโมเดลสตาร์ทด้วย Metadata
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลเมตาและฟิลด์ที่เกี่ยวข้อง (เช่น: labels.txt
) ดู อ่านข้อมูลเมตาจากรุ่น
หากคุณต้องการฝึกโมเดลการตรวจจับแบบกำหนดเองสำหรับงานของคุณเอง โปรดดูที่ การปรับแต่งโมเดล
สำหรับกรณีการใช้งานต่อไปนี้ คุณควรใช้แบบจำลองประเภทอื่น:
- การคาดคะเนฉลากเดียวที่รูปภาพน่าจะเป็นตัวแทนมากที่สุด (ดู การจัดหมวดหมู่รูปภาพ )
- การคาดคะเนองค์ประกอบของภาพ เช่น ตัวแบบกับพื้นหลัง (ดู การแบ่งส่วน )
ตัวอย่างการใช้งานและคำแนะนำ
หากคุณเพิ่งเริ่มใช้ TensorFlow Lite และกำลังใช้งาน Android หรือ iOS เราขอแนะนำให้สำรวจแอปพลิเคชันตัวอย่างต่อไปนี้ที่สามารถช่วยคุณเริ่มต้นได้
Android
คุณสามารถใช้ API แบบสำเร็จรูปจาก TensorFlow Lite Task Library เพื่อรวมโมเดลการตรวจจับวัตถุในโค้ดเพียงไม่กี่บรรทัด คุณยังสามารถสร้างไปป์ไลน์การอนุมานแบบกำหนดเองได้โดยใช้ TensorFlow Lite Interpreter Java API
ตัวอย่าง Android ด้านล่างสาธิตการใช้งานสำหรับทั้งสองวิธีเป็น lib_task_api และ lib_interpreter ตามลำดับ
iOS
คุณสามารถรวมโมเดลโดยใช้ TensorFlow Lite Interpreter Swift API ดูตัวอย่าง iOS ด้านล่าง
คำอธิบายแบบจำลอง
ส่วนนี้อธิบายลายเซ็นสำหรับรุ่น Single-Shot Detector ที่แปลงเป็น TensorFlow Lite จาก TensorFlow Object Detection API
โมเดลการตรวจจับวัตถุได้รับการฝึกฝนเพื่อตรวจจับการมีอยู่และตำแหน่งของวัตถุหลายคลาส ตัวอย่างเช่น แบบจำลองอาจได้รับการฝึกอบรมด้วยรูปภาพที่มีชิ้นผลไม้ต่างๆ พร้อมด้วย ฉลาก ที่ระบุประเภทของผลไม้ที่เป็นตัวแทน (เช่น แอปเปิ้ล กล้วย หรือสตรอเบอรี่) และข้อมูลที่ระบุว่าแต่ละวัตถุปรากฏอยู่ที่ใด รูปภาพ.
เมื่อส่งรูปภาพไปยังโมเดลในเวลาต่อมา รูปภาพจะแสดงรายการของวัตถุที่ตรวจพบ ตำแหน่งของกล่องล้อมรอบที่มีแต่ละวัตถุ และคะแนนที่บ่งชี้ว่าการตรวจจับนั้นถูกต้อง
ใส่ลายเซ็น
ตัวแบบใช้รูปภาพเป็นอินพุต
ให้สมมติว่าภาพที่คาดหวังคือ 300x300 พิกเซล โดยมีสามช่องสัญญาณ (แดง น้ำเงิน และเขียว) ต่อพิกเซล สิ่งนี้ควรป้อนให้กับโมเดลเป็นบัฟเฟอร์แบบแบนซึ่งมีค่า 270,000 ไบต์ (300x300x3) หากโมเดลเป็นแบบ quantized แต่ละค่าควรเป็นไบต์เดียวแทนค่าระหว่าง 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%) จะไม่รวมผลบวกลวง
ที่ตั้ง
สำหรับแต่ละวัตถุที่ตรวจพบ โมเดลจะส่งคืนอาร์เรย์ของตัวเลขสี่ตัวที่แสดงรูปสี่เหลี่ยมผืนผ้าล้อมรอบที่ล้อมรอบตำแหน่ง สำหรับรุ่นสตาร์ทที่ให้มา จะเรียงลำดับตัวเลขดังนี้
[ | สูงสุด, | ซ้าย, | ล่าง, | ขวา | ] |
ค่าบนสุดหมายถึงระยะห่างของขอบด้านบนของรูปสี่เหลี่ยมผืนผ้าจากด้านบนของรูปภาพ หน่วยเป็นพิกเซล ค่าด้านซ้ายแสดงถึงระยะห่างของขอบด้านซ้ายจากด้านซ้ายของภาพที่ป้อน ค่าอื่นๆ แสดงถึงขอบด้านล่างและด้านขวาในลักษณะเดียวกัน
มาตรฐานประสิทธิภาพ
ตัวเลขเปรียบเทียบประสิทธิภาพสำหรับ รุ่นสตาร์ท ของเราสร้างขึ้นด้วยเครื่องมือที่ อธิบายไว้ที่นี่
ชื่อรุ่น | ขนาดรุ่น | อุปกรณ์ | GPU | ซีพียู |
---|---|---|---|---|
COCO SSD MobileNet v1 | 27 Mb | พิกเซล 3 (แอนดรอยด์ 10) | 22ms | 46ms* |
พิกเซล 4 (แอนดรอยด์ 10) | 20ms | 29ms* | ||
iPhone XS (iOS 12.4.1) | 7.6ms | 11ms** |
* ใช้ 4 เธรด
** ใช้ 2 เธรดบน iPhone เพื่อผลลัพธ์ประสิทธิภาพที่ดีที่สุด
การปรับแต่งโมเดล
รุ่นก่อนการฝึกอบรม
สามารถพบโมเดลการตรวจจับที่ปรับให้เหมาะกับอุปกรณ์พกพาพร้อมเวลาแฝงและคุณสมบัติความแม่นยำที่หลากหลายใน สวนสัตว์การตรวจจับ แต่ละรายการเป็นไปตามลายเซ็นอินพุตและเอาต์พุตที่อธิบายไว้ในส่วนต่อไปนี้
ไฟล์ zip ดาวน์โหลดส่วนใหญ่มีไฟล์ model.tflite
หากไม่มี คุณสามารถสร้างบัฟเฟอร์แบบแบน TensorFlow Lite ได้โดยใช้ คำแนะนำเหล่านี้ โมเดล SSD จาก TF2 Object Detection Zoo สามารถแปลงเป็น TensorFlow Lite ได้โดยใช้คำแนะนำ ที่นี่ สิ่งสำคัญที่ควรทราบคือไม่สามารถแปลงโมเดลการตรวจจับได้โดยตรงโดยใช้ TensorFlow Lite Converter เนื่องจากต้องใช้ขั้นตอนกลางในการสร้างโมเดลต้นทางที่เหมาะกับอุปกรณ์พกพา สคริปต์ที่เชื่อมโยงด้านบนดำเนินการขั้นตอนนี้
ทั้งสคริปต์การส่งออก TF1 และ TF2 มีพารามิเตอร์ที่สามารถเปิดใช้งานวัตถุเอาต์พุตจำนวนมากขึ้นหรือการประมวลผลภายหลังที่ช้ากว่าและแม่นยำกว่า โปรดใช้ --help
กับสคริปต์เพื่อดูรายการอาร์กิวเมนต์ที่รองรับทั้งหมด
ปัจจุบัน การอนุมานในอุปกรณ์ได้รับการปรับให้เหมาะสมกับรุ่น SSD เท่านั้น กำลังตรวจสอบการสนับสนุนที่ดีขึ้นสำหรับสถาปัตยกรรมอื่นๆ เช่น CenterNet และ EfficientDet
วิธีการเลือกรูปแบบการปรับแต่ง?
แต่ละรุ่นมาพร้อมกับความแม่นยำของตัวเอง (วัดด้วยค่า mAP) และลักษณะเฉพาะของเวลาแฝง คุณควรเลือกรุ่นที่เหมาะกับกรณีใช้งานและฮาร์ดแวร์ที่คุณต้องการมากที่สุด ตัวอย่างเช่น รุ่น Edge TPU เหมาะสำหรับการอนุมานบน Edge TPU ของ Google ใน Pixel 4
คุณสามารถใช้ เครื่องมือวัดประสิทธิภาพ ของเราเพื่อประเมินแบบจำลองและเลือกตัวเลือกที่มีประสิทธิภาพสูงสุดที่มี
ปรับแต่งโมเดลด้วยข้อมูลที่กำหนดเอง
โมเดลที่เราเตรียมไว้ล่วงหน้านั้นได้รับการฝึกฝนเพื่อตรวจจับวัตถุ 90 คลาส สำหรับรายการคลาสทั้งหมด โปรดดูไฟล์เลเบลใน ข้อมูลเมตาของโมเดล
คุณสามารถใช้เทคนิคที่เรียกว่า ถ่ายโอนการเรียนรู้ เพื่อฝึกแบบจำลองใหม่เพื่อจำแนกคลาสที่ไม่ได้อยู่ในชุดดั้งเดิม ตัวอย่างเช่น คุณสามารถฝึกโมเดลใหม่เพื่อตรวจหาผักหลายชนิด แม้ว่าจะมีผักเพียงชนิดเดียวในข้อมูลการฝึกเดิม ในการทำเช่นนี้ คุณจะต้องมีชุดภาพการฝึกสำหรับป้ายกำกับใหม่แต่ละรายการที่คุณต้องการฝึก วิธีที่แนะนำคือการใช้ ไลบรารี TensorFlow Lite Model Maker ซึ่งจะทำให้ขั้นตอนการฝึกโมเดล TensorFlow Lite ง่ายขึ้นโดยใช้ชุดข้อมูลที่กำหนดเอง โดยมีโค้ดไม่กี่บรรทัด ใช้การถ่ายโอนการเรียนรู้เพื่อลดปริมาณข้อมูลการฝึกอบรมที่จำเป็นและเวลา คุณยังสามารถเรียนรู้จาก Colab การตรวจจับภาพไม่กี่ช็อต เป็นตัวอย่างของการปรับแต่งโมเดลที่ได้รับการฝึกอบรมล่วงหน้าพร้อมตัวอย่างบางส่วน
สำหรับการปรับแต่งอย่างละเอียดด้วยชุดข้อมูลที่ใหญ่ขึ้น ดูคำแนะนำเหล่านี้สำหรับการฝึกโมเดลของคุณเองด้วย TensorFlow Object Detection API: TF1 , TF2 เมื่อได้รับการฝึกอบรมแล้ว พวกเขาสามารถแปลงเป็นรูปแบบที่เป็นมิตรกับ TFLite ได้โดยใช้คำแนะนำที่นี่: TF1 , TF2