เมื่อพิจารณาจากรูปภาพหรือสตรีมวิดีโอ แบบจำลองการตรวจจับวัตถุสามารถระบุได้ว่าวัตถุชุดใดที่รู้จักอาจแสดงอยู่ และให้ข้อมูลเกี่ยวกับตำแหน่งภายในรูปภาพ
ตัวอย่างเช่น ภาพหน้าจอของ แอปพลิเคชันตัวอย่าง นี้แสดงวิธีการรับรู้วัตถุสองชิ้นและตำแหน่งของวัตถุทั้งสอง:
เริ่ม
หากต้องการเรียนรู้วิธีใช้การตรวจจับวัตถุในแอปบนอุปกรณ์เคลื่อนที่ ให้สำรวจ ตัวอย่างแอปพลิเคชันและคำแนะนำ
หากคุณใช้แพลตฟอร์มอื่นที่ไม่ใช่ Android หรือ iOS หรือหากคุณคุ้นเคยกับ TensorFlow Lite APIs อยู่แล้ว คุณสามารถดาวน์โหลดโมเดลการตรวจจับวัตถุเริ่มต้นของเราและป้ายกำกับที่เกี่ยวข้อง
ดาวน์โหลดโมเดลเริ่มต้นพร้อมข้อมูลเมตา
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลเมตาและฟิลด์ที่เกี่ยวข้อง (เช่น: labels.txt
) โปรดดู อ่านข้อมูลเมตาจากโมเดล
หากคุณต้องการฝึกโมเดลการตรวจหาแบบกำหนดเองสำหรับงานของคุณเอง โปรดดูที่ การปรับแต่งโมเดล
สำหรับกรณีการใช้งานต่อไปนี้ คุณควรใช้รุ่นประเภทอื่น:
- การคาดคะเนป้ายเดียวที่รูปภาพน่าจะเป็นตัวแทนมากที่สุด (ดู การจัดประเภทรูปภาพ )
- การคาดคะเนองค์ประกอบของภาพ เช่น วัตถุกับพื้นหลัง (ดู การแบ่งส่วน )
ตัวอย่างการใช้งานและคำแนะนำ
หากคุณยังใหม่กับ TensorFlow Lite และกำลังทำงานกับ Android หรือ iOS เราขอแนะนำให้สำรวจแอปพลิเคชันตัวอย่างต่อไปนี้ที่สามารถช่วยคุณเริ่มต้นได้
แอนดรอยด์
คุณสามารถใช้ประโยชน์จาก API นอกกรอบจาก TensorFlow Lite Task Library เพื่อผสานรวมโมเดลการตรวจจับวัตถุในโค้ดเพียงไม่กี่บรรทัด คุณยังสามารถสร้างไปป์ไลน์การอนุมานแบบกำหนดเองโดยใช้ TensorFlow Lite Interpreter Java API
ตัวอย่าง Android ด้านล่างสาธิตการใช้งานทั้งสองวิธีโดยใช้ ไลบรารีงาน และ API ของล่าม ตามลำดับ
iOS
คุณสามารถรวมโมเดลโดยใช้ TensorFlow Lite Interpreter Swift API ดูตัวอย่าง 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%) จะไม่รวมผลบวกลวงได้อย่างสบายๆ
ที่ตั้ง
สำหรับแต่ละวัตถุที่ตรวจพบ แบบจำลองจะส่งกลับอาร์เรย์ของตัวเลขสี่ตัวซึ่งเป็นตัวแทนของสี่เหลี่ยมที่มีขอบเขตซึ่งล้อมรอบตำแหน่งนั้น สำหรับรุ่นเริ่มต้นที่จัดไว้จะเรียงลำดับตามหมายเลขดังนี้
[ | สูงสุด, | ซ้าย, | ด้านล่าง, | ขวา | ] |
ค่าบนสุดแสดงถึงระยะห่างของขอบบนของสี่เหลี่ยมผืนผ้าจากด้านบนของรูปภาพ หน่วยเป็นพิกเซล ค่าด้านซ้ายแสดงถึงระยะห่างของขอบด้านซ้ายจากด้านซ้ายของรูปภาพอินพุต ค่าอื่นๆ แสดงขอบด้านล่างและขอบขวาในลักษณะเดียวกัน
เกณฑ์มาตรฐานประสิทธิภาพ
หมายเลขเกณฑ์มาตรฐานประสิทธิภาพสำหรับ รุ่นเริ่มต้น ของเราสร้างขึ้นด้วยเครื่องมือ ที่อธิบายไว้ที่นี่
ชื่อรุ่น | ขนาดโมเดล | อุปกรณ์ | จีพียู | ซีพียู |
---|---|---|---|---|
COCO SSD MobileNet v1.1 | 27 ลบ | พิกเซล 3 (แอนดรอยด์ 10) | 22ms | 46ms* |
พิกเซล 4 (แอนดรอยด์ 10) | 20ms | 29ms* | ||
iPhone XS (iOS 12.4.1) | 7.6ms | 11 มิลลิวินาที** |
* ใช้ 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