获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Implemente y administre modelos personalizados

Puede implementar y administrar modelos personalizados y modelos entrenados con AutoML mediante Firebase console o Firebase Admin Python y Node.js SDK. Si solo desea implementar un modelo y actualizarlo ocasionalmente, generalmente es más simple usar la consola Firebase. El SDK de administrador puede ser útil cuando se integra con canalizaciones de compilación, se trabaja con cuadernos de Colab o Jupyter y 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 personalizado de Firebase ML en Firebase console.
  2. Haga clic en Agregar modelo personalizado (o Agregar otro modelo ).
  3. Especifique un nombre que se usará para identificar su modelo en su proyecto de Firebase, luego cargue el archivo del modelo de TensorFlow Lite (generalmente termina en .tflite o .lite ).

Después de implementar su modelo, puede encontrarlo en la página Personalizada. 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

En esta sección, se muestra cómo puede completar las tareas comunes de implementación y administración de modelos con el SDK de administrador. Consulte la referencia del SDK para Python o Node.js para obtener ayuda adicional.

Para ver ejemplos del SDK en uso, consulte el ejemplo de inicio rápido de Python y el ejemplo de inicio rápido de Node.js.

Antes de que empieces

  1. Si aún no tiene un proyecto de Firebase, cree un nuevo proyecto en la consola de Firebase . Luego, abra su proyecto y haga lo siguiente:

    1. En la página Configuración , cree una cuenta de servicio y descargue el archivo de clave de la 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 cubo.

      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 de Firebase ML, haga clic en Comenzar si aún no ha habilitado Firebase ML.

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

  3. Instale e inicialice Admin SDK .

    Cuando inicialice el SDK, especifique las credenciales de su cuenta de servicio y el depósito de Cloud Storage que desea usar para almacenar sus 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',
      })
    

    Nodo.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 TensorFlow Lite

Para implementar un modelo de TensorFlow Lite desde un archivo de modelo, cárguelo en su proyecto y luego publíquelo:

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)

Nodo.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 TensorFlow y Keras

Con el SDK de Python, puede convertir un modelo del formato de modelo guardado de TensorFlow a TensorFlow Lite y cargarlo en su 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 usar 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 bien, puede convertir y cargar un modelo de Keras directamente desde su script 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 AutoML TensorFlow Lite

Si entrenó un modelo de Edge con AutoML Cloud API o con la interfaz de usuario de Google Cloud Console, puede implementar el modelo en Firebase con el SDK de administrador.

Deberá especificar el identificador de recursos del modelo, que es una cadena similar 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 control de Google Cloud Console.
STORAGE_LOCATION La ubicación del recurso del depósito de Cloud Storage que contiene el modelo. Este valor siempre es us-central1 .
MODEL_ID El ID del modelo, que obtuvo de la API de AutoML Cloud.

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)

Nodo.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 listar los modelos de su proyecto, filtrando opcionalmente 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))

Nodo.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);

Puedes filtrar por los siguientes campos:

Campo Ejemplos
display_name display_name = example_model
display_name != example_model

Todos los nombres para mostrar con el prefijo experimental_ :

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

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

Actualizar modelos

Después de agregar un modelo a su proyecto, puede actualizar su nombre para mostrar, etiquetas y archivo de modelo tflite :

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)

Nodo.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);

Cancelar la publicación o eliminar modelos

Para cancelar la publicación o eliminar un modelo, pase el ID del modelo a los métodos de cancelación de publicación o eliminación. Cuando cancela la publicación de un modelo, permanece en su proyecto, pero no está disponible para que lo descarguen sus aplicaciones. 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 inmediatamente la publicación de un nuevo modelo que publicó accidentalmente y que aún no se está utilizando en ninguna parte, o en casos en los que es peor para los usuarios descargar un modelo "malo" modelo que obtener errores de modelo no encontrado).

Si todavía no tiene una referencia al objeto Modelo, probablemente necesite obtener el ID del modelo enumerando los modelos de su proyecto con un filtro. Por ejemplo, para eliminar todos los modelos etiquetados como "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)

Nodo.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);