Utiliser un modèle TensorFlow Lite personnalisé avec Flutter

Si votre application utilise des modèles TensorFlow Lite personnalisés, vous pouvez utiliser Firebase ML pour déployer vos modèles. En déployant des modèles avec Firebase, vous pouvez réduire la taille de téléchargement initiale de votre application et mettre à jour les modèles ML de votre application sans publier une nouvelle version de votre application. Et, avec Remote Config et A/B Testing, vous pouvez proposer de manière dynamique différents modèles à différents groupes d'utilisateurs.

Modèles TensorFlow Lite

Les modèles TensorFlow Lite sont des modèles ML optimisés pour fonctionner sur des appareils mobiles. Pour obtenir un modèle TensorFlow Lite :

Notez qu'en l'absence d'une bibliothèque TensorFlow Lite maintenue pour Dart, vous devrez intégrer la bibliothèque TensorFlow Lite native pour vos plates-formes. Cette intégration n'est pas documentée ici.

Avant que tu commences

  1. Installez et initialisez les SDK Firebase pour Flutter si vous ne l'avez pas déjà fait.

  2. Depuis le répertoire racine de votre projet Flutter, exécutez la commande suivante pour installer le plugin de téléchargement de modèle ML :

    flutter pub add firebase_ml_model_downloader
    
  3. Reconstruisez votre projet :

    flutter run
    

1. Déployez votre modèle

Déployez vos modèles TensorFlow personnalisés à l'aide de la console Firebase ou des SDK Firebase Admin Python et Node.js. Voir Déployer et gérer des modèles personnalisés .

Après avoir ajouté un modèle personnalisé à votre projet Firebase, vous pouvez référencer le modèle dans vos applications en utilisant le nom que vous avez spécifié. À tout moment, vous pouvez déployer un nouveau modèle TensorFlow Lite et télécharger le nouveau modèle sur les appareils des utilisateurs en appelant getModel() (voir ci-dessous).

2. Téléchargez le modèle sur l'appareil et initialisez un interpréteur TensorFlow Lite

Pour utiliser votre modèle TensorFlow Lite dans votre application, utilisez d'abord le téléchargeur de modèles pour télécharger la dernière version du modèle sur l'appareil. Ensuite, instanciez un interpréteur TensorFlow Lite avec le modèle.

Pour démarrer le téléchargement du modèle, appelez la méthode getModel() du téléchargeur de modèles, en spécifiant le nom que vous avez attribué au modèle lorsque vous l'avez téléchargé, si vous souhaitez toujours télécharger le dernier modèle et les conditions dans lesquelles vous souhaitez autoriser le téléchargement.

Vous pouvez choisir parmi trois comportements de téléchargement :

Type de téléchargement Description
localModel Obtenez le modèle local de l'appareil. Si aucun modèle local n'est disponible, cela se comporte comme latestModel . Utilisez ce type de téléchargement si vous ne souhaitez pas rechercher les mises à jour du modèle. Par exemple, vous utilisez Remote Config pour récupérer les noms de modèles et vous téléchargez toujours des modèles sous de nouveaux noms (recommandé).
localModelUpdateInBackground Obtenez le modèle local de l'appareil et commencez à mettre à jour le modèle en arrière-plan. Si aucun modèle local n'est disponible, cela se comporte comme latestModel .
latestModel Obtenez le dernier modèle. Si le modèle local est la dernière version, renvoie le modèle local. Sinon, téléchargez le dernier modèle. Ce comportement se bloquera jusqu'à ce que la dernière version soit téléchargée (non recommandé). Utilisez ce comportement uniquement dans les cas où vous avez explicitement besoin de la dernière version.

Vous devez désactiver les fonctionnalités liées au modèle (par exemple, griser ou masquer une partie de votre interface utilisateur) jusqu'à ce que vous confirmiez que le modèle a été téléchargé.

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;

      // ...
    });

De nombreuses applications démarrent la tâche de téléchargement dans leur code d'initialisation, mais vous pouvez le faire à tout moment avant de devoir utiliser le modèle.

3. Effectuer une inférence sur les données d'entrée

Maintenant que vous avez votre fichier de modèle sur l'appareil, vous pouvez l'utiliser avec l'interpréteur TensorFlow Lite pour effectuer une inférence. En l'absence d'une bibliothèque TensorFlow Lite maintenue pour Dart, vous devrez intégrer les bibliothèques TensorFlow Lite natives pour iOS et Android.

Annexe : sécurité du modèle

Quelle que soit la façon dont vous mettez vos modèles TensorFlow Lite à la disposition de Firebase ML, Firebase ML les stocke au format protobuf sérialisé standard dans le stockage local.

En théorie, cela signifie que n’importe qui peut copier votre modèle. Cependant, dans la pratique, la plupart des modèles sont si spécifiques à l'application et obscurcis par les optimisations que le risque est similaire à celui de concurrents désassemblant et réutilisant votre code. Néanmoins, vous devez être conscient de ce risque avant d'utiliser un modèle personnalisé dans votre application.