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ó é possível quando você usa preços baseados em capacidade por meio de reservas. O preço sob demanda não é compatível.
- 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 MODEL
para 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.float32
com valores em[0, 1)
ou um tipo de dados detf.uint8
com valores em[0, 255)
. - Ter o formato
[batch_size, weight, height, 3]
, em que:- Precisa ser
batch_size
,-1
,None
, ou1
. width
eheight
precisam 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:
RGB
HSV
YIQ
YUV
GRAYSCALE
É possível usar a função
ML.CONVERT_COLOR_SPACE
para 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.create
estorage.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 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Fazer upload de um modelo para o Cloud Storage
Siga estas etapas para fazer upload de um modelo:
- 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.pb
e uma pastavariables
para o modelo. - Se necessário, crie um bucket do Cloud Storage.
- Faça o upload dos artefatos do modelo no bucket:
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:
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:TENSORFLOW
para um modelo do TensorFlowONNX
para 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/]*]
.
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:
Acessar a página do BigQuery.
No painel Explorer, expanda seu projeto, expanda o conjunto de dados que contém o modelo e o nó Modelos.
Clique no modelo.
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
SELECT
da funçãoML.DECODE_IMAGE
.
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:
- A
função
ML.CONVERT_COLOR_SPACE
converte imagens com um espaço de corRGB
em um espaço de cor diferente. - A função
ML.CONVERT_IMAGE_TYPE
converte os valores de pixel de saída pela funçãoML.DECODE_IMAGE
de números de ponto flutuante em números inteiros com um intervalo de[0, 255)
. - A função
ML.RESIZE_IMAGE
redimensiona imagens.
É 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:
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_IMAGE
ou por uma coluna da tabela que contém a saída de dados de imagem porML.DECODE_IMAGE
ou 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.
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) );
A seguir
- 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
.