Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Implante e gerencie modelos personalizados

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Você pode implantar e gerenciar modelos personalizados e modelos treinados em AutoML usando o Firebase console ou os SDKs Firebase Admin Python e Node.js. Se você deseja apenas implantar um modelo e atualizá-lo ocasionalmente, geralmente é mais simples usar o Firebase console. O Admin SDK pode ser útil na integração com pipelines de compilação, trabalhando com notebooks Colab ou Jupyter e outros fluxos de trabalho.

Implante e gerencie modelos no console do Firebase

Modelos do TensorFlow Lite

Para implantar um modelo do TensorFlow Lite usando o Firebase console:

  1. Abra a página de modelo personalizado do Firebase ML no console do Firebase.
  2. Clique em Adicionar modelo personalizado (ou Adicionar outro modelo ).
  3. Especifique um nome que será usado para identificar seu modelo em seu projeto do Firebase e, em seguida, faça upload do arquivo de modelo do TensorFlow Lite (geralmente terminando em .tflite ou .lite ).

Depois de implantar seu modelo, você pode encontrá-lo na página Personalizado. A partir daí, você pode concluir tarefas como atualizar o modelo com um novo arquivo, baixar o modelo e excluir o modelo do seu projeto.

Implante e gerencie modelos com o Firebase Admin SDK

Esta seção mostra como você pode concluir tarefas comuns de implantação e gerenciamento com o Admin SDK. Consulte a referência do SDK para Python ou Node.js para obter ajuda adicional.

Para obter exemplos do SDK em uso, consulte o exemplo de início rápido do Python e o exemplo de início rápido do Node.js .

Antes de você começar

  1. Se você ainda não tem um projeto do Firebase, crie um novo projeto no console do Firebase . Em seguida, abra seu projeto e faça o seguinte:

    1. Na página Configurações , crie uma conta de serviço e baixe o arquivo de chave da conta de serviço. Mantenha este arquivo seguro, pois ele concede acesso de administrador ao seu projeto.

    2. Na página Armazenamento, habilite o Cloud Storage. Anote o nome do seu bucket.

      Você precisa de um bucket do Cloud Storage para armazenar arquivos de modelo temporariamente ao adicioná-los ao seu projeto do Firebase. Se você estiver no plano Blaze, poderá criar e usar um bucket diferente do padrão para essa finalidade.

    3. Na página Firebase ML, clique em Começar se você ainda não ativou o Firebase ML.

  2. No console de APIs do Google , abra seu projeto Firebase e ative a API Firebase ML.

  3. Instale e inicialize o Admin SDK .

    Ao inicializar o SDK, especifique as credenciais da sua conta de serviço e o intervalo do Cloud Storage que deseja usar para armazenar seus modelos:

    Pitão

    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();
    

Implantar modelos

Arquivos do TensorFlow Lite

Para implantar um modelo do TensorFlow Lite a partir de um arquivo de modelo, carregue-o em seu projeto e publique-o:

Pitão

# 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 TensorFlow e Keras

Com o Python SDK, você pode converter um modelo do formato de modelo salvo do TensorFlow para o TensorFlow Lite e carregá-lo em seu bucket do Cloud Storage em uma única etapa. Em seguida, implante-o da mesma forma que implanta um arquivo do TensorFlow Lite.

Pitão

# 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)

Se você possui um modelo Keras, também pode convertê-lo em TensorFlow Lite e carregá-lo em uma única etapa. Você pode usar um modelo Keras salvo em um arquivo HDF5:

Pitão

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.)
# ...

Ou você pode converter e carregar um modelo Keras diretamente do seu script de treinamento:

Pitão

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 do AutoML TensorFlow Lite

Se você treinou um modelo Edge com a API AutoML Cloud ou com a IU do Google Cloud Console, pode implantar o modelo no Firebase usando o Admin SDK.

Você precisará especificar o identificador de recurso do modelo, que é uma string semelhante ao exemplo a seguir:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER O número do projeto do intervalo do Cloud Storage que contém o modelo. Pode ser seu projeto do Firebase ou outro projeto do Google Cloud. Você pode encontrar esse valor na página Configurações do console do Firebase ou no painel do Console do Google Cloud.
STORAGE_LOCATION O local do recurso do bucket do Cloud Storage que contém o modelo. Esse valor é sempre us-central1 .
MODEL_ID O ID do modelo, que você obteve da API AutoML Cloud.

Pitão

# 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);

Liste os modelos do seu projeto

Você pode listar os modelos do seu projeto, opcionalmente filtrando os resultados:

Pitão

# 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);

Você pode filtrar pelos seguintes campos:

Campo Exemplos
display_name display_name = example_model
display_name != example_model

Todos os nomes de exibição com o prefixo experimental_ :

display_name : experimental_*

Observe que apenas correspondência de prefixo é suportada.

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

Combine filtros com os operadores AND , OR e NOT e parênteses ( ( , ) ).

Atualizar modelos

Depois de adicionar um modelo ao seu projeto, você pode atualizar seu nome de exibição, tags e arquivo de modelo tflite :

Pitão

# 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);

Cancelar publicação ou excluir modelos

Para cancelar a publicação ou excluir um modelo, passe o ID do modelo para os métodos de cancelamento de publicação ou exclusão. Quando você cancela a publicação de um modelo, ele permanece em seu projeto, mas não está disponível para download por seus aplicativos. Quando você exclui um modelo, ele é completamente removido do seu projeto. (O cancelamento da publicação de um modelo não é esperado em um fluxo de trabalho padrão, mas você pode usá-lo para cancelar imediatamente a publicação de um novo modelo publicado acidentalmente e que ainda não está sendo usado em nenhum lugar, ou nos casos em que é pior para os usuários baixar um arquivo "ruim" modelo do que obter erros de modelo não encontrado.)

Se você ainda não tiver uma referência ao objeto Model, provavelmente precisará obter o ID do modelo listando os modelos do seu projeto com um filtro. Por exemplo, para excluir todos os modelos marcados como "face_detector":

Pitão

# 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);