1. מבוא
ההתקדמות האחרונה בתחום למידת המכונה מאפשרת למחשבים לזהות אובייקטים בתמונות בקלות יחסית. ב-Codelab הזה נסביר איך ליצור מודל של סיווג תמונות שיכול לזהות סוגים שונים של אובייקטים, ואז לפרוס את המודל באפליקציות ל-Android ול-iOS. בעזרת ML Kit ו-AutoML אפשר ליצור ולפרוס את המודל בהיקף נרחב בלי צורך במומחיות בלמידת מכונה.
מה זה ML Kit?
ML Kit הוא SDK לנייד שמביא את המומחיות של Google בתחום הלמידה מחישובים אל אפליקציות ל-Android ול-iOS בחבילה עוצמתית ונוחה לשימוש. לא משנה אם אתם חדשים בתחום של למידת מכונה או מנוסים בו, תוכלו להטמיע בקלות את הפונקציונליות שאתם צריכים בכמה שורות קוד בלבד. יש כמה ממשקי API שיכולים לזהות טקסט, פנים וכו', שאפשר להשתמש בהם ללא צורך בהגדרה. עם זאת, אם אתם צריכים לזהות אובייקטים שלא נתמכים על ידי ממשקי ה-API, כמו זיהוי של סוגים שונים של פרחים בתמונה, תצטרכו לאמן מודל משלכם. כאן AutoML יכול לעזור לכם.
מה זה AutoML?
Cloud AutoML הוא חבילה של מוצרים מבוססי למידת מכונה שמאפשרים למפתחים עם מומחיות מוגבלת בלמידת מכונה לאמן מודלים באיכות גבוהה שספציפיים לצרכים העסקיים שלהם, באמצעות למידת העברה מתקדמת וטכנולוגיית חיפוש ארכיטקטורה עצבית של Google.
ב-codelab הזה נשתמש ב-AutoML Vision Edge ב-ML Kit כדי לאמן מודל לסיווג פרחים. המודל עובר אימון בענן, אבל לאחר מכן הוא נארז או מורד על ידי האפליקציה כדי להריץ מסקנות באופן מלא במכשיר.

מה תלמדו
- איך מאמנים מודל לסיווג תמונות באמצעות AutoML Vision Edge ב-ML Kit.
- איך להריץ אותו באפליקציה לדוגמה ל-Android או ל-iOS באמצעות ML Kit SDK.
הדרישות
באפליקציית Android
- גרסה עדכנית של Android Studio (גרסה 3.4 ואילך)
- Android Studio Emulator עם חנות Play או מכשיר Android פיזי (גרסה 5.0 ומעלה)
- ידע בסיסי בפיתוח ל-Android ב-Kotlin
באפליקציה ל-iOS
- גרסה עדכנית של XCode (גרסה 10.2 ואילך)
- סימולטור iOS או מכשיר iOS פיזי (גרסה 9.0 ואילך)
- CocoaPods
- ידע בסיסי בפיתוח ל-iOS ב-Swift
2. הגדרה
הורדת הקוד ומערך נתוני האימון
מורידים ארכיון ZIP שמכיל את קוד המקור של ה-codelab הזה וגם מערך נתונים לאימון. מחלצים את הארכיון במחשב המקומי.
יצירת פרויקט במסוף Firebase
- עוברים אל מסוף Firebase.
- בוחרים באפשרות Create New Project (יצירת פרויקט חדש) ונותנים לפרויקט את השם ML Kit Codelab.
הגדרת האפליקציה ל-Android
- מוסיפים את אפליקציית Android לפרויקט Firebase. שם החבילה ל-Android:
com.google.firebase.codelab.mlkit.automl - מורידים את קובץ התצורה
google-services.jsonוממקמים אותו באפליקציית Android במיקוםandroid/mlkit-automl/app/google-services.json.
הגדרת האפליקציה ל-iOS
- מוסיפים את אפליקציית ה-iOS לפרויקט Firebase. מזהה חבילת ה-iOS:
com.google.firebase.codelab.mlkit.automl - מורידים את קובץ התצורה
GoogleService-Info.plistופועלים לפי ההוראות כדי להוסיף אותו לאפליקציית iOS בנתיבios/mlkit-automl/GoogleService-Info.plist.
3. הכנת מערך נתונים לאימון
כדי לאמן מודל לזיהוי סוגים שונים של אובייקטים, צריך להכין קבוצה של תמונות ולתייג כל אחת מהן. יצרנו ארכיון של תמונות פרחים ברישיון Creative Commons לשימוש ב-codelab הזה.
מערך הנתונים נארז בקובץ ZIP בשם flower_photos.zip, שנכלל בארכיון ה-ZIP שהורדתם בשלב הקודם.
עיון במערך הנתונים
אם מחלצים את הקובץ flower_photos.zip, אפשר לראות שמערך הנתונים מכיל תמונות של 5 סוגי פרחים: שן הארי, חרצית, צבעוני, חמנייה וורד, שמסודרות בתיקיות שנקראות על שם הפרחים. זו דרך נוחה ליצור מערך נתונים לאימון, להזין אותו ל-AutoML ולאמן מודל לסיווג תמונות.
יש 200 תמונות לכל סוג פרח בקבוצת הנתונים הזו לאימון. כדי לאמן מודל, צריך לפחות 10 תמונות לכל סיווג. עם זאת, בדרך כלל ככל שיש יותר תמונות לאימון, המודלים טובים יותר.

