Tutorial: execute a inferência numa tabela de objetos usando um modelo de vetor de caraterísticas

Este tutorial mostra como criar uma tabela de objetos com base nas imagens do conjunto de dados de flores e, em seguida, executar a inferência nessa tabela de objetos usando o modelo MobileNet V3.

O modelo MobileNet V3

O modelo MobileNet V3 analisa ficheiros de imagem e devolve uma matriz de vetores de caraterísticas. A matriz de vetores de caraterísticas é uma lista de elementos numéricos que descrevem as caraterísticas das imagens analisadas. Cada vetor de caraterísticas descreve um espaço de caraterísticas multidimensional e fornece as coordenadas da imagem neste espaço. Pode usar as informações vetoriais de uma imagem para classificar ainda mais a imagem, por exemplo, usando a semelhança de cossenos para agrupar imagens semelhantes.

A entrada do modelo MobileNet V3 recebe um tensor de DType tf.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 conjunto de dados e 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 mobilenet_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.mobilenet_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 Explorador, expanda o seu projeto, expanda o nó Ligações externas e selecione a ligação us.lake-connection.

    10. No painel Informações de ligação, copie o valor do campo ID da conta de serviço. Precisa destas informações para conceder autorização à conta de serviço da associação no contentor do Cloud Storage que cria no passo seguinte.

    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

    1. Crie um contentor do Cloud Storage.
    2. Crie duas pastas no contentor, uma com o nome mobilenet para os ficheiros do modelo e outra com o nome flowers para o conjunto de dados.

    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.

    Carregue o conjunto de dados para o Cloud Storage

    Obtenha os ficheiros do conjunto de dados e disponibilize-os no Cloud Storage:

    1. Transfira o conjunto de dados de flores para a sua máquina local.
    2. Descomprima o ficheiro flower_photos.tgz.
    3. Carregue a pasta flower_photos para a pasta flowers no contentor que criou anteriormente.
    4. Quando o carregamento estiver concluído, elimine o ficheiro LICENSE.txt na pasta flower_photos.

    Crie uma tabela de objetos

    Crie uma tabela de objetos denominada sample_images com base no conjunto de dados de flores que carregou:

    SQL

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

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

      CREATE EXTERNAL TABLE mobilenet_inference_test.sample_images
      WITH CONNECTION `us.lake-connection`
      OPTIONS(
        object_metadata = 'SIMPLE',
        uris = ['gs://BUCKET_NAME/flowers/*']);

      Substitua BUCKET_NAME pelo nome do contentor que criou anteriormente.

    bq

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

    bq mk --table \
    --external_table_definition='gs://BUCKET_NAME/flowers/*@us.lake-connection' \
    --object_metadata=SIMPLE \
    mobilenet_inference_test.sample_images

    Substitua BUCKET_NAME pelo nome do contentor que criou anteriormente.

    Carregue o modelo para o Cloud Storage

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

    1. Transfira o modelo MobileNet V3 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 a pasta mobilenet no 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 `mobilenet_inference_test.mobilenet`
      OPTIONS(
        model_type = 'TENSORFLOW',
        model_path = 'gs://BUCKET_NAME/mobilenet/*');

      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 mobilenet_inference_test e, de seguida, expanda o nó Modelos.

    3. Clique no modelo mobilenet.

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

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

    Executar inferência

    Execute a inferência na tabela de objetos sample_images com o modelo mobilenet:

    1. Aceda à página do BigQuery.

      Aceda ao BigQuery

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

      SELECT *
      FROM ML.PREDICT(
        MODEL `mobilenet_inference_test.mobilenet`,
        (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS inputs
        FROM mobilenet_inference_test.sample_images)
      );

      Os resultados devem ter um aspeto semelhante ao seguinte:

      --------------------------------------------------------------------------------------------------------------
      | feature_vector         | uri                                                        | inputs               |
      -------------------------------------------------------------------------------------------------------------
      | 0.850297749042511      | gs://mybucket/flowers/dandelion/3844111216_742ea491a0.jpg  | 0.29019609093666077  |
      -------------------------------------------------------------------------------------------------------------
      | -0.27427938580513      |                                                            | 0.31372550129890442  |
      -------------------------                                                            ------------------------
      | -0.23189745843410492   |                                                            | 0.039215687662363052 |
      -------------------------                                                            ------------------------
      | -0.058292809873819351  |                                                            | 0.29985997080802917  |
      -------------------------------------------------------------------------------------------------------------
      

    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.