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