Tutorial: execute a inferência numa tabela de objetos usando um modelo de classificação

Este tutorial mostra 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 com o modelo ResNet 50.

O modelo ResNet 50

O modelo ResNet 50 analisa ficheiros 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 secção Utilização na página do modelo no TensorFlow Hub.

A entrada do modelo ResNet 50 recebe 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].

Autorizações necessárias

  • Para criar o conjunto de dados, precisa da autorização bigquery.datasets.create.
  • Para criar o recurso de associação, precisa das seguintes autorizações:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para conceder autorizações à conta de serviço da associação, precisa da seguinte autorização:

    • resourcemanager.projects.setIamPolicy
  • Para criar a tabela de objetos, precisa das seguintes autorizações:

    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • Para criar o contentor, precisa da autorização storage.buckets.create.

  • Para carregar o modelo para o Cloud Storage, precisa das autorizações storage.objects.create e storage.objects.get.

  • Para carregar o modelo para o BigQuery ML, precisa das seguintes autorizações:

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

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

Custos

Neste documento, usa 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 custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

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

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

Para mais informações sobre os preços do Cloud Storage, consulte a página de preços do Cloud Storage.

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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Crie uma reserva

    Para usar um modelo importado com uma tabela de objetos, tem de 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 tarefa QUERY.

    Crie um conjunto de dados

    Crie um conjunto de dados com o nome resnet_inference_test:

    SQL

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

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

      CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;

      Substitua PROJECT_ID pelo ID do seu projeto.

    bq

    1. Na Google Cloud consola, ative o Cloud Shell.

      Ative o Cloud Shell

    2. Execute o comando bq mk para criar o conjunto de dados:

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

      Substitua PROJECT_ID pelo ID do seu projeto.

    Crie uma associação

    Crie uma ligação com o nome lake-connection:

    Consola

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

    2. No painel Explorador, clique em Adicionar dados.

      É apresentada a caixa de diálogo Adicionar dados.

    3. No painel Filtrar por, na secção Tipo de origem de dados, selecione Bases de dados.

      Em alternativa, no campo Pesquisar origens de dados, pode introduzir Vertex AI.

    4. Na secção Origens de dados em destaque, clique em Vertex AI.

    5. Clique no cartão da solução Modelos da Vertex AI: federação do BigQuery.

    6. Na lista Tipo de ligação, selecione Modelos remotos, funções remotas e BigLake (recurso da nuvem) da Vertex AI.

    7. No campo ID de associação, escreva lake-connection.

    8. Clique em Criar associação.

    9. No painel Informações de ligação, copie o valor do campo ID da conta de serviço e guarde-o nalgum lugar. Precisa destas informações para conceder autorizações à conta de serviço da ligação.

    bq

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

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

      bq show --connection us.lake-connection
      
    3. Na coluna properties, copie o valor da propriedade serviceAccountId e guarde-o nalgum lugar. Precisa destas informações para conceder autorizações à conta de serviço da associação.

    Crie um contentor do Cloud Storage

    Crie um contentor do Cloud Storage para conter os ficheiros do modelo.

    Conceda autorizações à conta de serviço da associação

    Consola

    1. Aceda à página IAM e administrador.

      Aceda a IAM e administração

    2. Clique em Conceder acesso.

      É apresentada a caixa de diálogo Adicionar responsáveis.

    3. No campo Novos membros, introduza o ID da conta de serviço que copiou anteriormente.

    4. No campo Selecionar uma função, selecione Cloud Storage e, de seguida, selecione Visualizador de objetos de armazenamento.

    5. Clique em Guardar.

    gcloud

    No Cloud Shell, execute o 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 copiou anteriormente. Substitua BUCKET_NAME pelo nome do contentor que criou anteriormente.

    Para mais informações, consulte o artigo Adicione um principal a uma política ao nível do contentor.

    Crie uma tabela de objetos

    Crie uma tabela de objetos denominada vision_images com base nos ficheiros de imagem no contentor público gs://cloud-samples-data/vision:

    SQL

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

    2. No painel Editor, execute a seguinte declaraçã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 ligação:

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

    Carregue o modelo para o Cloud Storage

    Obtenha os ficheiros do modelo e disponibilize-os no Cloud Storage:

    1. Transfira o modelo ResNet 50 para a sua máquina local. Isto dá-lhe um ficheiro saved_model.pb e uma pasta variables para o modelo.
    2. Carregue o ficheiro saved_model.pb e a pasta variables para o contentor que criou anteriormente.

    Carregue o modelo no BigQuery ML

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

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

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

      Substitua BUCKET_NAME pelo nome do contentor que criou anteriormente.

    Inspecione o modelo

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

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

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

    3. Clique no modelo resnet.

    4. No painel do modelo apresentado, clique no separador Esquema.

    5. Consulte a secção Etiquetas. Isto identifica os campos que são gerados pelo modelo. Neste caso, o valor do nome do campo é activation_49.

    6. Consulte a secção Funcionalidades. Isto identifica os campos que têm de ser introduzidos no modelo. Faz referência a elas na declaração SELECT para a função ML.DECODE_IMAGE. Neste caso, o valor do nome do campo é input_1.

    Executar inferência

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

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

    2. No painel Editor, execute a seguinte declaraçã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)
      );

      Os resultados devem ter um aspeto semelhante ao seguinte:

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