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

חתול וכלב שמודגשים בקופסאות גבול עם תוויות נכונות

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

רוצים לנסות?

תחילת העבודה

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

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

פרטי המשימה

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

תכונות

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

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

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

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

IMAGE: המצב להזנת תמונה אחת.

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

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

דגמים

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

המודל EfficientDet-Lite0 משתמש בעמודת השדרה EfficientNet-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 None‏ (float32) חדש

מודל EfficientDet-Lite2

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

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

מודל SSD MobileNetV2

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

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

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

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

דרישות עיצוב

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

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

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

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

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

שם דגם זמן האחזור של המעבד (CPU) זמן אחזור של GPU
מודל float32 של EfficientDet-Lite0 61.30 אלפיות השנייה 27.83 אלפיות השנייה
מודל float16 של EfficientDet-Lite0 53.97 אלפיות השנייה 27.97ms
מודל EfficientDet-Lite0 int8 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 אלפיות השנייה