המשימה 'זיהוי אובייקטים ב-MediaPipe' מאפשרת לזהות את הנוכחות והמיקום של מספר סוגים של אובייקטים בתמונות או בסרטונים. לדוגמה, גלאי אובייקטים יכול לאתר כלבים בתמונה. המשימה הזו פועלת על נתוני תמונות באמצעות מודל למידת מכונה (ML). היא מקבלת נתונים סטטיים או שידור וידאו רציף כקלט, ומפיקה רשימה של תוצאות זיהוי. כל תוצאת זיהוי מייצגת אובייקט שמופיע בתמונה או בסרטון.
תחילת העבודה
כדי להתחיל להשתמש במשימה הזו, פועלים לפי אחד מהמדריכים הבאים להטמעה בפלטפורמה שבה אתם עובדים:
- Android – דוגמה לקוד – מדריך
- Python – קוד לדוגמה – מדריך
- אינטרנט – דוגמה לקוד – מדריך
- iOS – דוגמה לקוד – מדריך
המדריכים האלה, שמותאמים לכל פלטפורמה, כוללים הנחיות להטמעה בסיסית של המשימה הזו, כולל מודל מומלץ ודוגמת קוד עם אפשרויות ההגדרה המומלצות.
פרטי המשימה
בקטע הזה מתוארות היכולות, הקלט והפלט של המשימה הזו.
תכונות
- עיבוד תמונות קלט – העיבוד כולל סיבוב תמונות, שינוי גודל, נורמליזציה והמרה של מרחב צבעים.
- Label map locale (לוקאל של מפה עם תוויות) – הגדרת השפה שבה ייכתבו שמות התצוגה
- סף ניקוד – סינון התוצאות על סמך ציונים של תחזיות.
- זיהוי Top-k – סינון תוצאות זיהוי המספרים.
- תיוג של רשימת ההיתרים ורשימת הדחייה – מציינים את הקטגוריות שזוהו.
קלט של משימות | פלט של משימות |
---|---|
ממשק ה-API לזיהוי אובייקטים מקבל קלט מאחד מסוגי הנתונים הבאים:
|
ה-Object Detector API מניב את התוצאות הבאות לגבי אובייקטים שזוהו:
|
אפשרויות הגדרה
למשימה הזו יש את אפשרויות ההגדרה הבאות:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
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 (מומלץ)
המודל 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 אלפיות השנייה |