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 les déployer. 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 ses modèles de ML sans publier de nouvelle version de votre application. De plus, avec Remote Config et A/B Testing, vous pouvez diffuser dynamiquement différents modèles à différents ensembles d'utilisateurs.

Modèles TensorFlow Lite

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

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

Avant de commencer

  1. Installez et initialisez les SDK Firebase pour Flutter si ce n'est pas déjà fait.

  2. À partir du répertoire racine de votre projet Flutter, exécutez la commande suivante pour installer le plug-in de téléchargement de modèles ML:

    flutter pub add firebase_ml_model_downloader
    
  3. Recréez votre projet :

    flutter run
    

1. Déployer le modèle

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

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

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

Pour utiliser votre modèle TensorFlow Lite dans votre application, commencez par utiliser le téléchargeur de modèle 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 importé, si vous souhaitez toujours télécharger le dernier modèle et les conditions dans lesquelles vous souhaitez autoriser le téléchargement.

Vous avez le choix entre trois comportements de téléchargement:

Type de téléchargement Description
localModel Obtenez le modèle local à partir de l'appareil. Si aucun modèle local n'est disponible, le comportement est semblable à celui de latestModel. Utilisez ce type de téléchargement si vous ne souhaitez pas vérifier les mises à jour du modèle. Par exemple, vous utilisez Remote Config pour récupérer les noms de modèles et vous importez toujours des modèles sous de nouveaux noms (recommandé).
localModelUpdateInBackground Obtenez le modèle local à partir de l'appareil et commencez à le mettre à jour en arrière-plan. Si aucun modèle local n'est disponible, le comportement est identique à celui de 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 sera bloqué jusqu'à ce que la dernière version soit téléchargée (non recommandé). N'utilisez ce comportement que lorsque 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 UI) 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 commencent la tâche de téléchargement dans leur code d'initialisation, mais vous pouvez le faire à tout moment avant d'avoir besoin d'utiliser le modèle.

3. Effectuer des inférences 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 des inférences. En l'absence de bibliothèque TensorFlow Lite gérée pour Dart, vous devez l'intégrer aux bibliothèques TensorFlow Lite natives pour iOS et Android.

Annexe: Sécurité du modèle

Quel que soit le mode de mise à disposition de vos modèles TensorFlow Lite pour Firebase ML, Firebase ML les stocke au format protobuf sérialisé standard dans l'espace de stockage local.

En théorie, cela signifie que n'importe qui peut copier votre modèle. Toutefois, en pratique, la plupart des modèles sont tellement spécifiques à l'application et masqués par des optimisations que le risque est semblable à celui de vos concurrents qui désassemblent et réutilisent votre code. Toutefois, vous devez être conscient de ce risque avant d'utiliser un modèle personnalisé dans votre application.