Usa un modelo personalizado de TensorFlow Lite con Flutter

Si tu app usa modelos personalizados de TensorFlow Lite, puedes usar AA de Firebase para implementarlos. Si implementas modelos con Firebase, puedes reducir el tamaño de la descarga inicial de tu app y actualizar sus modelos de AA sin lanzar una nueva versión. Además, con Remote Config y A/B Testing, puedes entregar de manera dinámica diferentes modelos a conjuntos distintos de usuarios.

Modelos de TensorFlow Lite

Los modelos de TensorFlow Lite son modelos de AA optimizados para ejecutarse en dispositivos móviles. Deberás realizar lo siguiente para obtener un modelo de TensorFlow Lite:

Ten en cuenta que, si no tienes una biblioteca de TensorFlow Lite mantenida para Dart, tendrás que realizar la integración en la biblioteca nativa de TensorFlow Lite para tus plataformas. Esta integración no se documenta aquí.

Antes de comenzar

  1. Instala e inicializa los SDK de Firebase para Flutter si aún no lo has hecho.

  2. Desde el directorio raíz del proyecto de Flutter, ejecuta el siguiente comando para instalar el complemento de descarga del modelo de AA:

    flutter pub add firebase_ml_model_downloader
    
  3. Vuelve a compilar tu proyecto:

    flutter run
    

1. Implementa tu modelo

Implementa tus modelos personalizados de TensorFlow con Firebase console o los SDK de Firebase Admin para Python y Node.js. Consulta la sección sobre cómo implementar y administrar modelos personalizados.

Después de agregar un modelo personalizado al proyecto de Firebase, podrás usar el nombre que especificaste para hacer referencia al modelo en tus apps. En cualquier momento, puedes implementar un nuevo modelo de TensorFlow Lite y descargarlo en los dispositivos de los usuarios llamando a getModel() (consulta a continuación).

2. Descarga el modelo en el dispositivo y, luego, inicializa un intérprete de TensorFlow Lite

Para usar el modelo de TensorFlow Lite en tu app, primero usa el complemento de descarga del modelo a fin de descargar su última versión en el dispositivo. Luego, crea una instancia de un intérprete de TensorFlow Lite con el modelo.

Para iniciar la descarga del modelo, llama al método getModel() del usuario que descargó el modelo, especifica el nombre que le asignaste al modelo cuando lo subiste, si quieres descargar siempre el último modelo y las condiciones en las que deseas permitir la descarga.

Puedes elegir entre tres comportamientos de descarga:

Tipo de descarga Descripción
localModel Obtén el modelo local del dispositivo. Si no hay un modelo local disponible, el método se comporta como latestModel. Usa este tipo de descarga si no quieres buscar las actualizaciones del modelo. Por ejemplo, si quieres usar Remote Config para recuperar nombres de modelos y siempre subes modelos con nombres nuevos (recomendado).
localModelUpdateInBackground Obtén el modelo local del dispositivo y comienza a actualizarlo en segundo plano. Si no hay un modelo local disponible, el método se comporta como latestModel.
latestModel Obtén el modelo más reciente. Si el modelo local es la versión más reciente, se muestra ese modelo. De lo contrario, descarga el modelo más reciente. Este comportamiento se bloqueará hasta que se descargue la versión más reciente (no se recomienda). Usa este comportamiento solo si necesitas de forma explícita la versión más reciente.

Debes inhabilitar la funcionalidad relacionada con el modelo, por ejemplo, ocultar o inhabilitar parte de la IU, hasta que confirmes que se descargó el modelo.

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;

      // ...
    });

Muchas apps comienzan la tarea de descarga en su código de inicialización, pero puedes hacerlo en cualquier momento antes de usar el modelo.

3. Realiza inferencias sobre los datos de entrada

Ahora que tienes el archivo de modelo en el dispositivo, puedes usarlo con el intérprete de TensorFlow Lite para realizar inferencias. Si no tienes una biblioteca de TensorFlow Lite mantenida para Dart, tendrás que realizar la integración en las bibliotecas nativas de TensorFlow Lite para iOS y Android.

Apéndice: Seguridad del modelo

Independientemente de cómo hagas que tus modelos de TensorFlow Lite estén disponibles para AA de Firebase, AA de Firebase los almacena en forma local en el formato estándar de protobuf serializado.

En teoría, eso significa que cualquier persona puede copiar tu modelo. Sin embargo, en la práctica, la mayoría de los modelos son tan específicos para la aplicación y ofuscados por las optimizaciones que el riesgo es comparable a que alguien de la competencia desensamble y vuelva a usar tu código. No obstante, debes estar al tanto de ese riesgo antes de usar un modelo personalizado en tu app.