Tutorial: executar a inferência em uma tabela de objetos usando um modelo vetorial de atributo

Neste tutorial, mostramos como criar uma tabela de objetos com base nas imagens do conjunto de dados de flores e como executar a inferência nessa tabela usando o Modelo do MobileNet V3.

Modelo do MobileNet V3

O modelo MobileNet V3 analisa arquivos de imagem e retorna uma matriz de vetor de atributo. A matriz de vetor de recurso é uma lista de elementos numéricos que descrevem as características das imagens analisadas. Cada vetor de atributo descreve um espaço de recurso multidimensional e fornece as coordenadas da imagem nesse espaço. É possível usar as informações de vetores do recurso para uma imagem para classificá-la ainda mais, por exemplo, usando a semelhança de cossenos para agrupar imagens semelhantes.

A entrada do modelo MobileNet V3 usa um tensor de DType tf.float32 na forma [-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 conjunto de dados e 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: incorrem em custos de armazenamento para a tabela que você cria no BigQuery.
  • BigQuery ML: incorrem em custos para o modelo que você cria e na inferência que realiza no BigQuery ML.
  • Cloud Storage: incorrem em custos para os objetos que você armazena no 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. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs BigQuery and BigQuery Connection API.

    Ative as APIs

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative as APIs BigQuery and BigQuery Connection API.

    Ative as APIs

crie um conjunto de dados

Crie um conjunto de dados chamado mobilenet_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.mobilenet_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 dados e em Fonte 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 Explorer, expanda seu projeto, expanda o nó Conexões externas e selecione a conexão us.lake-connection.

  7. No painel Informações de conexão, copie o valor do campo ID da conta de serviço. Você precisa dessas informações para conceder permissão à conta de serviço da conexão no bucket do Cloud Storage criado na próxima etapa.

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

  1. Crie um bucket do Cloud Storage.
  2. Crie duas pastas no bucket, uma chamada mobilenet para os arquivos de modelo e outra chamada flowers para o conjunto de dados.

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

gsutil

No Cloud Shell, execute este comando gsutil iam ch:

gsutil iam ch serviceAccount:MEMBER:objectViewer gs://BUCKET_NAME

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.

Fazer upload do conjunto de dados para o Cloud Storage

Consiga os arquivos de conjunto de dados e disponibilize-os no Cloud Storage:

  1. Faça o download do conjunto de dados de flores na sua máquina local.
  2. Descompacte o arquivo flower_photos.tgz.
  3. Faça upload da pasta flower_photos para a pasta flowers no bucket criado anteriormente.
  4. Quando o upload for concluído, exclua o arquivo LICENSE.txt na pasta flower_photos.

Criar uma tabela de objetos

Crie uma tabela de objetos chamada sample_images com base no conjunto de dados de flores enviado:

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 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 bucket que você acabou de criar.

bq

No Cloud Shell, execute o comando bq mk para criar a conexã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 bucket que você acabou de criar.

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 MobileNet V3 para sua máquina local. Isso fornece um arquivo saved_model.pb e uma pasta variables para o modelo.
  2. Faça upload do arquivo saved_model.pb e da pasta variables para a pasta mobilenet no 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 `mobilenet_inference_test.mobilenet`
    OPTIONS(
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/mobilenet/*');
    

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

  3. Clique no modelo mobilenet.

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

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

Executar inferência

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

  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 `mobilenet_inference_test.mobilenet`,
      (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS inputs
      FROM mobilenet_inference_test.sample_images)
    );
    

    A resposta deve ficar assim:

    --------------------------------------------------------------------------------------------------------------
    | 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. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.