שימוש במודל TensorFlow Lite בהתאמה אישית עם Flutter

אם האפליקציה שלכם משתמשת במודלים מותאמים אישית של TensorFlow Lite, תוכלו להשתמש ב-Firebase ML כדי לפרוס את המודלים. כשפורסים מודלים באמצעות Firebase, אפשר להקטין את גודל ההורדה הראשוני של האפליקציה ולעדכן את המודלים ללמידת מכונה של האפליקציה בלי לפרסם גרסה חדשה שלה. בנוסף, בעזרת הגדרת תצורה מרחוק ובדיקת A/B תוכלו להציג מודלים שונים באופן דינמי לקבוצות שונות של משתמשים.

מודלים של TensorFlow Lite

מודלים של TensorFlow Lite הם מודלים של למידת מכונה שעברו אופטימיזציה להפעלה במכשירים ניידים. כדי לקבל מודל TensorFlow Lite:

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

לפני שמתחילים

  1. מתקינים ומפעילים את Firebase SDKs for Flutter, אם עוד לא עשיתם זאת.

  2. בתיקיית השורש של פרויקט Flutter, מריצים את הפקודה הבאה כדי להתקין את הפלאגין להורדת מודלים של למידת מכונה:

    flutter pub add firebase_ml_model_downloader
    
  3. בונים מחדש את הפרויקט:

    flutter run
    

1. פריסת המודל

פריסת המודלים המותאמים אישית של TensorFlow באמצעות מסוף Firebase או ערכות ה-SDK של Firebase Admin עבור Python ו-Node.js. פריסה וניהול של מודלים מותאמים אישית

אחרי שמוסיפים מודל מותאם אישית לפרויקט ב-Firebase, אפשר להפנות למודל באפליקציות באמצעות השם שציינתם. בכל שלב אפשר לפרוס מודל TensorFlow Lite חדש ולהוריד את המודל החדש למכשירים של המשתמשים באמצעות קריאה ל-getModel() (ראו למטה).

2. מורידים את המודל למכשיר ומפעילים את המתורגם של TensorFlow Lite

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

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

אפשר לבחור מבין שלוש התנהגויות הורדה:

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

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

FirebaseModelDownloader.instance
    .getModel(
        "yourModelName",
        FirebaseModelDownloadType.localModel,
        FirebaseModelDownloadConditions(
          iosAllowsCellularAccess: true,
          iosAllowsBackgroundDownloading: false,
          androidChargingRequired: false,
          androidWifiRequired: false,
          androidDeviceIdleRequired: false,
        )
    )
    .then((customModel) {
      // Download complete. Depending on your app, you could enable the ML
      // feature, or switch from the local model to the remote model, etc.

      // The CustomModel object contains the local path of the model file,
      // which you can use to instantiate a TensorFlow Lite interpreter.
      final localModelPath = customModel.file;

      // ...
    });

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

3. ביצוע היסק על נתוני הקלט

עכשיו, כשקובץ המודל נמצא במכשיר, אפשר להשתמש בו עם המפרש של TensorFlow Lite כדי לבצע הסקה. אם אין ספריית TensorFlow Lite מתוחזקת ל-Dart, תצטרכו לשלב אותה עם ספריות TensorFlow Lite מקוריות ל-iOS ול-Android.

נספח: אבטחת מודל

לא משנה איך המודלים של TensorFlow Lite יהיו זמינים ל-Firebase ML, הם יישמרו ב-Firebase ML בפורמט ה-protobuf המסודר הרגיל באחסון המקומי.

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