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
estorage.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 objetosbigquery.models.getData
no modelobigquery.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.
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
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. Aceda à página do BigQuery.
No painel Editor, execute a seguinte declaração SQL:
CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;
Substitua
PROJECT_ID
pelo ID do seu projeto.Na Google Cloud consola, ative o Cloud Shell.
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.Aceda à página do BigQuery.
No painel Explorador, clique em
Adicionar dados.É apresentada a caixa de diálogo Adicionar dados.
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
.Na secção Origens de dados em destaque, clique em Vertex AI.
Clique no cartão da solução Modelos da Vertex AI: federação do BigQuery.
Na lista Tipo de ligação, selecione Modelos remotos, funções remotas e BigLake (recurso da nuvem) da Vertex AI.
No campo ID de associação, escreva
lake-connection
.Clique em Criar associação.
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.
No Cloud Shell, execute o comando
bq mk
para criar a ligação:bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
Execute o comando
bq show
para obter informações sobre a associação:bq show --connection us.lake-connection
Na coluna
properties
, copie o valor da propriedadeserviceAccountId
e guarde-o nalgum lugar. Precisa destas informações para conceder autorizações à conta de serviço da associação.Aceda à página IAM e administrador.
Clique em Conceder acesso.
É apresentada a caixa de diálogo Adicionar responsáveis.
No campo Novos membros, introduza o ID da conta de serviço que copiou anteriormente.
No campo Selecionar uma função, selecione Cloud Storage e, de seguida, selecione Visualizador de objetos de armazenamento.
Clique em Guardar.
Aceda à página do BigQuery.
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'] );
- Transfira
o modelo ResNet 50 para a sua máquina local. Isto dá-lhe um ficheiro
saved_model.pb
e uma pastavariables
para o modelo. - Carregue o ficheiro
saved_model.pb
e a pastavariables
para o contentor que criou anteriormente. Aceda à página do BigQuery.
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.Aceda à página do BigQuery.
No painel Explorador, expanda o projeto, expanda o conjunto de dados
resnet_inference_test
e, de seguida, expanda o nó Modelos.Clique no modelo
resnet
.No painel do modelo apresentado, clique no separador Esquema.
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
.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çãoML.DECODE_IMAGE
. Neste caso, o valor do nome do campo éinput_1
.Aceda à página do BigQuery.
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 | —------------------------------------------------------------------------------------------------------------------------------------
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
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
bq
Crie uma associação
Crie uma ligação com o nome lake-connection
:
Consola
bq
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
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
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:
Carregue o modelo no BigQuery ML
Inspecione o modelo
Inspecione o modelo carregado para ver quais são os respetivos campos de entrada e saída:
Executar inferência
Execute a inferência na tabela de objetos vision_images
com o modelo resnet
: