1. מבוא
בעקבות ההתקדמות האחרונה בלמידת מכונה, למחשבים קל יחסית לזהות אובייקטים בתמונות. ב-Codelab הזה נדריך אותך בתהליך מקצה לקצה לפיתוח מודל סיווג תמונות שיכול לזהות סוגים שונים של אובייקטים, ולאחר מכן לפרוס את המודל באפליקציה ל-Android ול-iOS. בעזרת ML Kit ו-AutoML אפשר לפתח ולפרוס את המודל בקנה מידה נרחב, ללא צורך במומחיות בלמידת מכונה.
מהי ערכת ML?
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 בחנות Play או במכשיר Android פיזי (גרסה 5.0 ואילך)
- ידע בסיסי בפיתוח Android ב-Kotlin
באפליקציה ל-iOS
- גרסה עדכנית של XCode (גרסה 10.2 ואילך)
- סימולטור iOS או מכשיר iOS פיזי (גרסה 9.0 ואילך)
- CocoaPods
- ידע בסיסי בפיתוח iOS ב-Swift
2. הגדרה
הורידו את מערך הנתונים של הקוד והאימון.
מורידים ארכיון מיקוד שמכיל את קוד המקור של ה-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. הכנת מערך נתונים לאימון
כדי לאמן את המודל לזהות סוגים שונים של אובייקטים, צריך להכין סט של תמונות ולתייג לכל אחת מהן. יצרנו ארכיון של תמונות פרחים ברישיון השימושיות שאפשר להשתמש בהן ב-Codelab הזה.
מערך הנתונים ארוז בקובץ ZIP בשם flower_photos.zip
שכלול בארכיון ה-ZIP שהורדתם בשלב הקודם.
הכרת מערך הנתונים
אם מחלצים את הקובץ flower_photos.zip
, אפשר לראות שמערך הנתונים מכיל תמונות של 5 סוגי פרחים: שן הארי, חיננית, צבעונים, חמניות וורדים שמסודרים בתיקיות שנקראות על שם הפרחים. זוהי דרך שימושית ליצור מערך נתונים לאימון כדי להזין ל-AutoML ולאמן מודל לסיווג תמונות.
במערך הנתונים לאימון יש 200 תמונות לכל סוג פרח. צריך לפחות 10 תמונות בכל כיתה כדי לאמן מודל. עם זאת, ככל שיהיו יותר תמונות לאימון, בדרך כלל יובילו למודלים טובים יותר.
4. אימון מודל
העלאת מערך נתונים לאימון
- במסוף Firebase, פותחים את הפרויקט שיצרתם.
- בוחרים באפשרות ML Kit > AutoML.
- יכול להיות שתראו כמה מסכי פתיחה. בוחרים באפשרות שנתחיל?, במקרים הרלוונטיים.
- בסיום תהליך ההגדרה, בוחרים באפשרות Add dataset (הוספת מערך נתונים) ונותנים את השם 'Flowers' (פרחים).
- בקטע מטרת המודל, בוחרים באפשרות סיווג של תווית יחידה,כי נתוני האימון מכילים רק תווית אחת לכל תמונה.
- בוחרים באפשרות יצירה.
- מעלים את הקובץ
flower_photos.zip
שהורדתם בשלב הקודם כדי לייבא את מערך הנתונים של אימון הפרחים. - ממתינים כמה דקות עד שמשימת הייבוא תסתיים.
- עכשיו אפשר לוודא שמערך הנתונים יובא כראוי.
- מכיוון שכל התמונות במערך הנתונים לאימון תויגו, אתם יכולים להמשיך באימון המודל.
אימון מודל לסיווג תמונות
המודל שלנו פועל במכשיר נייד עם עוצמת מחשוב ואחסון מוגבלים, ולכן עלינו לשים לב לא רק לדיוק של המודל, אלא גם לגודל ולמהירות שלו. תמיד יש יחסי גומלין בין דיוק המודל, זמן האחזור (כלומר הזמן שנדרש לסיווג תמונה) וגודל המודל. באופן כללי, מודל עם דיוק גבוה יותר הוא גם גדול יותר וייקח לו יותר זמן לסווג תמונה.
באמצעות AutoML יש כמה אפשרויות: לבצע אופטימיזציה לשיפור הדיוק, לבצע אופטימיזציה לזמן אחזור ולגודל המודל או לאזן ביניהם. אפשר גם לבחור כמה זמן לאפשר למודל לאמן את המודל. צריך לאמן מערכי נתונים גדולים יותר למשך זמן ארוך יותר.
אם אתם רוצים לאמן את המודל בעצמכם, אלה השלבים שצריך לבצע.
- בוחרים באפשרות מודל אימון.
- בוחרים באפשרות מטרה כללית ובזמן אימון של שעת מחשוב אחת.
- ממתינים זמן מה (כנראה כמה שעות) עד שמשימת האימון תסתיים.
- בסיום משימת האימון, יוצגו מדדי הערכה לגבי הביצועים של המודל שעבר אימון.
5. שימוש במודל באפליקציות לנייד
הכנה
- ה-Codelab הזה כולל אפליקציה לדוגמה ל-Android וגם ל-iOS שמדגימה איך להשתמש במודל סיווג התמונות שאימנו קודם באפליקציה לנייד. לשתי האפליקציות יש תכונות דומות. אתם יכולים לבחור את הפלטפורמה שאתם מכירים יותר.
- לפני שממשיכים, חשוב לוודא שהורדתם את האפליקציות לדוגמה והגדרתם אותן בשלב 2.
- בנוסף, צריך לוודא שהסביבה המקומית הוגדרה כך שתוכלו ליצור אפליקציות לפלטפורמה שבחרתם (Android/iOS).
הורדת מודל לסיווג תמונות
- אם אימנתם מודל בשלב הקודם, בוחרים באפשרות הורדה כדי לקבל את המודל.
- אם לא תאמנו מודל או שמשימת האימון עדיין לא הסתיימה, תוכלו להשתמש במודל שכלול באפליקציות לדוגמה.
הוספת המודל לאפליקציות לדוגמה
צריך להוסיף את המודל רק לאפליקציות לדוגמה, והן יפעלו באופן עצמאי. למדריך מלא על השילוב של ML Kit AutoML באפליקציה, אפשר לעיין במסמכי התיעוד שלנו ( Android, iOS). קוד שמקיים אינטראקציה עם ML Kit SDK נמצא בקובץ ImageClassifier.kt
ו-ImageClassifier.swift
, בהתאמה, כך שתוכלו להתחיל משם ולראות איך האפליקציות פועלות.
יש שתי אפשרויות לפרוס את המודל: מקומי ומרוחק.
- המודל המקומי משמש בעיקר ליצירת מודל לסיווג תמונות בקובץ הבינארי של האפליקציה, אבל אפשר גם לספק מודל שנשמר באחסון המקומי. לאחר קיבוץ, המודל זמין למשתמשים באופן מיידי אחרי שהם יורידו את האפליקציה שלך מ-App Store או מחנות Play, והוא יפעל ללא חיבור לאינטרנט.
- המשמעות של מודל מרוחק היא שהמודל מתארח ב-Firebase, והמערכת תוריד אותו למכשיר של המשתמש רק בפעם הראשונה שיהיה בו צורך. לאחר מכן, המודל יעבוד גם במצב אופליין.
באפליקציה ל-Android
- פותחים את Android Studio.
- ייבוא האפליקציה ל-Android בקטע
android/mlkit-automl/
- (אופציונלי) מחלצים את המודל שהורדתם ומעתיקים את התוכן שלו מעל למודל שכלול באפליקציה לדוגמה.
- עכשיו צריך ללחוץ על 'הפעלה' ( ) בסרגל הכלים של Android Studio ולוודא שאפשר לזהות סוגים שונים של פרחים.
האפליקציה ל-iOS
- פותחים את 'טרמינל' ועוברים לתיקייה
ios/mlkit-automl/
- מריצים את הפקודה
pod install
כדי להוריד יחסי תלות דרך Cocoapods - מריצים את הפקודה
open MLVisionExample.xcworkspace/
כדי לפתוח את סביבת העבודה של הפרויקט ב-Xcode. - (אופציונלי) מחלצים את המודל שהורדתם ומעתיקים את התוכן שלו מעל המודל שנכלל באפליקציה לדוגמה בקטע
ios/ml-automl/Resources/automl/
- עכשיו לוחצים על 'הפעלה' ( ) בסרגל הכלים של Xcode ומוודאים שאפשר לזהות סוגים שונים של פרחים.
6. (אופציונלי) שימוש במודל מרוחק
המודל המרוחק של ML Kit מאפשר לא לכלול מודלים של Tensorflow Lite בקובץ הבינארי של האפליקציה, אבל להוריד אותם על פי דרישה מ-Firebase במקרה הצורך. למודלים של עבודה מרחוק יש כמה יתרונות על פני מודלים מקומיים:
- קובץ בינארי של אפליקציה קטנה יותר
- יכולת לעדכן מודלים בלי לעדכן את האפליקציה
- בדיקת A/B עם כמה גרסאות של מודל
בשלב הזה, נפרסם מודל מרחוק ונשתמש בו באפליקציות לדוגמה. חשוב לוודא שסיימתם לאמן את המודל בשלב 4 ב-Codelab הזה.
פרסום המודל
- נכנסים אל מסוף Firebase.
- בוחרים באפשרות ML Kit AutoML Codelab בפרויקט שיצרתם קודם.
- בוחרים באפשרות ML Kit > AutoML.
- בוחרים באפשרות 'פרחים' במערך הנתונים שיצרתם קודם.
- מוודאים שמשימת האימון הושלמה ובוחרים את המודל.
- לוחצים על פרסום ונותנים את השם 'mlkit_flowers'.
זיהוי פרחים באמצעות הדגם המרוחק
האפליקציות לדוגמה מוגדרות לשימוש במודל מרוחק, אם הוא זמין. אחרי שמפרסמים את המודל המרוחק, צריך רק להפעיל מחדש את האפליקציות כדי להפעיל את הורדת המודל. כדי לוודא שהאפליקציה משתמשת במודל המרוחק, בודקים בקטע 'מקור' בכותרת התחתונה של מסך האפליקציה. מידע נוסף זמין בקטע 'פתרון בעיות' אם זה לא עובד.
פתרון בעיות
אם האפליקציה לדוגמה עדיין משתמשת במודל המקומי, צריך לוודא ששם הדגם המרוחק מוגדר נכון בתוך הקוד.
באפליקציה ל-Android
- צריך לעבור אל
ImageClassifier.kt
כדי למצוא את החסימה הזו.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
- מוודאים ששם המודל שמוגדר בקוד תואם לשם הדגם שפרסמתם קודם דרך מסוף Firebase.
- כדי להפעיל מחדש את האפליקציה, צריך ללחוץ על 'הפעלה' ( ) בסרגל הכלים של Android Studio.
האפליקציה ל-iOS
- עוברים אל
ImageClassifier.swift
ומוצאים את הבלוק הזה,
return RemoteModel(
name: Constant.remoteAutoMLModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
- מוודאים ששם הדגם שהוגדר בקוד תואם לשם הדגם שפרסמתם קודם לכן דרך מסוף Firebase
- עכשיו לוחצים על 'הפעלה' ( ) בסרגל הכלים של Xcode כדי להפעיל מחדש את האפליקציה.
7. מעולה!
עברתם מסע מקצה לקצה לאימון של מודל סיווג תמונות באמצעות נתוני אימון משלכם באמצעות AutoML, ואז שימוש במודל באפליקציה לנייד באמצעות ML Kit.
במסמכי התיעוד מוסבר איך לשלב את AutoML Vision Edge ב-ML Kit באפליקציה שלכם.
אפשר גם לנסות את האפליקציות לדוגמה של ML Kit כדי לראות תכונות אחרות של Firebase ML Kit.
דוגמאות ל-Android
דוגמאות ל-iOS