המשימה 'סיווג תמונות ב-MediaPipe' מאפשרת לבצע סיווג של תמונות. אפשר להשתמש במשימה הזו כדי לזהות את מה שתמונה מייצגת מתוך קבוצה של קטגוריות שהוגדרו בזמן האימון. המשימה הזו פועלת על נתוני תמונות באמצעות מודל למידת מכונה (ML) כנתונים סטטיים או כזרם רציף, ומפיקה רשימה של קטגוריות פוטנציאליות שמדורגות לפי ציון ההסתברות יורד.
תחילת העבודה
כדי להתחיל להשתמש במשימה הזו, פועלים לפי אחד מהמדריכים הבאים להטמעה בפלטפורמת היעד. המדריכים הספציפיים לפלטפורמות האלה כוללים הדרכה לביצוע בסיסי של המשימה הזו, באמצעות מודל מומלץ, וכן דוגמאות קוד עם אפשרויות ההגדרה המומלצות:
- Android – דוגמה לקוד – מדריך
- Python – קוד לדוגמה – מדריך
- אינטרנט – דוגמה לקוד – מדריך
- iOS – דוגמה לקוד – מדריך
פרטי המשימה
בקטע הזה מוסבר על היכולות, הקלט, הפלט והאפשרויות להגדרה של המשימה הזו.
תכונות
- עיבוד תמונות קלט – העיבוד כולל סיבוב תמונות, שינוי גודל, נורמליזציה והמרה של מרחב צבעים.
- אזור עניין – ביצוע סיווג באזור מסוים בתמונה במקום בתמונה כולה.
- לוקאל של מפה עם תוויות – הגדרת השפה שבה יוצגו שמות התצוגה.
- סף ניקוד – סינון התוצאות על סמך ציונים של תחזיות.
- סיווג Top-k – הגבלת מספר תוצאות הסיווג.
- תיוג של רשימת ההיתרים ורשימת הדחייה – מציינים את הקטגוריות שסווגו.
קלט של משימות | פלט של משימות |
---|---|
הקלט יכול להיות אחד מסוגי הנתונים הבאים:
|
מערכת סיווג התמונות מניבה רשימה של קטגוריות שמכילות:
|
אפשרויות הגדרה
למשימה הזו יש את אפשרויות ההגדרה הבאות:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
running_mode |
הגדרת מצב ההפעלה של המשימה. יש שלושה מצבים: IMAGE: המצב להזנת תמונה אחת. VIDEO: המצב של פריימים מפוענחים של סרטון. LIVE_STREAM: המצב של סטרימינג בשידור חי של נתוני קלט, למשל ממצלמה. במצב הזה, צריך להפעיל את resultListener כדי להגדיר מאזין שיקבל את התוצאות באופן אסינכרוני. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names_locale |
הגדרת השפה של התוויות לשימוש בשמות התצוגה שסופקו במטא-נתונים של מודל המשימה, אם הם זמינים. ברירת המחדל היא en לאנגלית. אפשר להוסיף תוויות מותאמות לשוק המקומי למטא-נתונים של מודל מותאם אישית באמצעות TensorFlow Lite Metadata Writer API |
קוד לוקאל | en |
max_results |
מגדיר את המספר המקסימלי האופציונלי של תוצאות הסיווג עם הדירוג הגבוה ביותר שיוחזר. אם הערך < 0, כל התוצאות הזמינות יחזרו. | מספרים חיוביים | -1 |
score_threshold |
הגדרת הסף של ציון התחזית, שמבטל את הסף שצוין במטא-נתונים של המודל (אם קיים). תוצאות מתחת לערך הזה נדחות. | כל ערך צף | לא מוגדר |
category_allowlist |
הגדרת רשימה אופציונלית של שמות קטגוריות מותרים. אם הערך לא ריק, תוצאות הסיווג ששם הקטגוריה שלהן לא נמצא בקבוצה הזו יוחרגו מהסינון. המערכת מתעלמת משמות קטגוריות כפולים או לא מוכרים.
האפשרות הזו לא תואמת לאפשרות category_denylist , ושימוש בשתיהן גורם לשגיאה. |
מחרוזות כלשהן | לא מוגדר |
category_denylist |
הגדרת רשימה אופציונלית של שמות קטגוריות אסורים. אם הערך לא ריק, תוצאות הסיווג ששם הקטגוריה שלהן נמצא בקבוצה הזו יוסר. המערכת מתעלמת משמות קטגוריות כפולים או לא מוכרים. האפשרות הזו לא תואמת לאפשרות category_allowlist , ושימוש בשתיהן גורם לשגיאה. |
מחרוזות כלשהן | לא מוגדר |
result_callback |
מגדיר את מאזין התוצאות לקבל את תוצאות הסיווג באופן אסינכרוני כש-Image Classifier נמצא במצב של שידור חי. אפשר להשתמש בה רק כשמצב ההפעלה מוגדר כ-LIVE_STREAM |
לא רלוונטי | לא מוגדר |
דגמים
כדי להשתמש ב-Image Classifier, צריך להוריד מודל לסיווג תמונות ולאחסן אותו בספריית הפרויקט. כשמתחילים לפתח את המשימה הזו, מומלץ להתחיל עם המודל המומלץ שמוגדר כברירת מחדל בפלטפורמת היעד. במודלים האחרים הזמינים, בדרך כלל יש פשרות בין הביצועים, הדיוק, הרזולוציה ודרישות המשאבים, ובמקרים מסוימים הם כוללים תכונות נוספות.
מודל EfficientNet-Lite0 (מומלץ)
המודל EfficientNet-Lite0 מבוסס על ארכיטקטורת EfficientNet, והוא אומן באמצעות ImageNet כדי לזהות 1,000 סוגים, כמו עצים, בעלי חיים, מזון, כלי רכב, אנשים וכו'. כאן אפשר לראות את הרשימה המלאה של התוויות הנתמכות. EfficientNet-Lite0 זמין בתור מודל int8 ו-float 32. מומלץ להשתמש במודל הזה כי הוא יוצר איזון בין זמן האחזור לבין הדיוק. הוא מדויק וקל מספיק לשימוש במגוון תרחישים.
שם דגם | צורת הקלט | סוג הקידוד | גרסאות |
---|---|---|---|
EfficientNet-Lite0 (int8) | 224 X 224 | int8 | חדש |
EfficientNet-Lite0 (float 32) | 224 X 224 | None (float32) | חדש |
מודל EfficientNet-Lite2
המודל EfficientNet-Lite2 מבוסס על ארכיטקטורת EfficientNet, והוא אומן באמצעות ImageNet כדי לזהות 1,000 סיווגים, כמו עצים, בעלי חיים, אוכל, כלי רכב, אנשים וכו'. כאן אפשר לראות את הרשימה המלאה של התווית הנתמכות. EfficientNet-Lite2 זמין כמודל int8 ו-float 32. המודל הזה בדרך כלל מדויק יותר מ-EfficientNet-Lite0, אבל הוא גם איטי יותר ומשתמש בזיכרון רב יותר. המודל הזה מתאים לתרחישי שימוש שבהם הדיוק הוא בעדיפות גבוהה יותר מהמהירות או מהגודל.
שם דגם | צורת הקלט | סוג הקידוד | גרסאות |
---|---|---|---|
EfficientNet-Lite2 (int8) | 224 X 224 | int8 | חדש |
EfficientNet-Lite2 (float 32) | 224 X 224 | None (float32) | חדש |
נקודות השוואה של משימות
ריכזנו כאן את נקודות השוואה של המשימות לצינור עיבוד הנתונים כולו, על סמך המודלים המוכנים מראש שצוינו למעלה. תוצאת זמן האחזור היא זמן האחזור הממוצע ב-Pixel 6 באמצעות מעבד או יחידת עיבוד גרפי (GPU).
שם דגם | זמן האחזור של המעבד (CPU) | זמן אחזור של GPU |
---|---|---|
EfficientNet-Lite0 (float 32) | 23.52 אלפיות השנייה | 18.90 אלפיות השנייה |
EfficientNet-Lite0 (int8) | 10.08 אלפיות השנייה | - |
EfficientNet-Lite2 (float 32) | 44.17 אלפיות השנייה | 22.20 אלפיות השנייה |
EfficientNet-Lite2 (int8) | 19.43 אלפיות השנייה | - |
מודלים מותאמים אישית
אם אתם רוצים לשפר או לשנות את היכולות של המודלים שסופקו, תוכלו להשתמש במשימה הזו עם מודל למידת מכונה בהתאמה אישית. אפשר להשתמש ב-Model Maker כדי לשנות את המודלים הקיימים או ליצור מודל באמצעות כלים כמו TensorFlow. מודלים מותאמים אישית שנעשה בהם שימוש ב-MediaPipe חייבים להיות בפורמט TensorFlow Lite ולכלול metadata ספציפיים שמתארים את הפרמטרים התפעוליים של המודל. מומלץ להשתמש ב-Model Maker כדי לשנות את המודלים שסופקו למשימה הזו לפני שיוצרים מודל משלכם.
אם אתם רוצים ליצור סיווג תמונות בהתאמה אישית באמצעות מערך הנתונים שלכם, כדאי להתחיל במדריך בנושא התאמה אישית של סיווג תמונות.