Utilizzare un modello TensorFlow Lite personalizzato con Flutter

Se la tua app utilizza modelli personalizzati di TensorFlow Lite, puoi utilizzare Firebase ML per eseguire il deployment dei modelli. Se esegui il deployment dei modelli con Firebase, puoi ridurre le dimensioni del download iniziale dell'app e aggiornare i modelli ML dell'app senza rilasciare una nuova versione. Inoltre, con Remote Config e A/B Testing, puoi pubblicare dinamicamente modelli diversi per gruppi diversi di utenti.

Modelli TensorFlow Lite

I modelli TensorFlow Lite sono modelli ML ottimizzati per l'esecuzione su dispositivi mobili. Per ottenere un modello TensorFlow Lite:

Tieni presente che, in assenza di una libreria TensorFlow Lite per Dart sottoposta a manutenzione, dovrai eseguire l'integrazione con la libreria TensorFlow Lite nativa per le tue piattaforme. Questa integrazione non è documentata qui.

Prima di iniziare

  1. Installa e inizializza gli SDK Firebase per Flutter se non l'hai ancora fatto.

  2. Dalla directory principale del progetto Flutter, esegui il seguente comando per installare il plug-in per il download dei modelli ML:

    flutter pub add firebase_ml_model_downloader
    
  3. Ricrea il progetto:

    flutter run
    

1. Esegui il deployment del modello

Esegui il deployment dei tuoi modelli TensorFlow personalizzati utilizzando la console Firebase o gli SDK Firebase Admin Python e Node.js. Consulta Eseguire il deployment e gestire modelli personalizzati.

Dopo aver aggiunto un modello personalizzato al progetto Firebase, puoi fare riferimento al modello nelle tue app utilizzando il nome specificato. Puoi eseguire il deployment di un nuovo modello TensorFlow Lite e scaricarlo sui dispositivi degli utenti in qualsiasi momento chiamando getModel() (vedi di seguito).

2. Scarica il modello sul dispositivo e inizializza un interprete TensorFlow Lite

Per utilizzare il modello TensorFlow Lite nella tua app, utilizza innanzitutto il downloader del modello per scaricare sul dispositivo la versione più recente del modello. Dopodiché, crea un interprete TensorFlow Lite con il modello.

Per avviare il download del modello, chiama il metodo getModel() del downloader del modello, specificando il nome assegnato al modello al momento del caricamento, se vuoi scaricare sempre il modello più recente e le condizioni in cui vuoi consentire il download.

Puoi scegliere tra tre comportamenti di download:

Tipo di download Descrizione
localModel Recupera il modello locale dal dispositivo. Se non è disponibile alcun modello locale, si comporta come latestModel. Utilizza questo tipo di download se non ti interessa controllare la presenza di aggiornamenti del modello. Ad esempio, utilizzi Remote Config per recuperare i nomi dei modelli e carichi sempre i modelli con nuovi nomi (opzione consigliata).
localModelUpdateInBackground Recupera il modello locale dal dispositivo e inizia ad aggiornarlo in background. Se non è disponibile alcun modello locale, il valore si comporta come latestModel.
latestModel Acquista il modello più recente. Se il modello locale è la versione più recente, restituisce il modello locale. In caso contrario, scarica l'ultimo modello. Questo comportamento bloccherà fino al download della versione più recente (non consigliato). Utilizza questo comportamento solo nei casi in cui hai bisogno esplicitamente della versione più recente.

Devi disattivare le funzionalità correlate al modello, ad esempio disattivare o nascondere parte dell'interfaccia utente, fino a quando non confermi che il modello è stato scaricato.

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;

      // ...
    });

Molte app avviano l'attività di download nel codice di inizializzazione, ma puoi farlo in qualsiasi momento prima di utilizzare il modello.

3. Eseguire l'inferenza sui dati di input

Ora che hai il file del modello sul dispositivo, puoi utilizzarlo con l'interprete TensorFlow Lite per eseguire l'inferenza. In assenza di una libreria TensorFlow Lite per Dart, dovrai eseguire l'integrazione con le librerie TensorFlow Lite native per iOS e Android.

Appendice: Sicurezza del modello

Indipendentemente da come rendi disponibili i tuoi modelli TensorFlow Lite per Firebase ML, Firebase ML li memorizza nel formato protobuf serializzato standard nello spazio di archiviazione locale.

In teoria, questo significa che chiunque può copiare il tuo modello. Tuttavia, nella pratica, la maggior parte dei modelli è talmente specifica per l'applicazione e offuscata dalle ottimizzazioni che il rischio è simile a quello dello smontaggio e riutilizzo del codice della concorrenza. Tuttavia, devi essere consapevole di questo rischio prima di utilizzare un modello personalizzato nella tua app.