Tutorial: executar a inferência em uma tabela de objetos usando um modelo de classificação

Neste tutorial, mostramos como criar uma tabela de objetos com base nas imagens de um conjunto de dados público e, em seguida, executar a inferência nessa tabela de objetos usando o modelo ResNet 50.

O modelo ResNet 50

O modelo ResNet 50 analisa arquivos de imagem e gera um lote de vetores que representam a probabilidade de uma imagem pertencer à classe correspondente (logits). Para mais informações, consulte a seção Uso na página do modelo no TensorFlow Hub.

A entrada do modelo do ResNet 50 usa um tensor de DType = float32 no formato [-1, 224, 224, 3]. A saída é uma matriz de tensores de tf.float32 no formato[-1, 1024].

Permissões necessárias

  • Para criar o conjunto de dados, é preciso ter a permissão bigquery.datasets.create.
  • Para criar o recurso de conexão, você precisa das seguintes permissões:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para conceder permissões à conta de serviço da conexão, você precisa da seguinte permissão:

    • resourcemanager.projects.setIamPolicy
  • Para criar a tabela de objetos, é preciso ter as seguintes permissões:

    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • Para criar o bucket, você precisa da permissão storage.buckets.create.

  • Para fazer upload do modelo no Cloud Storage, você precisa das permissões storage.objects.create e storage.objects.get

  • Para carregar o modelo no BigQuery ML, você precisa das seguintes permissões:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Para executar a inferência, você precisa das seguintes permissões:

    • bigquery.tables.getData na tabela de objetos
    • bigquery.models.getData no modelo
    • bigquery.jobs.create

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

  • BigQuery: You incur storage costs for the object table you create in BigQuery.
  • BigQuery ML: You incur costs for the model you create and the inference you perform in BigQuery ML.
  • Cloud Storage: You incur costs for the objects you store in Cloud Storage.

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Para mais informações sobre preços de armazenamento do BigQuery, consulte Preços de armazenamento na documentação do BigQuery.

Para mais informações sobre preços do BigQuery ML, consulte Preços do BigQuery ML na documentação do BigQuery.

Consulte a página de preços do Cloud Storage para mais informações.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

Criar uma reserva

Para usar um modelo importado com uma tabela de objetos, é necessário criar uma reserva que use a edição Enterprise ou Enterprise Plus do BigQuery e, em seguida, criar uma atribuição de reserva que use o tipo de job QUERY.

Criar um conjunto de dados

Crie um conjunto de dados chamado resnet_inference_test:

SQL

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. No painel Editor, execute a seguinte instrução SQL:

    CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;

    Substitua PROJECT_ID pela ID do seu projeto.

bq

  1. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

  2. Execute o comando bq mk para criar o usuário.

    bq mk --dataset --location=us PROJECT_ID:resnet_inference_test

    Substitua PROJECT_ID pela ID do seu projeto.

Crie uma conexão

Crie uma conexão chamada lake-connection:

Console

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. Clique em Adicionar e em Origem de dados externa.

  3. Na lista Tipo de conexão, selecione BigLake e funções remotas (Recurso do Cloud).

  4. No campo ID da conexão, digite lake-connection.

  5. Clique em Criar conexão.

  6. No painel Informações da conexão, copie o valor do campo ID da conta de serviço e salve-o em algum lugar. Você precisa dessas informações para conceder permissões à conta de serviço da conexão.

bq

  1. No Cloud Shell, execute o comando bq mk para criar a conexão:

    bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \
    lake-connection
    
  2. Execute o comando bq show para recuperar informações sobre a conexão:

    bq show --connection us.lake-connection
    
  3. Na coluna properties, copie o valor da propriedade serviceAccountId e salve-o em algum lugars Você precisa dessas informações para conceder permissões à conta de serviço da conexão.

Crie um bucket do Cloud Storage

Crie um bucket do Cloud Storage para armazenar os arquivos de modelo.

Conceder permissões para a conta de serviço do portal

