Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Implementar y administrar modelos personalizados

Puedes implementar y administrar modelos personalizados y modelos entrenados en AutoML con Firebase console o los SDK de Firebase Admin Python y Node.js. Si solo desea implementar un modelo y actualizarlo ocasionalmente, generalmente es más simple usar la consola de Firebase. El SDK de administrador puede resultar útil cuando se integra con procesos de compilación, se trabaja con cuadernos de Colab o Jupyter y con otros flujos de trabajo.

Implementa y administra modelos en Firebase console

Modelos de TensorFlow Lite

Para implementar un modelo de TensorFlow Lite con Firebase console:

  1. Abra la página del modelo ML Firebase personalizada en la consola Firebase.
  2. Haga clic en Agregar modelo personalizado (o Añadir otro modelo).
  3. Especificar un nombre que se utiliza para identificar el modelo en su proyecto Firebase, a continuación, cargar el archivo de modelo TensorFlow Lite (por lo general termina en .tflite o .lite ).

Después de implementar su modelo, puede encontrarlo en la página Personalizado. Desde allí, puede completar tareas como actualizar el modelo con un nuevo archivo, descargar el modelo y eliminar el modelo de su proyecto.

Implementa y administra modelos con Firebase Admin SDK

Esta sección muestra cómo puede completar tareas comunes de implementación y administración de modelos con el SDK de administrador. Ver la referencia SDK para Python o Node.js para obtener ayuda adicional.

Para ejemplos de la SDK en uso, ver la muestra de inicio rápido Python y muestra Node.js de inicio rápido .

Antes de que empieces

  1. Si usted no tiene ya un proyecto Firebase, crear un nuevo proyecto en la consola Firebase . Luego, abra su proyecto y haga lo siguiente:

    1. En la configuración de la página, crear una cuenta de servicio y descargar el archivo de clave de cuenta de servicio. Mantenga este archivo seguro, ya que otorga acceso de administrador a su proyecto.

    2. En la página Almacenamiento, habilite Almacenamiento en la nube. Tome nota del nombre de su depósito.

      Necesita un depósito de Cloud Storage para almacenar temporalmente archivos de modelo mientras los agrega a su proyecto de Firebase. Si está en el plan Blaze, puede crear y usar un depósito que no sea el predeterminado para este propósito.

    3. En la página Firebase ML, haga clic en Empezar si aún no está activado Firebase ML.

  2. En la consola de API de Google , abra su proyecto Firebase y habilitar la API Firebase ML.

  3. Instalar e inicializar el SDK de administración .

    Cuando inicializas el SDK, especifica las credenciales de tu cuenta de servicio y el depósito de Cloud Storage que deseas usar para almacenar tus modelos:

    Pitón

    import firebase_admin
    from firebase_admin import ml
    from firebase_admin import credentials
    
    firebase_admin.initialize_app(
      credentials.Certificate('/path/to/your/service_account_key.json'),
      options={
          'storageBucket': 'your-storage-bucket',
      })
    

    Node.js

    const admin = require('firebase-admin');
    const serviceAccount = require('/path/to/your/service_account_key.json');
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      storageBucket: 'your-storage-bucket',
    });
    const ml = admin.machineLearning();
    

Implementar modelos

Archivos de TensorFlow Lite

Para implementar un modelo de TensorFlow Lite desde un archivo de modelo, súbelo a tu proyecto y luego publícalo:

Pitón

# First, import and initialize the SDK as shown above.

# Load a tflite file and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example.tflite')

# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    model_format=tflite_format)

# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
ml.publish_model(new_model.model_id)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  // Upload the tflite file to Cloud Storage
  const storageBucket = admin.storage().bucket('your-storage-bucket');
  const files = await storageBucket.upload('./example.tflite');

  // Create the model object and add the model to your Firebase project.
  const bucket = files[0].metadata.bucket;
  const name = files[0].metadata.name;
  const gcsUri = `gs:/⁠/${bucket}/${name}`;
  const model = await ml.createModel({
    displayName: 'example_model',  // This is the name you use from your app to load the model.
    tags: ['examples'],  // Optional tags for easier management.
    tfliteModel: { gcsTfliteUri: gcsUri },
  });

  // Publish the model.
  await ml.publishModel(model.modelId);

  process.exit();
})().catch(console.error);

Modelos de TensorFlow y Keras

Con el SDK de Python, puedes convertir un modelo del formato de modelo guardado de TensorFlow a TensorFlow Lite y subirlo a tu depósito de Cloud Storage en un solo paso. Luego, impleméntelo de la misma manera que implementa un archivo TensorFlow Lite.

Pitón

# First, import and initialize the SDK as shown above.

# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_saved_model('./model_directory')

# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    model_format=tflite_format)

# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
ml.publish_model(new_model.model_id)

Si tiene un modelo de Keras, también puede convertirlo a TensorFlow Lite y cargarlo en un solo paso. Puede utilizar un modelo de Keras guardado en un archivo HDF5:

Pitón

import tensorflow as tf

# Load a Keras model, convert it to TensorFlow Lite, and upload it to Cloud Storage
model = tf.keras.models.load_model('your_model.h5')
source = ml.TFLiteGCSModelSource.from_keras_model(model)

# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...

O puede convertir y cargar un modelo de Keras directamente desde su secuencia de comandos de entrenamiento:

Pitón

import tensorflow as tf

# Create a simple Keras model.
x = [-1, 0, 1, 2, 3, 4]
y = [-3, -1, 1, 3, 5, 7]

model = tf.keras.models.Sequential(
    [tf.keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(x, y, epochs=3)

# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_keras_model(model)

# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...

Modelos de AutoML TensorFlow Lite

Si usted entrenó un modelo Edge con la nube API AutoML o con la consola de interfaz de usuario de la nube de Google, puede implementar el modelo de Firebase utilizando el SDK de administración.

Deberá especificar el identificador de recursos del modelo, que es una cadena que se parece al siguiente ejemplo:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER El número de proyecto del depósito de Cloud Storage que contiene el modelo. Este podría ser su proyecto de Firebase u otro proyecto de Google Cloud. Puede encontrar este valor en la página Configuración de Firebase console o en el panel de Google Cloud Console.
STORAGE_LOCATION La ubicación de recursos del depósito de Cloud Storage que contiene el modelo. Este valor es siempre us-central1 .
MODEL_ID El ID del modelo, que obtuvo de AutoML Cloud API.

Pitón

# First, import and initialize the SDK as shown above.

# Get a reference to the AutoML model
source = ml.TFLiteAutoMlSource('projects/{}/locations/{}/models/{}'.format(
    # See above for information on these values.
    project_number,
    storage_location,
    model_id
))

# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you will use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    model_format=tflite_format)

# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
new_model.wait_for_unlocked()
ml.publish_model(new_model.model_id)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  // Get a reference to the AutoML model. See above for information on these
  // values.
  const automlModel = `projects/${projectNumber}/locations/${storageLocation}/models/${modelId}`;

  // Create the model object and add the model to your Firebase project.
  const model = await ml.createModel({
    displayName: 'example_model',  // This is the name you use from your app to load the model.
    tags: ['examples'],  // Optional tags for easier management.
    tfliteModel: { automlModel: automlModel },
  });

  // Wait for the model to be ready.
  await model.waitForUnlocked();

  // Publish the model.
  await ml.publishModel(model.modelId);

  process.exit();
})().catch(console.error);

Enumere los modelos de su proyecto

Puede enumerar los modelos de su proyecto, opcionalmente filtrando los resultados:

Pitón

# First, import and initialize the SDK as shown above.

