Użyj niestandardowego modelu TensorFlow Lite z Flutter

Jeśli Twoja aplikacja korzysta z niestandardowych modeli TensorFlow Lite , możesz użyć Firebase ML do wdrożenia swoich modeli. Wdrażając modele w Firebase, możesz zmniejszyć początkowy rozmiar aplikacji do pobrania i zaktualizować modele ML swojej aplikacji bez wydawania nowej wersji aplikacji. 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 do działania na urządzeniach mobilnych. Aby uzyskać model TensorFlow Lite:

Pamiętaj, że w przypadku braku utrzymywanej biblioteki TensorFlow Lite dla Dart, będziesz musiał zintegrować się z natywną biblioteką TensorFlow Lite dla swoich platform. Ta integracja nie jest tutaj udokumentowana.

Zanim zaczniesz

  1. Zainstaluj i zainicjuj zestawy SDK Firebase dla Flutter, jeśli jeszcze tego nie zrobiłeś.

  2. Z katalogu głównego projektu Flutter uruchom następującą komendę, aby zainstalować wtyczkę do pobierania modeli ML:

    flutter pub add firebase_ml_model_downloader
    
  3. Przebuduj swój projekt:

    flutter run
    

1. Wdróż swój model

Wdrażaj 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 niestandardowego modelu do projektu Firebase możesz odwoływać się do modelu w swoich aplikacjach, używając określonej nazwy. W dowolnym momencie możesz wdrożyć nowy model TensorFlow Lite i pobrać nowy model 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 swojej aplikacji, najpierw użyj narzędzia do pobierania modeli, aby pobrać najnowszą wersję modelu na urządzenie. Następnie utwórz instancję interpretera TensorFlow Lite z modelem.

Aby rozpocząć pobieranie modelu, wywołaj metodę getModel() narzędzia do pobierania modeli, określając nazwę nadaną modelowi podczas jego przesyłania, czy chcesz zawsze pobierać najnowszy model oraz warunki, na jakich chcesz zezwolić na pobieranie.

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

Typ pobierania Opis
localModel Pobierz model lokalny z urządzenia. Jeśli nie jest dostępny żaden model lokalny, zachowuje się to jak latestModel . Użyj tego typu pobierania, jeśli nie chcesz sprawdzać dostępności aktualizacji modelu. Na przykład używasz funkcji Remote Config do pobierania nazw modeli i zawsze przesyłasz modele pod nowymi nazwami (zalecane).
localModelUpdateInBackground Pobierz model lokalny z urządzenia i rozpocznij aktualizację modelu w tle. Jeśli nie jest dostępny żaden model lokalny, zachowuje się to jak latestModel .
latestModel Zdobądź najnowszy model. Jeśli model lokalny jest najnowszą wersją, zwraca model lokalny. W przeciwnym razie pobierz najnowszy model. To zachowanie będzie blokowane do czasu pobrania najnowszej wersji (niezalecane). Używaj tego zachowania tylko w przypadkach, gdy wyraźnie potrzebujesz najnowszej wersji.

Powinieneś wyłączyć funkcje związane z modelem — na przykład wyszarzić lub ukryć część interfejsu użytkownika — do czasu potwierdzenia, że ​​model został pobrany.

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żna to zrobić w dowolnym momencie, zanim będzie konieczne użycie modelu.

3. Wykonaj wnioskowanie na danych wejściowych

Teraz, gdy masz plik modelu na urządzeniu, możesz go użyć z interpreterem TensorFlow Lite w celu przeprowadzenia wnioskowania. W przypadku braku utrzymywanej biblioteki TensorFlow Lite dla Dart, konieczna będzie integracja z natywnymi bibliotekami TensorFlow Lite dla iOS i Androida.

Dodatek: Bezpieczeństwo modelu

Niezależnie od tego, w jaki sposób udostępnisz 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. Jednak w praktyce większość modeli jest tak specyficzna dla aplikacji i zaciemniona optymalizacjami, że ryzyko jest podobne do ryzyka, jakie stwarza konkurencja, która demontuje i ponownie wykorzystuje Twój kod. Niemniej jednak powinieneś zdawać sobie sprawę z tego ryzyka, zanim użyjesz niestandardowego modelu w swojej aplikacji.