4. אימון מודל
העלאת מערך נתונים לאימון
- ב-מסוף Firebase, פותחים את הפרויקט שיצרתם.
- בוחרים באפשרות ML Kit > AutoML.
- יכול להיות שיוצגו לכם כמה מסכי פתיחה. בוחרים באפשרות שנתחיל? במקומות שבהם היא מופיעה.
- אחרי שתהליך ההגדרה מסתיים, בוחרים באפשרות הוספת מערך נתונים ונותנים לו את השם Flowers.
- בקטע Model objective (יעד המודל), בוחרים באפשרות Single-label classification (סיווג עם תווית אחת), כי נתוני האימון מכילים רק תווית אחת לכל תמונה.
- בוחרים באפשרות יצירה.
- מעלים את קובץ
flower_photos.zipשהורדתם בשלב הקודם כדי לייבא את קבוצת הנתונים לאימון של פרחים. - מחכים כמה דקות עד שמשימת הייבוא מסתיימת.
- עכשיו אפשר לוודא שמערך הנתונים יובא בצורה תקינה.
- מכיוון שכל התמונות במערך נתוני האימון סומנו, אפשר להמשיך לאימון המודל.

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

אם אתם רוצים לאמן את המודל בעצמכם, תוכלו לפעול לפי השלבים הבאים.
- בוחרים באפשרות Train model (אימון מודל).
- בוחרים באפשרות General purpose (למטרות כלליות) ובזמן ההדרכה 1 compute hour (שעת מחשוב אחת).
- מחכים זמן מה (כנראה כמה שעות) עד שמשימת האימון מסתיימת.
- אחרי שמשימת האימון מסתיימת, מוצגים מדדי הערכה לגבי הביצועים של המודל שאומן.

5. שימוש במודל באפליקציות לנייד
הכנה
- ב-codelab הזה יש אפליקציית דוגמה ל-Android ול-iOS שמראה איך להשתמש במודל סיווג התמונות שאומן קודם לכן באפליקציה לנייד. לשתי האפליקציות יש תכונות דומות. אתם יכולים לבחור את הפלטפורמה שאתם מכירים יותר.
- לפני שממשיכים, צריך לוודא שהורדתם את האפליקציות לדוגמה והגדרתם אותן בשלב 2.
- חשוב גם לוודא שהסביבה המקומית שלכם הוגדרה כך שתוכלו ליצור אפליקציות לפלטפורמה שבחרתם (Android/iOS).
הורדת מודל לסיווג תמונות
- אם אימנתם מודל בשלב הקודם, בוחרים באפשרות הורדה כדי להוריד את המודל.
- אם לא אימנתם מודל או שמשימת האימון עדיין לא הסתיימה, אתם יכולים להשתמש במודל שכלול באפליקציות לדוגמה.
הוספת המודל לאפליקציות לדוגמה
כל מה שצריך לעשות הוא להוסיף את המודל לאפליקציות לדוגמה, והן יפעלו ללא צורך בהגדרה נוספת. במסמכי התיעוד שלנו ( Android, iOS) מופיע מדריך מלא להטמעה של ML Kit AutoML באפליקציה. הקוד שפועל עם ML Kit SDK נמצא בקובץ ImageClassifier.kt ובקובץ ImageClassifier.swift, בהתאמה, כך שאפשר להתחיל משם כדי להבין איך האפליקציות פועלות.
יש שתי אפשרויות לפריסת המודל: מקומית ומרוחקת.
- המודל המקומי משמש בעיקר לאריזת מודל סיווג התמונות בקובץ הבינארי של האפליקציה, אבל אפשר גם לספק מודל שנשמר באחסון המקומי. באמצעות חבילות, המודל זמין למשתמשים באופן מיידי אחרי שהם מורידים את האפליקציה מ-App Store או מ-חנות Play, והוא פועל ללא חיבור לאינטרנט.
- מודל מרוחק הוא מודל שמארחים ב-Firebase, והוא יורד למכשיר של המשתמש רק כשצריך אותו בפעם הראשונה. אחרי כן, המודל יפעל גם אופליין.

