Executar inferência em tabelas de objetos de imagem
Este documento descreve como usar o BigQuery ML para executar a inferência em tabelas de objetos de imagens.
Pode executar a inferência em dados de imagens usando uma tabela de objetos como entrada para a função ML.PREDICT
.
Para tal, tem de escolher primeiro um modelo adequado, carregá-lo para o Cloud Storage e importá-lo para o BigQuery executando a declaração CREATE MODEL
.
Pode criar o seu próprio modelo ou transferir um do TensorFlow Hub.
Limitações
- A utilização de modelos importados do BigQuery ML com tabelas de objetos só é suportada quando usa preços baseados na capacidade através de reservas. Os preços a pedido não são suportados.
- Os ficheiros de imagem associados à tabela de objetos têm de cumprir os seguintes
requisitos:
- Têm um tamanho inferior a 20 MB.
- Ter um formato JPEG, PNG ou BMP.
- O tamanho combinado dos ficheiros de imagem associados à tabela de objetos tem de ser inferior a 1 TB.
O modelo tem de ser um dos seguintes:
- Um modelo do TensorFlow ou do TensorFlow Lite no formato SavedModel.
- Um modelo do PyTorch no formato ONNX.
O modelo tem de cumprir os requisitos de entrada e as limitações descritas na declaração
CREATE MODEL
para importar modelos do TensorFlow.O tamanho serializado do modelo tem de ser inferior a 450 MB.
O tamanho desserializado (na memória) do modelo tem de ser inferior a 1000 MB.
O tensor de entrada do modelo tem de cumprir os seguintes critérios:
- Ter um tipo de dados de
tf.float32
com valores em[0, 1)
ou ter um tipo de dados detf.uint8
com valores em[0, 255)
. - Ter a forma
[batch_size, weight, height, 3]
, em que:batch_size
tem de ser-1
,None
ou1
.width
eheight
têm de ser superiores a 0.
- Ter um tipo de dados de
O modelo tem de ser preparado com imagens num dos seguintes espaços de cores:
RGB
HSV
YIQ
YUV
GRAYSCALE
Pode usar a função
ML.CONVERT_COLOR_SPACE
para converter imagens de entrada no espaço de cores com o qual o modelo foi preparado.
Exemplos de modelos
Os seguintes modelos no TensorFlow Hub funcionam com o BigQuery ML e as tabelas de objetos de imagem:
- ResNet 50. Para experimentar usar este modelo, consulte o Tutorial: execute a inferência numa tabela de objetos usando um modelo de classificação.
- MobileNet V3. Para experimentar usar este modelo, consulte o Tutorial: execute a inferência numa tabela de objetos usando um modelo de vetor de caraterísticas.
Autorizações necessárias
- 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
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. - Se criou o seu próprio modelo, guarde-o localmente. Se estiver a usar um modelo do TensorFlow Hub, transfira-o para o seu computador local. Se estiver a usar o TensorFlow, deve obter um ficheiro
saved_model.pb
e uma pastavariables
para o modelo. - Se necessário, crie um contentor do Cloud Storage.
- Carregue os artefactos do modelo para o contentor.
PROJECT_ID
: o ID do seu projeto.DATASET_ID
: o ID do conjunto de dados que vai conter o modelo.MODEL_NAME
: o nome do modelo.MODEL_TYPE
: use um dos seguintes valores:TENSORFLOW
para um modelo do TensorFlowONNX
para um modelo PyTorch no formato ONNX
BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém o modelo, no formato[gs://bucket_name/[folder_name/]*]
.Aceda à página do BigQuery.
No painel Explorador, expanda o projeto, expanda o conjunto de dados que contém o modelo e, de seguida, expanda o nó Modelos.
Clique no modelo.
No painel do modelo apresentado, clique no separador Esquema.
Consulte a secção Etiquetas. Isto identifica os campos que são gerados pelo modelo.
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
.- A função
ML.CONVERT_COLOR_SPACE
converte imagens com um espaço de coresRGB
num espaço de cores diferente. - A função
ML.CONVERT_IMAGE_TYPE
converte os valores de píxeis gerados pela funçãoML.DECODE_IMAGE
de números de vírgula flutuante em números inteiros com um intervalo de[0, 255)
. - A função
ML.RESIZE_IMAGE
redimensiona imagens. PROJECT_ID
: o ID do projeto do projeto que contém o modelo e a tabela de objetos.DATASET_ID
: o ID do conjunto de dados que contém o modelo e a tabela de objetos.MODEL_NAME
: o nome do modelo.IMAGE_DATA
: os dados da imagem, representados pela saída da funçãoML.DECODE_IMAGE
ou por uma coluna da tabela que contenha dados de imagem gerados pela funçãoML.DECODE_IMAGE
ou outras funções de processamento de imagens.MODEL_INPUT
: o nome de um campo de entrada para o modelo.Pode encontrar estas informações inspecionando o modelo e consultando os nomes dos campos na secção Funcionalidades.TABLE_NAME
: o nome da tabela de objetos.- Saiba como analisar tabelas de objetos através de funções remotas.
- Experimente executar a inferência numa tabela de objetos através de um modelo de vetor de caraterísticas.
- Experimente executar a inferência numa tabela de objetos usando um modelo de classificação.
- Experimente analisar uma tabela de objetos através de uma função remota.
- Experimente anotar uma imagem com a função
ML.ANNOTATE_IMAGE
.
Carregue um modelo para o Cloud Storage
Siga estes passos para carregar um modelo:
Carregue o modelo no BigQuery ML
Carregar um modelo que funcione com tabelas de objetos de imagens é o mesmo que carregar um modelo que funcione com dados estruturados. Siga estes passos para carregar um modelo no BigQuery ML:
CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` OPTIONS( model_type = 'MODEL_TYPE', model_path = 'BUCKET_PATH');
Substitua o seguinte:
O exemplo seguinte usa o projeto predefinido e carrega um modelo do TensorFlow para o BigQuery ML como my_vision_model
, usando o ficheiro saved_model.pb
e a pasta variables
de gs://my_bucket/my_model_folder
:
CREATE MODEL `my_dataset.my_vision_model` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://my_bucket/my_model_folder/*');
Inspecione o modelo
Pode inspecionar o modelo carregado para ver os respetivos campos de entrada e saída. Tem de fazer referência a estes campos quando executar a inferência na tabela de objetos.
Siga estes passos para inspecionar um modelo:
Para uma inspeção mais detalhada de um modelo do TensorFlow, por exemplo, para determinar a forma da entrada do modelo, instale o TensorFlow e use o comando saved_model_cli show
.
Pré-processe imagens
Tem de usar a função ML.DECODE_IMAGE
para converter bytes de imagens numa representação ARRAY
multidimensional. Pode usar o resultado de ML.DECODE_IMAGE
diretamente numa função ML.PREDICT
ou escrever os resultados de ML.DECODE_IMAGE
numa coluna da tabela e fazer referência a essa coluna quando chamar ML.PREDICT
.
O exemplo seguinte escreve o resultado da função ML.DECODE_IMAGE
numa tabela:
CREATE OR REPLACE TABLE mydataset.mytable AS ( SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM mydataset.object_table );
Use as seguintes funções para processar ainda mais as imagens de modo que funcionem com o seu modelo:
Pode usá-las como parte da função ML.PREDICT
ou executá-las numa coluna de tabela que contenha dados de imagens gerados por ML.DECODE_IMAGE
.
Executar inferência
Depois de carregar um modelo adequado e, opcionalmente, pré-processar os dados de imagem, pode executar a inferência nos dados de imagem.
Para executar a inferência:
SELECT * FROM ML.PREDICT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, (SELECT [other columns from the object table,] IMAGE_DATA AS MODEL_INPUT FROM PROJECT_ID.DATASET_ID.TABLE_NAME) );
Substitua o seguinte:
Exemplos
Exemplo 1
O exemplo seguinte usa a função ML.DECODE_IMAGE
diretamente na função ML.PREDICT
. Devolve os resultados da inferência para todas as imagens na tabela de objetos, para um modelo com um campo de entrada de input
e um campo de saída de feature
:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 480, 480, FALSE) AS input FROM `my_dataset.object_table`) );
Exemplo 2
O exemplo seguinte usa a função ML.DECODE_IMAGE
diretamente na função ML.PREDICT
e usa a função ML.CONVERT_COLOR_SPACE
na função ML.PREDICT
para converter o espaço de cores da imagem de RBG
para YIQ
. Também mostra como usar campos da tabela de objetos para filtrar os objetos incluídos na inferência.
Devolve os resultados da inferência para todas as imagens JPG na tabela de objetos, para um modelo com um campo de entrada de input
e um campo de saída de feature
:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, ML.CONVERT_COLOR_SPACE(ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 280, TRUE), 'YIQ') AS input FROM `my_dataset.object_table` WHERE content_type = 'image/jpeg') );
Exemplo 3
O exemplo seguinte usa resultados de ML.DECODE_IMAGE
que foram
escritos numa coluna de tabela, mas não foram processados mais. Usa ML.RESIZE_IMAGE
e ML.CONVERT_IMAGE_TYPE
na função ML.PREDICT
para processar os dados de imagem. Devolve os resultados da inferência para todas as imagens na tabela de imagens descodificadas, para um modelo com um campo de entrada de input
e um campo de saída de feature
.
Crie a tabela de imagens descodificadas:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM `my_dataset.object_table`);
Executar inferência na tabela de imagens descodificadas:
SELECT * FROM ML.PREDICT( MODEL`my_dataset.vision_model`, (SELECT uri, ML.CONVERT_IMAGE_TYPE(ML.RESIZE_IMAGE(decoded_image, 480, 480, FALSE)) AS input FROM `my_dataset.decoded_images`) );
Exemplo 4
O exemplo seguinte usa resultados de ML.DECODE_IMAGE
que foram
escritos numa coluna da tabela e pré-processados com
ML.RESIZE_IMAGE
. Devolve os resultados da inferência para todas as imagens na tabela de imagens descodificadas, para um modelo com um campo de entrada de input
e um campo de saída de feature
.
Crie a tabela:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data) 480, 480, FALSE) AS decoded_image FROM `my_dataset.object_table`);
Executar inferência na tabela de imagens descodificadas:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, decoded_image AS input FROM `my_dataset.decoded_images`) );
Exemplo 5
O exemplo seguinte usa a função ML.DECODE_IMAGE
diretamente na função ML.PREDICT
. Neste exemplo, o modelo tem um campo de saída de embeddings
e dois campos de entrada: um que espera uma imagem, f_img
, e outro que espera uma string, f_txt
. A entrada de imagem provém da tabela de objetos e a entrada de string provém de uma tabela padrão do BigQuery que é unida à tabela de objetos através da coluna uri
.
SELECT * FROM ML.PREDICT( MODEL `my_dataset.mixed_model`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(my_dataset.my_object_table.data), 224, 224, FALSE) AS f_img, my_dataset.image_description.description AS f_txt FROM `my_dataset.object_table` JOIN `my_dataset.image_description` ON object_table.uri = image_description.uri) );