זיהוי אובייקטים

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

לדוגמה, צילום מסך זה של היישום לדוגמה מראה כיצד זוהו שני אובייקטים ומיקומם הוער:

צילום מסך של דוגמה לאנדרואיד

להתחיל

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

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

הורד מודל מתחיל עם מטא נתונים

למידע נוסף על מטא נתונים ושדות משויכים (לדוגמה: labels.txt ) ראה קרא את המטא נתונים ממודלים

אם ברצונך להכשיר מודל זיהוי מותאם אישית למשימה שלך, ראה התאמה אישית של מודל .

עבור מקרי השימוש הבאים, עליך להשתמש בדגם אחר:

  • חיזוי איזו תווית בודדת התמונה מייצגת ככל הנראה (ראה סיווג תמונה )
  • חיזוי קומפוזיציה של תמונה, למשל נושא מול רקע (ראה פילוח )

יישומים ומדריכים לדוגמה

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

דְמוּי אָדָם

אתה יכול למנף את ה-API מחוץ לקופסה מספריית המשימות TensorFlow Lite כדי לשלב מודלים של זיהוי אובייקטים בכמה שורות קוד בלבד. אתה יכול גם לבנות צינור מסקנות מותאם אישית משלך באמצעות TensorFlow Lite Interpreter Java API .

הדוגמה של Android להלן מדגימה את היישום עבור שתי השיטות באמצעות ספריית משימות ו- API של מתורגמן , בהתאמה.

ראה דוגמה לאנדרואיד

iOS

אתה יכול לשלב את המודל באמצעות TensorFlow Lite Interpreter Swift API . עיין בדוגמה של iOS למטה.

צפה בדוגמה של iOS

תיאור הדגם

סעיף זה מתאר את החתימה עבור דגמי גלאי צילום בודד שהומרו ל-TensorFlow Lite מ- API לזיהוי אובייקטים של TensorFlow .

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

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

חתימת קלט

המודל לוקח תמונה כקלט.

נניח שהתמונה הצפויה היא 300x300 פיקסלים, עם שלושה ערוצים (אדום, כחול וירוק) לכל פיקסל. יש להזין את זה למודל כמאגר שטוח של ערכי בתים של 270,000 (300x300x3). אם המודל מקומת , כל ערך צריך להיות בייט בודד המייצג ערך בין 0 ל-255.

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

חתימת פלט

המודל מוציא ארבעה מערכים, ממופים למדדים 0-4. מערכים 0, 1 ו-2 מתארים N אובייקטים שזוהו, כאשר אלמנט אחד בכל מערך מתאים לכל אובייקט.

אינדקס שֵׁם תיאור
0 מיקומים מערך רב מימדי של ערכי נקודה צפה [N][4] בין 0 ל-1, המערכים הפנימיים מייצגים תיבות תוחמות בצורה [למעלה, שמאל, למטה, ימין]
1 שיעורים מערך של N מספרים שלמים (פלט כערכים של נקודה צפה) כל אחד מציין את האינדקס של תווית מחלקה מקובץ התוויות
2 ציונים מערך של N ערכי נקודה צפה בין 0 ל-1 המייצגים הסתברות שזוהתה מחלקה
3 מספר זיהויים ערך מספר שלם של N

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

מעמד ציון מקום
תפוח עץ 0.92 [18, 21, 57, 63]
בננה 0.88 [100, 30, 180, 150]
תּוּת 0.87 [7, 82, 89, 163]
בננה 0.23 [42, 66, 57, 83]
תפוח עץ 0.11 [6, 42, 31, 58]

ציון ביטחון עצמי

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

בהתאם ליישום שלך, אתה יכול להחליט על סף חיתוך שמתחתיו תבטל את תוצאות הזיהוי. עבור הדוגמה הנוכחית, חתך הגיוני הוא ציון של 0.5 (כלומר הסתברות של 50% שהזיהוי תקף). במקרה זה, תתעלמו משני האובייקטים האחרונים במערך מכיוון שציוני הביטחון הנמוכים מ-0.5:

מעמד ציון מקום
תפוח עץ 0.92 [18, 21, 57, 63]
בננה 0.88 [100, 30, 180, 150]
תּוּת 0.87 [7, 82, 89, 163]
בננה 0.23 [42, 66, 57, 83]
תפוח עץ 0.11 [6, 42, 31, 58]

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