באפליקציה ל-Android
- פותחים את Android Studio.
- מייבאים את האפליקציה ל-Android בקטע
android/mlkit-automl/. - (אופציונלי) מחלצים את המודל שהורדתם ומעתיקים את התוכן שלו אל המודל שכלול באפליקציה לדוגמה.

- עכשיו לוחצים על Run (הפעלה) (
) בסרגל הכלים של Android Studio ומוודאים שהאפליקציה יכולה לזהות סוגים שונים של פרחים.

האפליקציה ל-iOS
- פותחים את Terminal ועוברים לתיקייה
ios/mlkit-automl/. - מריצים את הפקודה
pod installכדי להוריד יחסי תלות באמצעות Cocoapods - מריצים את הפקודה
open MLVisionExample.xcworkspace/כדי לפתוח את סביבת העבודה של הפרויקט ב-Xcode. - (אופציונלי) מחלצים את המודל שהורדתם ומעתיקים את התוכן שלו למודל שכלול באפליקציה לדוגמה בקטע
ios/ml-automl/Resources/automl/
- עכשיו לוחצים על Run (הפעלה) (
) בסרגל הכלים של Xcode ומוודאים שהאפליקציה יכולה לזהות סוגים שונים של פרחים.

6. (אופציונלי) שימוש במודל מרוחק
המודל המרוחק של ML Kit מאפשר לכם לא לכלול מודלים של TensorFlow Lite בקובץ הבינארי של האפליקציה, אלא להוריד אותו על פי דרישה מ-Firebase כשצריך. למודלים מרחוק יש כמה יתרונות בהשוואה למודלים מקומיים:
- קובץ בינארי קטן יותר של האפליקציה
- אפשרות לעדכן מודלים בלי לעדכן את האפליקציה
- בדיקות A/B עם כמה גרסאות של מודל
בשלב הזה נפרס מודל מרוחק ונשתמש בו באפליקציות לדוגמה. חשוב לוודא שסיימתם לאמן את המודל בשלב 4 של ה-codelab הזה.
פרסום המודל
- עוברים אל מסוף Firebase.
- בוחרים את הפרויקט 'ML Kit AutoML Codelab' שיצרתם קודם.
- בוחרים באפשרות ML Kit (חבילת ה-ML) > AutoML (למידת מכונה אוטומטית).
- בוחרים את מערך הנתונים Flowers (פרחים) שיצרתם קודם.
- מוודאים שמשימת האימון הסתיימה, ואז בוחרים את המודל.
- לוחצים על פרסום ונותנים לו את השם mlkit_flowers.

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

פתרון בעיות
אם אפליקציית הדוגמה עדיין משתמשת במודל המקומי, צריך לוודא ששם המודל המרוחק מוגדר בצורה נכונה בתוך הקוד.
באפליקציה ל-Android
- עוברים אל
ImageClassifier.ktומחפשים את הבלוק הזה.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
- מוודאים ששם המודל שהוגדר בקוד זהה לשם המודל שפרסמתם קודם דרך Firebase Console.
- עכשיו לוחצים על Run (הפעלה) (
) בסרגל הכלים של Android Studio כדי להפעיל מחדש את האפליקציה.
האפליקציה ל-iOS
- עוברים אל
ImageClassifier.swiftומחפשים את הבלוק הזה:
return RemoteModel(
name: Constant.remoteAutoMLModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
- מוודאים ששם המודל שהוגדר בקוד זהה לשם המודל שפרסמתם קודם דרך Firebase Console.
- עכשיו לוחצים על Run (הפעלה) (
) בסרגל הכלים של Xcode כדי להפעיל מחדש את האפליקציה.
7. מעולה!
עברתם תהליך מקצה לקצה של אימון מודל לסיווג תמונות עם נתוני אימון משלכם באמצעות AutoML, ואז השתמשתם במודל באפליקציה לנייד באמצעות ML Kit.
במסמכי התיעוד שלנו מוסבר איך לשלב את AutoML Vision Edge ב-ML Kit באפליקציה שלכם.
אפשר גם לנסות את האפליקציות לדוגמה של ML Kit כדי לראות תכונות נוספות של Firebase ML Kit.
דוגמאות ל-Android
דוגמאות ל-iOS