Benutzerdefiniertes TensorFlow Lite-Modell mit Flutter verwenden

Wenn in Ihrer App benutzerdefinierte TensorFlow Lite-Modelle verwendet werden, können Sie Ihre Modelle mit Firebase ML bereitstellen. Wenn Sie Modelle mit Firebase bereitstellen, können Sie die anfängliche Downloadgröße Ihrer App reduzieren und die ML-Modelle Ihrer App aktualisieren, ohne eine neue Version der App zu veröffentlichen. Mit Remote Config und A/B-Tests können Sie verschiedenen Nutzergruppen dynamisch unterschiedliche Modelle bereitstellen.

TensorFlow Lite-Modelle

TensorFlow Lite-Modelle sind ML-Modelle, die für die Ausführung auf Mobilgeräten optimiert sind. So erhalten Sie ein TensorFlow Lite-Modell:

Da es keine gepflegte TensorFlow Lite-Bibliothek für Dart gibt, müssen Sie die native TensorFlow Lite-Bibliothek für Ihre Plattformen einbinden. Diese Integration wird hier nicht dokumentiert.

Hinweis

  1. Installieren und initialisieren Sie die Firebase SDKs für Flutter, falls noch nicht geschehen.

  2. Führen Sie im Stammverzeichnis Ihres Flutter-Projekts den folgenden Befehl aus, um das Plug-in zum Herunterladen von ML-Modellen zu installieren:

    flutter pub add firebase_ml_model_downloader
    
  3. Erstellen Sie Ihr Projekt neu:

    flutter run
    

1. Modell bereitstellen

Sie können Ihre benutzerdefinierten TensorFlow-Modelle entweder über die Firebase-Konsole oder über die Firebase Admin SDKs für Python und Node.js bereitstellen. Weitere Informationen finden Sie unter Benutzerdefinierte Modelle bereitstellen und verwalten.

Nachdem Sie Ihrem Firebase-Projekt ein benutzerdefiniertes Modell hinzugefügt haben, können Sie in Ihren Apps anhand des von Ihnen angegebenen Namens darauf verweisen. Sie können jederzeit ein neues TensorFlow Lite-Modell bereitstellen und das neue Modell auf die Geräte der Nutzer herunterladen, indem Sie getModel() aufrufen (siehe unten).

2. Modell auf das Gerät herunterladen und einen TensorFlow Lite-Interpreter initialisieren

Wenn Sie Ihr TensorFlow Lite-Modell in Ihrer App verwenden möchten, laden Sie zuerst die neueste Version des Modells mit dem Modell-Downloader auf das Gerät herunter. Anschließend instanziieren Sie einen TensorFlow Lite-Interpreter mit dem Modell.

Rufen Sie zum Starten des Modell-Downloads die getModel()-Methode des Modell-Downloaders auf. Geben Sie dabei den Namen an, den Sie dem Modell beim Hochladen zugewiesen haben, ob Sie immer das neueste Modell herunterladen möchten und unter welchen Bedingungen der Download zulässig sein soll.

Sie können zwischen drei Download-Verhaltensweisen wählen:

Downloadtyp Beschreibung
localModel Das lokale Modell vom Gerät abrufen. Wenn kein lokales Modell verfügbar ist, verhält sich die Funktion wie latestModel. Verwenden Sie diesen Downloadtyp, wenn Sie nicht nach Modellupdates suchen möchten. Sie verwenden beispielsweise Remote Config, um Modellnamen abzurufen, und laden Modelle immer unter neuen Namen hoch (empfohlen).
localModelUpdateInBackground Das lokale Modell vom Gerät abrufen und das Modell im Hintergrund aktualisieren Wenn kein lokales Modell verfügbar ist, verhält sich die Funktion wie latestModel.
latestModel Aktuelles Modell erhalten Wenn das lokale Modell die aktuelle Version ist, wird das lokale Modell zurückgegeben. Laden Sie andernfalls das aktuelle Modell herunter. Dieses Verhalten wird blockiert, bis die neueste Version heruntergeladen wurde (nicht empfohlen). Verwenden Sie dieses Verhalten nur, wenn Sie ausdrücklich die neueste Version benötigen.

Sie sollten modellbezogene Funktionen deaktivieren, z. B. einen Teil der Benutzeroberfläche ausgrauen oder ausblenden, bis Sie bestätigen, dass das Modell heruntergeladen wurde.

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;

      // ...
    });

Viele Apps starten den Downloadvorgang in ihrem Initialisierungscode. Sie können dies jedoch jederzeit tun, bevor Sie das Modell verwenden müssen.

3. Inferenz für Eingabedaten durchführen

Nachdem Sie die Modelldatei auf dem Gerät haben, können Sie sie mit dem TensorFlow Lite-Interpreter verwenden, um Inferenz auszuführen. Da es keine gepflegte TensorFlow Lite-Bibliothek für Dart gibt, müssen Sie die nativen TensorFlow Lite-Bibliotheken für iOS und Android verwenden.

Anhang: Modellsicherheit

Unabhängig davon, wie Sie Ihre TensorFlow Lite-Modelle für Firebase ML verfügbar machen, speichert Firebase ML sie im standardmäßigen serialisierten Protobuf-Format im lokalen Speicher.

Theoretisch bedeutet das, dass jeder Ihr Modell kopieren kann. In der Praxis sind die meisten Modelle jedoch so anwendungsspezifisch und durch Optimierungen verschleiert, dass das Risiko ähnlich hoch ist wie das Risiko, dass Wettbewerber Ihren Code disassemblieren und wiederverwenden. Sie sollten sich dieses Risikos jedoch bewusst sein, bevor Sie ein benutzerdefiniertes Modell in Ihrer App verwenden.