face_detectors = ml.list_models(list_filter="tags: face_detector").iterate_all()
print("Face detection models:")
for model in face_detectors:
  print('{} (ID: {})'.format(model.display_name, model.model_id))

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  let listOptions = {filter: 'tags: face_detector'}
  let models;
  let pageToken = null;
  do {
    if (pageToken) listOptions.pageToken = pageToken;
    ({models, pageToken} = await ml.listModels(listOptions));
    for (const model of models) {
      console.log(`${model.displayName} (ID: ${model.modelId})`);
    }
  } while (pageToken != null);

  process.exit();
})().catch(console.error);

Puede filtrar por los siguientes campos:

Campo Ejemplos de
display_name display_name = example_model
display_name != example_model

Todos los nombres de visualización con el experimental_ el prefijo:

display_name : experimental_*

Tenga en cuenta que solo se admite la coincidencia de prefijos.

tags tags: face_detector
tags: face_detector AND tags: experimental
state.published state.published = true
state.published = false

Combinar filtros con AND , OR y NOT operadores y paréntesis ( ( , ) ).

Actualizar modelos

Después de añadir un modelo para su proyecto, puede actualizar su nombre de presentación, etiquetas y tflite archivo de modelo:

Pitón

# First, import and initialize the SDK as shown above.

model = ...   # Model object from create_model(), get_model(), or list_models()

# Update the model with a new tflite model. (You could also update with a
# `TFLiteAutoMlSource`)
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example_v2.tflite')
model.model_format = ml.TFLiteFormat(model_source=source)

# Update the model's display name.
model.display_name = "example_model"

# Update the model's tags.
model.tags = ["examples", "new_models"]

# Add a new tag.
model.tags += "experimental"

# After you change the fields you want to update, save the model changes to
# Firebase and publish it.
updated_model = ml.update_model(model)
ml.publish_model(updated_model.model_id)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  const model = ... // Model object from createModel(), getModel(), or listModels()

  // Upload a new tflite file to Cloud Storage.
  const files = await storageBucket.upload('./example_v2.tflite');
  const bucket = files[0].metadata.bucket;
  const name = files[0].metadata.name;

  // Update the model. Any fields you omit will be unchanged.
  await ml.updateModel(model.modelId, {
    displayName: 'example_model',  // Update the model's display name.
    tags: model.tags.concat(['new']),  // Add a tag.
    tfliteModel: {gcsTfliteUri: `gs:/⁠/${bucket}/${name}`},
  });

  process.exit();
})().catch(console.error);

Anular la publicación o eliminar modelos

Para anular la publicación o eliminar un modelo, pase el ID del modelo a los métodos de anulación de publicación o eliminación. Cuando anula la publicación de un modelo, permanece en su proyecto, pero no está disponible para que sus aplicaciones lo descarguen. Cuando elimina un modelo, se elimina por completo de su proyecto. (No se espera anular la publicación de un modelo en un flujo de trabajo estándar, pero puede usarlo para anular la publicación de inmediato de un nuevo modelo que publicó accidentalmente y que aún no se está utilizando en ningún lugar, o en los casos en que es peor para los usuarios descargar un modelo "malo" modelo que para obtener errores de modelo no encontrado).

Si aún no tiene una referencia al objeto Modelo, probablemente necesitará obtener el ID del modelo enumerando los modelos de su proyecto con un filtro. Por ejemplo, para eliminar todos los modelos etiquetados "face_detector":

Pitón

# First, import and initialize the SDK as shown above.

face_detectors = ml.list_models(list_filter="tags: 'face_detector'").iterate_all()
for model in face_detectors:
  ml.delete_model(model.model_id)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  let listOptions = {filter: 'tags: face_detector'}
  let models;
  let pageToken = null;
  do {
    if (pageToken) listOptions.pageToken = pageToken;
    ({models, pageToken} = await ml.listModels(listOptions));
    for (const model of models) {
      await ml.deleteModel(model.modelId);
    }
  } while (pageToken != null);

  process.exit();
})().catch(console.error);