לדוגמה, בתמונה הבאה, אגס (שאינו חפץ שהדוגמן הוכשר לזהות) זוהה בטעות כ"אדם". זוהי דוגמה לחיוב שגוי שניתן להתעלם ממנו על ידי בחירת חתך מתאים. במקרה זה, חתך של 0.6 (או 60%) ימנע בנוחות את החיוב השגוי.

צילום מסך של דוגמה לאנדרואיד המראה חיובי שגוי

מקום

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

[ חלק עליון, שמאלה, תַחתִית, ימין ]

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

מדדי ביצועים

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

שם המודל גודל הדגם התקן GPU מעבד
COCO SSD MobileNet v1 27 מגה-ביט Pixel 3 (אנדרואיד 10) 22ms 46ms*
Pixel 4 (אנדרואיד 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7.6 אלפיות השנייה 11ms**

* 4 חוטים בשימוש.

** 2 שרשורים בשימוש באייפון לקבלת תוצאת הביצועים הטובה ביותר.

התאמה אישית של דגם

דגמים מאומנים מראש

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

רוב ה-zips להורדה מכילים קובץ model.tflite . אם אין כזה, ניתן ליצור TensorFlow Lite flatbuffer באמצעות הוראות אלה . ניתן להמיר גם דגמי SSD מגן החיות של זיהוי אובייקטים TF2 ל-TensorFlow Lite באמצעות ההוראות כאן . חשוב לציין שלא ניתן להמיר מודלים של זיהוי ישירות באמצעות TensorFlow Lite Converter , מכיוון שהם דורשים שלב ביניים של יצירת מודל מקור ידידותי לנייד. הסקריפטים המקושרים למעלה מבצעים את השלב הזה.

גם לסקריפטים המייצאים TF1 וגם TF2 יש פרמטרים שיכולים לאפשר מספר גדול יותר של אובייקטי פלט או עיבוד איטי יותר ומדויק יותר. אנא השתמש --help עם הסקריפטים כדי לראות רשימה ממצה של טיעונים נתמכים.

נכון לעכשיו, ההסקה במכשיר מותאמת רק עם דגמי SSD. נחקרת תמיכה טובה יותר בארכיטקטורות אחרות כמו CenterNet ו-EfficientDet.

איך לבחור דגם להתאמה אישית?

כל דגם מגיע עם דיוק משלו (מכומת לפי ערך mAP) ומאפייני חביון. עליך לבחור דגם שעובד בצורה הטובה ביותר עבור מקרה השימוש והחומרה המיועדת שלך. לדוגמה, דגמי ה- Edge TPU אידיאליים להסקה על ה-Edge TPU של גוגל ב-Pixel 4.

אתה יכול להשתמש בכלי הבנצ'מרק שלנו כדי להעריך מודלים ולבחור את האפשרות היעילה ביותר שיש.

כוונון עדין של מודלים על נתונים מותאמים אישית

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

אתה יכול להשתמש בטכניקה המכונה למידה העברה כדי לאמן מחדש מודל לזהות שיעורים שאינם בסט המקורי. לדוגמה, אתה יכול לאמן מחדש את המודל כדי לזהות סוגים מרובים של ירק, למרות שיש רק ירק אחד בנתוני ההכשרה המקוריים. לשם כך, תזדקק לסט תמונות אימון עבור כל אחת מהתוויות החדשות שברצונך לאמן. הדרך המומלצת היא להשתמש בספריית TensorFlow Lite Model Maker אשר מפשטת את תהליך האימון של מודל TensorFlow Lite באמצעות מערך נתונים מותאם אישית, עם מספר שורות קודים. הוא משתמש בלימוד העברה כדי להפחית את כמות הנתונים והזמן הנדרשים לאימון. אתה יכול גם ללמוד מ- Few-shot Detection Colab כדוגמה לכוונון עדין של דגם מאומן מראש עם מעט דוגמאות.

לכוונון עדין עם מערכי נתונים גדולים יותר, עיין במדריכים אלה לאימון מודלים משלך עם ה-API לזיהוי אובייקטים של TensorFlow: TF1 , TF2 . לאחר הכשרה, ניתן להמיר אותם לפורמט ידידותי ל-TFLite עם ההוראות כאן: TF1 , TF2