Używanie niestandardowego modelu TensorFlow Lite z Flutter

Jeśli Twoja aplikacja używa niestandardowych modeli TensorFlow Lite, możesz wdrożyć je za pomocą Firebase ML. Dzięki wdrażaniu modeli za pomocą Firebase możesz zmniejszyć początkowy rozmiar pobierania aplikacji i aktualizować modele ML aplikacji bez publikowania nowej wersji aplikacji. Ponadto dzięki Zdalnej konfiguracji i testom A/B możesz dynamicznie udostępniać różne modele różnym grupom użytkowników.

Modele TensorFlow Lite

Modele TensorFlow Lite to modele ML zoptymalizowane pod kątem działania na urządzeniach mobilnych. Aby uzyskać model TensorFlow Lite:

Pamiętaj, że w przypadku braku obsługiwanej biblioteki TensorFlow Lite dla Darta musisz zintegrować się z natywną biblioteką TensorFlow Lite dla swoich platform. Ta integracja nie jest tu opisana.

Zanim zaczniesz

  1. Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera jeśli nie masz ich jeszcze zainstalowanych.

  2. W katalogu głównym projektu Fluttera uruchom to polecenie, aby zainstalować wtyczkę do pobierania modeli ML:

    flutter pub add firebase_ml_model_downloader
    
  3. Ponownie skompiluj projekt:

    flutter run
    

1. Wdróż model

Wdróż niestandardowe modele TensorFlow za pomocą konsoli Firebase lub pakietów SDK Firebase Admin Python i Node.js. Zobacz Wdrażanie modeli niestandardowych i zarządzanie nimi.

Po dodaniu modelu niestandardowego do projektu w Firebase możesz odwoływać się do niego w swoich aplikacjach, podając nazwę, którą określisz. W dowolnym momencie możesz wdrożyć nowy model TensorFlow Lite i pobrać go na urządzenia użytkowników, wywołując funkcję getModel() (patrz poniżej).

2. Pobierz model na urządzenie i zainicjuj interpreter TensorFlow Lite

Aby użyć modelu TensorFlow Lite w aplikacji, najpierw pobierz jego najnowszą wersję na urządzenie za pomocą narzędzia do pobierania modeli. Następnie utwórz instancję interpretera TensorFlow Lite z modelem.

Aby rozpocząć pobieranie modelu, wywołaj metodę getModel() narzędzia do pobierania modeli, podając nazwę przypisaną do modelu podczas przesyłania, informację, czy chcesz zawsze pobierać najnowszy model, oraz warunki, w których chcesz zezwolić na pobieranie.

Możesz wybrać jeden z 3 sposobów pobierania:

Typ pobierania Opis
localModel Pobierz model lokalny z urządzenia. Jeśli nie ma dostępnego modelu lokalnego, ta opcja działa jak latestModel. Użyj tego typu pobierania, jeśli nie chcesz sprawdzać aktualizacji modelu. Na przykład używasz Zdalnej konfiguracji do pobierania nazw modeli i zawsze przesyłasz modele pod nowymi nazwami (zalecane).
localModelUpdateInBackground Pobierz model lokalny z urządzenia i rozpocznij aktualizowanie modelu w tle. Jeśli nie ma dostępnego modelu lokalnego, ta opcja działa jak latestModel.
latestModel Pobierz najnowszy model. Jeśli model lokalny jest najnowszą wersją, zwraca model lokalny. W przeciwnym razie pobierz najnowszy model. To działanie będzie blokować, dopóki nie zostanie pobrana najnowsza wersja (niezalecane). Używaj tego działania tylko w przypadkach, gdy wyraźnie potrzebujesz najnowszej wersji.

Do czasu potwierdzenia pobrania modelu należy wyłączyć funkcje związane z modelem, np. wyszarzyć lub ukryć część interfejsu.

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;

      // ...
    });

Wiele aplikacji rozpoczyna zadanie pobierania w kodzie inicjującym, ale możesz to zrobić w dowolnym momencie, zanim zaczniesz używać modelu.

3. Przeprowadź wnioskowanie na podstawie danych wejściowych

Teraz, gdy masz plik modelu na urządzeniu, możesz użyć go z interpreterem TensorFlow Lite do przeprowadzenia wnioskowania. W przypadku braku obsługiwanej biblioteki TensorFlow Lite dla Darta musisz zintegrować się z natywnymi bibliotekami TensorFlow Lite dla iOS i Androida.

Dodatek: bezpieczeństwo modelu

Niezależnie od tego, jak udostępniasz modele TensorFlow Lite w Firebase ML, Firebase ML przechowuje je w standardowym serializowanym formacie protobuf w pamięci lokalnej.

Teoretycznie oznacza to, że każdy może skopiować Twój model. W praktyce jednak większość modeli jest tak ściśle powiązana z aplikacją i zaciemniona przez optymalizacje, że ryzyko jest podobne do ryzyka, że konkurenci rozmontują i ponownie wykorzystają Twój kod. Mimo to przed użyciem modelu niestandardowego w aplikacji musisz mieć świadomość tego ryzyka.