Console

  1. Acesse a página IAM e administrador.

    Acessar IAM e administrador

  2. Clique em Conceder acesso.

    A caixa de diálogo Adicionar principais é aberta.

  3. No campo Novos principais, digite o ID da conta de serviço que você copiou anteriormente.

  4. No campo Selecionar papel, selecione Cloud Storage e, em seguida, selecione Visualizador de objetos do Storage.

  5. Clique em Salvar.

gcloud

No Cloud Shell, execute este comando gcloud storage buckets add-iam-policy-binding:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:MEMBER \
--role=roles/storage.objectViewer

Substitua MEMBER pelo ID da conta de serviço que você copiou anteriormente. Substitua BUCKET_NAME pelo nome do bucket que você acabou de criar.

Para mais informações, consulte Adicionar um principal a uma política no nível do bucket.

Criar uma tabela de objetos

Crie uma tabela de objetos chamada vision_images com base nos arquivos de imagem no bucket gs://cloud-samples-data/vision públicos

SQL

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. No painel Editor, execute a seguinte instrução SQL:

    CREATE EXTERNAL TABLE resnet_inference_test.vision_images
    WITH CONNECTION `us.lake-connection`
    OPTIONS(
      object_metadata = 'SIMPLE',
      uris = ['gs://cloud-samples-data/vision/*.jpg']
    );

bq

No Cloud Shell, execute o comando bq mk para criar a conexão:

bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images

Faça o upload do modelo para o Cloud Storage.

Consiga os arquivos de modelo e disponibilize-os no Cloud Storage:

  1. Faça o download do modelo ResNet 50 para sua máquina local. Isso fornece um arquivo saved_model.pb e uma pasta variables para o modelo.
  2. Faça o upload dos arquivos saved_model.pb e variables para o bucket criado anteriormente.

Carregar o modelo no BigQuery ML

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. No painel Editor, execute a seguinte instrução SQL:

    CREATE MODEL `resnet_inference_test.resnet`
    OPTIONS(
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/*');

    Substitua BUCKET_NAME pelo nome do bucket que você acabou de criar.

Inspecionar o modelo

Inspecione o modelo enviado para ver quais são os campos de entrada e saída:

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda o projeto, expanda o conjunto de dados resnet_inference_test e expanda o nó Modelos.

  3. Clique no modelo resnet.

  4. No painel de modelo que é aberto, clique na guia Esquema.

  5. Confira a seção Rótulos. Isso identifica os campos que são gerados pelo modelo. Nesse caso, o valor do nome do campo é activation_49.

  6. Veja a seção Recursos. Isso identifica os campos que precisam ser inseridos no modelo. Faça referência a elas na instrução SELECT da função ML.DECODE_IMAGE. Nesse caso, o valor do nome do campo é input_1.

Executar inferência

Execute a inferência na tabela de objetos vision_images usando o modelo resnet:

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. No painel Editor, execute a seguinte instrução SQL:

    SELECT *
    FROM ML.PREDICT(
      MODEL `resnet_inference_test.resnet`,
      (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS input_1
      FROM resnet_inference_test.vision_images)
    );

    A resposta deve ficar assim:

    -------------------------------------------------------------------------------------------------------------------------------------
    | activation_49           | uri                                                                                           | input_1 |
    ------------------------------------------------------------------------------------------------------------------------------------
    | 1.0254175464297077e-07  | gs://cloud-samples-data/vision/automl_classification/flowers/daisy/21652746_cc379e0eea_m.jpg  | 0.0     |
    ------------------------------------------------------------------------------------------------------------------------------------
    | 2.1671139620593749e-06  |                                                                                               | 0.0     |
    --------------------------                                                                                               -----------
    | 8.346052027263795e-08   |                                                                                               | 0.0     |
    --------------------------                                                                                               -----------
    | 1.159310958342985e-08   |                                                                                               | 0.0     |
    ------------------------------------------------------------------------------------------------------------------------------------
    

Limpar

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.