Executar inferência em tabelas de objetos de imagem
Neste documento, descrevemos como usar o BigQuery ML para executar inferência em tabelas de objetos de imagem.
Execute a inferência em dados de imagem usando uma tabela de objetos como entrada para a
função ML.PREDICT.
Para fazer isso, primeiro escolha um modelo apropriado, faça upload dele para o Cloud Storage e importe-o para o BigQuery executando a instrução CREATE MODEL.
É possível criar seu próprio modelo ou fazer o download
de um do TensorFlow Hub.
Limitações
- O uso de modelos importados do BigQuery ML com tabelas de objetos só é compatível com preços baseados em capacidade por meio de reservas. Os preços sob demanda não são compatíveis.
- Os arquivos de imagem associados à tabela de objetos precisam atender aos seguintes requisitos:
- têm menos de 20 MB;
- Ter um formato JPEG, PNG ou BMP.
- O tamanho combinado dos arquivos de imagem associados à tabela de objetos precisa ser menor que 1 TB.
O modelo precisa ser um dos seguintes:
- Um modelo do TensorFlow ou do TensorFlow Lite no formato SavedModel.
- um modelo PyTorch no formato ONNX
O modelo precisa atender aos requisitos e limitações de entrada descritos na instrução
CREATE MODELpara importar modelos do TensorFlow.O tamanho serializado do modelo precisa ser inferior a 450 MB.
O tamanho desserializado (na memória) do modelo precisa ser menor que 1.000 MB.
O tensor de entrada do modelo precisa atender aos seguintes critérios:
- Ter um tipo de dados de
tf.float32com valores em[0, 1)ou um tipo de dados detf.uint8com valores em[0, 255). - Ter o formato
[batch_size, weight, height, 3], em que:- Precisa ser
batch_size,-1,None, ou1. widtheheightprecisam ser maiores que 0.
- Precisa ser
- Ter um tipo de dados de
O modelo precisa ser treinado com imagens em um dos seguintes espaços de cor:
RGBHSVYIQYUVGRAYSCALE
É possível usar a função
ML.CONVERT_COLOR_SPACEpara converter imagens de entrada no espaço de cores com que o modelo foi treinado.
Exemplos de modelos
Os seguintes modelos no TensorFlow Hub funcionam com o BigQuery ML e tabelas de objetos de imagem:
- ResNet 50. Para tentar usar esse modelo, consulte Tutorial: executar inferência em uma tabela de objetos usando um modelo de classificação.
- MobileNet V3. Para tentar usar esse modelo, consulte Tutorial: executar inferência em uma tabela de objetos usando um modelo vetorial de recurso.
Permissões necessárias
- Para fazer o upload do modelo para o Cloud Storage, você precisa das
permissões
storage.objects.createestorage.objects.get. Para carregar o modelo no BigQuery ML, você precisa das seguintes permissões:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Para executar a inferência, você precisa das seguintes permissões:
bigquery.tables.getDatana tabela de objetosbigquery.models.getDatano 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.createpermission. 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.enablepermission. 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.createpermission. 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.enablepermission. Learn how to grant roles. - Se você criou seu próprio modelo, salve-o localmente. Se você estiver usando um modelo do TensorFlow Hub, faça o download dele na sua máquina local. Se você estiver usando o TensorFlow, ele terá um arquivo
saved_model.pbe uma pastavariablespara o modelo. - Se necessário, crie um bucket do Cloud Storage.
- Faça o upload dos artefatos do modelo no bucket:
PROJECT_ID: o ID do projeto.DATASET_ID: o ID do conjunto de dados para conter o modelo.MODEL_NAME: o nome do modeloMODEL_TYPE: Use um dos seguintes valores:TENSORFLOWpara um modelo do TensorFlowONNXpara um modelo PyTorch no formato ONNX
BUCKET_PATH: o caminho para o bucket do Cloud Storage que contém o modelo, no formato[gs://bucket_name/[folder_name/]*].Acessar a página do BigQuery.
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
No painel Explorer, expanda o projeto e clique em Conjuntos de dados.
Clique no conjunto de dados que contém seu modelo.
Clique na guia Modelos.
No painel de modelo que é aberto, clique na guia Esquema.
Confira a seção Rótulos. Isso identifica os campos que são gerados pelo modelo.
Confira a seção Recursos. Isso identifica os campos que precisam ser inseridos no modelo. Faça referência a elas na instrução
SELECTda funçãoML.DECODE_IMAGE.- A
função
ML.CONVERT_COLOR_SPACEconverte imagens com um espaço de corRGBem um espaço de cor diferente. - A função
ML.CONVERT_IMAGE_TYPEconverte os valores de pixel de saída pela funçãoML.DECODE_IMAGEde números de ponto flutuante em números inteiros com um intervalo de[0, 255). - A função
ML.RESIZE_IMAGEredimensiona imagens. PROJECT_ID: o ID 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 modeloIMAGE_DATA: os dados da imagem, representados pela saída da funçãoML.DECODE_IMAGEou por uma coluna da tabela que contém a saída de dados de imagem porML.DECODE_IMAGEou outras funções de processamento de imagem.MODEL_INPUT: o nome de um campo de entrada para o modelo. É possível encontrar essa informação inspecionando o modelo e observando os nomes dos campos na seção Recursos.TABLE_NAME: o nome da tabela de objetos.- Saiba como analisar tabelas de objetos usando funções remotas.
- Tente executar a inferência em uma tabela de objetos usando um modelo vetorial de recurso.
- Tente executar a inferência em uma tabela de objetos usando um modelo de classificação.
- Tente analisar uma tabela de objetos usando uma função remota.
- Tente anotar uma imagem com a função
ML.ANNOTATE_IMAGE.
Fazer upload de um modelo para o Cloud Storage
Siga estas etapas para fazer upload de um modelo:
Carregar o modelo no BigQuery ML
Carregar um modelo que funciona com tabelas de objetos de imagem é o mesmo que carregar um modelo que funciona com dados estruturados. Siga estas etapas 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 exemplo a seguir usa o projeto padrão e carrega um modelo do TensorFlow no
BigQuery ML como my_vision_model, usando o arquivo 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/*');
Inspecionar o modelo
É possível inspecionar o modelo enviado para conferir quais são os campos de entrada e saída. Você precisa fazer referência a esses campos ao executar a inferência na tabela de objetos.
Siga estas etapas para inspecionar um modelo:
Para uma inspeção mais detalhada de um modelo TensorFlow, por exemplo, para determinar o formato
da entrada do modelo,
instale o TensorFlow
e use o
comando saved_model_cli show.
Pré-processar imagens
Use a função ML.DECODE_IMAGE para converter bytes de imagem em uma representação ARRAY multidimensional. É possível usar a saída ML.DECODE_IMAGE diretamente em uma função ML.PREDICT ou gravar os resultados de ML.DECODE_IMAGE em uma coluna da tabela e referenciar essa coluna ao chamar ML.PREDICT.
O exemplo a seguir grava a saída da função ML.DECODE_IMAGE em uma 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 para que elas funcionem com seu modelo:
É possível usá-las como parte da função ML.PREDICT ou executá-las em uma coluna da tabela que contém a saída de dados de imagem de ML.DECODE_IMAGE.
Executar inferência
Depois de carregar um modelo apropriado e, como opção, pré-processar os dados da imagem, é possível executar a inferência nos dados da imagem.
Para executar a inferência, faça o seguinte:
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:
Examples
Exemplo 1
O exemplo a seguir usa a função ML.DECODE_IMAGE diretamente na função ML.PREDICT. Ele retorna os resultados de inferência de 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 a seguir usa a função ML.DECODE_IMAGE diretamente na função ML.PREDICT e a função ML.CONVERT_COLOR_SPACE na função ML.PREDICT para converter o espaço de cor da imagem de RBG para YIQ. Ele também mostra como usar os campos da tabela de objetos para filtrar os objetos incluídos na inferência.
Ele retorna os resultados de inferência de 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 a seguir usa resultados de ML.DECODE_IMAGE que foram gravados em uma coluna da tabela, mas não foram processados. Ele usa ML.RESIZE_IMAGE e ML.CONVERT_IMAGE_TYPE na função ML.PREDICT para processar os dados da imagem. Ele retorna os resultados de inferência de todas as imagens na tabela de imagens decodificadas para um modelo com um campo de entrada de input e um campo de saída de feature.
Crie a tabela de imagens decodificadas:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM `my_dataset.object_table`);
Execute inferência na tabela de imagens decodificadas:
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 a seguir usa resultados de ML.DECODE_IMAGE que foram gravados em uma coluna da tabela e pré-processados usando ML.RESIZE_IMAGE. Ele retorna os resultados de inferência de todas as imagens na tabela de imagens decodificadas 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`);
Execute inferência na tabela de imagens decodificadas:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, decoded_image AS input FROM `my_dataset.decoded_images`) );
Exemplo 5
O exemplo a seguir usa a função ML.DECODE_IMAGE diretamente na função ML.PREDICT. No exemplo a seguir, o modelo tem um campo de saída 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 vem da tabela de objetos, e a entrada de string vem de uma
tabela padrão do BigQuery associada à tabela de objetos
usando a 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) );