מדריך משימות לזיהוי אובייקטים

המשימה 'מזהה אובייקטים של MediaPipe' מאפשרת לזהות את הנוכחות ואת המיקום של מספר סיווגים של אובייקטים בתמונות או בסרטונים. לדוגמה, גלאי אובייקטים יכול לאתר כלבים בתמונה. המשימה הזו פועלת על נתוני תמונה באמצעות מודל למידת מכונה (ML), מקבלת נתונים סטטיים או רצף וידאו רציף כקלט ומפיקה רשימה של תוצאות זיהוי. כל תוצאת זיהוי מייצגת אובייקט שמופיע בתוך התמונה או הסרטון.

כדאי לנסות!

מתחילים

כדי להתחיל להשתמש במשימה הזו, כדאי לפעול לפי אחד ממדריכי ההטמעה הבאים בפלטפורמה שבה אתם עובדים:

במדריכים האלה תוכלו למצוא הנחיות איך לבצע את ההטמעה הבסיסית של המשימה הזו, כולל מודל מומלץ ודוגמה לקוד עם אפשרויות הגדרה מומלצות.

פרטי המשימה

בקטע הזה מתוארות היכולות, הקלט והפלט של המשימה.

תכונות

  • עיבוד תמונות קלט – העיבוד כולל סיבוב תמונות, שינוי גודל, נירמול והמרת מרחב צבעים.
  • מיקום מפת תווית – הגדרת השפה שתשמש לשמות תצוגה
  • סף הציון – סינון התוצאות לפי ציוני התחזית.
  • זיהוי Top-k – סינון התוצאות של זיהוי המספרים.
  • רשימת היתרים של תוויות ורשימת ישויות שנחסמו – ציון הקטגוריות שזוהו.
קלט למשימות פלט המשימות
Object Detector API מקבל קלט מאחד מסוגי הנתונים הבאים:
  • תמונות סטילס
  • פריימים של וידאו מפוענחים
  • פיד של וידאו בשידור חי
ה-Object Detector API מפיק את התוצאות הבאות לאובייקטים שזוהו:
  • הקטגוריה של האובייקט
  • ציון הסתברות
  • קואורדינטות של תיבה תוחמת

אפשרויות של הגדרות אישיות

במשימה הזאת קיימות אפשרויות ההגדרה הבאות:

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
running_mode מגדיר את מצב הריצה של המשימה. יש שלושה מצבים:

IMAGE: המצב שבו ניתן להזין תמונה יחידה.

וידאו: המצב של פריימים מפוענחים של סרטון.

LIVE_STREAM: המצב עבור סטרימינג בשידור חי של נתוני קלט, למשל ממצלמה. במצב הזה, יש להפעיל את resultListener כדי להגדיר מאזין לקבלת תוצאות באופן אסינכרוני.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names ההגדרה הזו מגדירה את השפה של התוויות שישמשו לשמות תצוגה שנמסרים במטא-נתונים של מודל המשימה, אם יש כאלה. ברירת המחדל היא en עבור אנגלית. אפשר להוסיף תוויות שהותאמו לשוק המקומי למטא-נתונים של מודל מותאם אישית באמצעות TensorFlow Lite Metadata Writer API קוד הלוקאל en
max_results מגדירה את המספר המקסימלי האופציונלי של תוצאות זיהוי בניקוד הגבוה ביותר להחזרה. כל מספר חיובי -1 (כל התוצאות מוחזרות)
score_threshold השדה הזה מגדיר את סף הציון של החיזוי ששונה מהסף שצוין במטא-נתונים של המודל (אם יש כזה). תוצאות מתחת לערך הזה יידחו. כל מספר ממשי (float) לא הוגדרה
category_allowlist מגדיר את הרשימה האופציונלית של שמות הקטגוריות המותרות. אם השדה לא ריק, תוצאות זיהוי ששם הקטגוריה שלהן לא כלול בקבוצה הזו יסוננו. המערכת מתעלמת משמות כפולים או לא ידועים של קטגוריות. האפשרות הזו בלעדית ל-category_denylist ומשתמשת בשתי התוצאות כשגיאה. כל מחרוזת לא הוגדרה
category_denylist מגדיר את הרשימה האופציונלית של שמות קטגוריות אסורים. אם השדה לא ריק, תוצאות זיהוי ששם הקטגוריה שלהן נכלל בקבוצה הזו יסוננו. המערכת מתעלמת משמות כפולים או לא ידועים של קטגוריות. האפשרות הזו בלעדית ל-category_allowlist, והשימוש בשתי האפשרויות האלה גורם לשגיאה. כל מחרוזת לא הוגדרה

דגמים

כדי להשתמש ב-Object Detector API, צריך להוריד מודל לזיהוי אובייקטים ולאחסן אותו בספריית הפרויקט. אם עדיין אין לכם מודל, התחילו עם מודל ברירת המחדל המומלץ. המודלים האחרים שמוצגים בקטע הזה משווים בין זמן אחזור לדיוק.

במודל ייעולDet-Lite0 נעשה שימוש בתשתית של EffectNet-Lite0 עם קלט של 320x320 ורשת תכונות של BiFPN. המודל אומן באמצעות מערך הנתונים של COCO, מערך נתונים גדול לזיהוי אובייקטים שמכיל 1.5 מיליון מכונות של אובייקטים ו-80 תוויות של אובייקטים. לרשימה המלאה של התוויות הנתמכות. EfficientDet-Lite0 זמין בפורמט int8, float16 או float32. מומלץ להשתמש במודל הזה כי הוא שומר על איזון בין זמן אחזור לבין דיוק. הוא גם מדויק וגם קליל מספיק בשביל תרחישים רבים לדוגמה.

שם הדגם צורת הקלט סוג הכמות גרסאות
EfficientDet-Lite0 (int8) 320 x 320 int8 האחרון
EfficientDet-Lite0 (float 16) 320 x 320 מספר ממשי (float) 16 האחרון
EfficientDet-Lite0 (float 32) 320 x 320 ללא (float32) האחרון

מודל EfficientDet-Lite2

במודל EfficientDet-Lite2 נעשה שימוש בתשתית של EffectNet-Lite2 עם קלט של 448x448 ורשת תכונות של BiFPN. המודל אומן באמצעות מערך הנתונים של COCO, מערך נתונים גדול לזיהוי אובייקטים שמכיל 1.5 מיליון מכונות של אובייקטים ו-80 תוויות של אובייקטים. אפשר לעיין ברשימה המלאה של התוויות הנתמכות. EfficientDet-Lite2 זמין כמודל int8, float16 או float32. בדרך כלל המודל הזה מדויק יותר מ-EfficientDet-Lite0, אבל הוא גם איטי יותר וצורך יותר זיכרון. המודל הזה מתאים לתרחישי שימוש שבהם הדיוק חשוב יותר מאשר מהירות וגודל.

שם הדגם צורת הקלט סוג הכמות גרסאות
EfficientDet-Lite2 (int8) x 448 448 int8 האחרון
EfficientDet-Lite2 (float 16) x 448 448 מספר ממשי (float) 16 האחרון
EfficientDet-Lite2 (float 32) x 448 448 ללא (float32) האחרון

דגם SSD MobileNetV2

דגם SSD MobileNetV2 משתמש בשדרה של MobileNetV2 עם כניסת קלט של 256x256 ורשת תכונות של SSD. המודל אומן באמצעות מערך הנתונים של COCO, מערך נתונים גדול לזיהוי אובייקטים שמכיל 1.5 מיליון מכונות של אובייקטים ו-80 תוויות של אובייקטים. אפשר לעיין ברשימה המלאה של התוויות הנתמכות. SSD MobileNetV2 זמין כדגם int8 ובמודל 32 צף. המודל הזה מהיר וקל יותר מ-EfficientDet-Lite0, אבל באופן כללי הוא גם פחות מדויק. המודל הזה מתאים לתרחישים לדוגמה שבהם נדרש מודל מהיר וקל ששומר על דיוק מסוים.

שם הדגם צורת הקלט סוג הכמות גרסאות
SSDMobileNet-V2 (int8) 256 x 256 int8 האחרון
SSDMobileNet-V2 (float 32) 256 x 256 ללא (float32) האחרון

דרישות ומטא-נתונים של המודל

חלק זה מתאר את הדרישות למודלים מותאמים אישית אם מחליטים ליצור מודל לשימוש במשימה הזו. מודלים בהתאמה אישית חייבים להיות בפורמט TensorFlow Lite, והם חייבים לכלול מטא-נתונים שמתארים את הפרמטרים להפעלה של המודל.

דרישות לגבי העיצוב

קלט צורה תיאור
תמונה של קלט טנזור צף 32 של צורה[1, גובה, רוחב, 3] תמונת הקלט המנורמלת.
פלט צורה תיאור
detection_boxes טנזור צף (Float32) של הצורה [1, num_boxes, 4] מיקום התיבה של כל אובייקט שזוהה.
detection_classes tensor Float32 בצורה [1, num_boxes] אינדקסים של שמות המחלקות לכל אובייקט שזוהה.
detection_scores tensor float32 בצורה [1, num_boxes] ציוני חיזוי עבור כל אובייקט שזוהה.
num_boxes tensor Float32 בגודל 1 מספר התיבות שזוהו.

הדרישות לגבי מטא-נתונים

פרמטר תיאור תיאור
input_norm_mean הערך הממוצע המשמש בנורמליזציה של tensor הקלט. תמונת הקלט המנורמלת.
input_norm_std נורמת השדות שמשמשת בנורמליזציה של טנזור הקלט. מיקום התיבה של כל אובייקט שזוהה.
label_file_paths הנתיבים לקובצי התוויות tensor של הקטגוריה. אם אין למודל קובצי תוויות, מעבירים רשימה ריקה. אינדקסים של שמות המחלקות לכל אובייקט שזוהה.
score_calibration_md מידע על פעולת כיול הציון במחרוזת הסיווג. הפרמטר הזה לא נדרש אם במודל לא נעשה שימוש בכיול
ציון.
ציוני חיזוי עבור כל אובייקט שזוהה.
num_boxes tensor Float32 בגודל 1 מספר התיבות שזוהו.

נקודות השוואה למשימות

הנה נקודות ההשוואה למשימות של המודלים שעברו אימון מראש. התוצאה של זמן האחזור היא זמן האחזור הממוצע ב-Pixel 6 כשמשתמשים במעבד (CPU) או ב-GPU.

שם דגם זמן אחזור של המעבד (CPU) זמן אחזור של GPU
מודל float32 ב-EfficientDet-Lite0 61.30 אלפיות השנייה 27.83 אלפיות השנייה
מודל float16 ב-EfficientDet-Lite0 53.97 אלפיות השנייה 27.97 אלפיות השנייה
מודל int8 של EfficientDet-Lite0 29.31 אלפיות השנייה -
מודל float32 מסוג EfficientDet-Lite2 197.98 אלפיות השנייה 41.15 אלפיות השנייה
מודל float16 EfficientDet-Lite2 198.77 אלפיות השנייה 47.31 אלפיות השנייה
מודל EfficientDet-Lite2 int8 70.91 אלפיות השנייה -
דגם SSD MobileNetV2 float32 36.30 אלפיות השנייה 24.01 אלפיות השנייה
דגם SSD MobileNetV2 float16 37.35 אלפיות השנייה 28.16 אלפיות השנייה