Esegui l'inferenza sulle tabelle di oggetti immagine
Questo documento descrive come utilizzare BigQuery ML per eseguire l'inferenza nelle tabelle di oggetti immagine.
Puoi eseguire l'inferenza sui dati delle immagini utilizzando una tabella di oggetti come input per la
funzione ML.PREDICT
.
Per farlo, devi prima scegliere un modello appropriato, caricarlo su
Cloud Storage e importarlo in BigQuery eseguendo
CREATE MODEL
.
Puoi creare il tuo modello o scaricarne uno da TensorFlow Hub.
Limitazioni
- L'utilizzo di modelli importati di BigQuery ML con tabelle di oggetti è supportato solo se utilizzi i prezzi basati sulla capacità tramite le prenotazioni. I prezzi on demand non sono supportati.
- I file immagine associati alla tabella degli oggetti devono soddisfare i seguenti requisiti:
- Avere una dimensione inferiore a 20 MB.
- Utilizza un formato JPEG, PNG o BMP.
- Le dimensioni combinate dei file immagine associati alla tabella degli oggetti devono inferiore a 1 TB.
Il modello deve essere uno dei seguenti:
- Un file TensorFlow o TensorFlow Lite in nel formato SavedModel.
- Un modello PyTorch in Formato ONNX.
Il modello deve soddisfare i requisiti di input e le limitazioni descritti in Input supportati.
Le dimensioni serializzate del modello devono essere inferiori a 450 MB.
La dimensione deserializzata (in memoria) del modello deve essere inferiore a 1000 MB
Il tensore di input del modello deve soddisfare i seguenti criteri:
- Avere un tipo di dati
tf.float32
con valori in[0, 1)
o avere un tipo di datitf.uint8
con valori in[0, 255)
. - Avere la forma
[batch_size, weight, height, 3]
, dove:batch_size
deve essere-1
,None
o1
.width
eheight
devono essere maggiori di 0.
- Avere un tipo di dati
Il modello deve essere addestrato con immagini in uno dei seguenti spazi di colore:
RGB
HSV
YIQ
YUV
GRAYSCALE
Puoi utilizzare lo Funzione
ML.CONVERT_COLOR_SPACE
per convertire le immagini di input nello spazio colore con cui è stato addestrato il modello.
Modelli di esempio
I seguenti modelli su TensorFlow Hub funzionano con BigQuery ML e le tabelle di oggetti immagine:
- ResNet 50. Per provare utilizzando questo modello, vedi Tutorial: esegui l'inferenza su una tabella di oggetti utilizzando un modello di classificazione.
- MobileNet V3. Per provare a utilizzare questo modello, vedi Tutorial: esegui l'inferenza su una tabella di oggetti utilizzando un modello di vettore di caratteristiche.
Autorizzazioni obbligatorie
- Per caricare il modello in Cloud Storage, è necessario
Autorizzazioni
storage.objects.create
estorage.objects.get
. Per caricare il modello in BigQuery ML, sono necessarie le seguenti autorizzazioni:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.tables.getData
nella tabella dell'oggettobigquery.models.getData
sul modellobigquery.jobs.create
Prima di iniziare
- 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.
Carica un modello in Cloud Storage
Per caricare un modello:
- Se hai creato il tuo modello, salvalo localmente. Se utilizzi un modello di TensorFlow Hub, scaricalo sulla tua macchina locale. Se utilizzi TensorFlow, dovresti ottenere un file
saved_model.pb
e una cartellavariables
per il modello. - Se necessario, crea un bucket Cloud Storage.
- Carica gli artefatti del modello nel bucket.
Carica il modello in BigQuery ML
Caricare un modello che funziona con le tabelle di oggetti immagine equivale a caricare un che funziona con i dati strutturati. Segui questi passaggi per caricare un modello BigQuery ML:
CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` OPTIONS( model_type = 'MODEL_TYPE', model_path = 'BUCKET_PATH');
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.DATASET_ID
: l'ID del set di dati da che contiene il modello.MODEL_NAME
: il nome del modello.MODEL_TYPE
: utilizza uno dei seguenti valori:TENSORFLOW
per un modello TensorFlowONNX
per un modello PyTorch in formato ONNX
BUCKET_PATH
: il percorso del bucket Cloud Storage contenente il modello, nel formato[gs://bucket_name/[folder_name/]*]
.
L'esempio seguente utilizza il progetto predefinito e carica un file TensorFlow
modello in BigQuery ML come my_vision_model
, utilizzando
saved_model.pb
file e variables
cartella da
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/*');
Ispeziona il modello
Puoi esaminare il modello caricato per vedere quali sono i suoi campi di input e output . Devi fare riferimento a questi campi quando esegui l'inferenza sull'oggetto tabella.
Per ispezionare un modello, segui questi passaggi:
Vai alla pagina BigQuery.
Nel riquadro Explorer, espandi il progetto, espandi la che contiene il modello ed espandi il nodo Modelli.
Fai clic sul modello.
Nel riquadro del modello visualizzato, fai clic sulla scheda Schema.
Guarda la sezione Etichette. Identifica i campi di output modello.
Esamina la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Puoi farne riferimento nell'istruzione
SELECT
per la funzioneML.DECODE_IMAGE
.
Per un'ispezione più dettagliata di un modello TensorFlow, ad esempio
determinare la forma dell'input del modello,
installa TensorFlow
e utilizza
Comando saved_model_cli show
.
Pre-elabora le immagini
Devi utilizzare
Funzione ML.DECODE_IMAGE
per convertire i byte di immagine in una rappresentazione ARRAY
multidimensionale. Puoi
utilizzare l'output di ML.DECODE_IMAGE
direttamente in una funzione ML.PREDICT
,
oppure puoi scrivere i risultati di ML.DECODE_IMAGE
in una colonna di una tabella e
fare riferimento a quella colonna quando chiami ML.PREDICT
.
L'esempio seguente scrive l'output della funzione ML.DECODE_IMAGE
in
una tabella:
CREATE OR REPLACE TABLE mydataset.mytable AS ( SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM mydataset.object_table );
Usa le seguenti funzioni per elaborare ulteriormente le immagini in modo che funzionino con il modello:
- La
Funzione
ML.CONVERT_COLOR_SPACE
converte le immagini con uno spazio coloreRGB
in uno spazio colore diverso. - La funzione
ML.CONVERT_IMAGE_TYPE
converte i valori dei pixel in uscita dalla funzioneML.DECODE_IMAGE
da numeri in virgola mobile a numeri interi con un intervallo di[0, 255)
. - La funzione
ML.RESIZE_IMAGE
consente di ridimensionare le immagini.
Puoi utilizzarle come parte della funzione ML.PREDICT
o eseguirle su una
colonna della tabella contenente i dati di immagine generati da ML.DECODE_IMAGE
.
Esegui inferenza
Dopo aver caricato un modello appropriato e, facoltativamente, pre-elaborato i dati delle immagini, puoi eseguire l'inferenza sui dati delle immagini.
Per eseguire l'inferenza:
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) );
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene la tabella del modello e dell'oggetto.DATASET_ID
: l'ID del set di dati che contiene il modello e la tabella degli oggetti.MODEL_NAME
: il nome del modello.IMAGE_DATA
: i dati dell'immagine, rappresentati dall'output della funzioneML.DECODE_IMAGE
o da una colonna della tabella contenente i dati dell'immagine generati daML.DECODE_IMAGE
o da altre funzioni di elaborazione delle immagini.MODEL_INPUT
: il nome di un campo di input per il modello. Puoi trovare queste informazioni ispezzionando il modello e controllando i nomi dei campi nella sezione Funzionalità.TABLE_NAME
: il nome della tabella dell'oggetto.
Esempi
Esempio 1
L'esempio seguente utilizza la funzione ML.DECODE_IMAGE
direttamente nel
Funzione ML.PREDICT
. Restituisce i risultati dell'inferenza per tutte le immagini nella tabella degli oggetti, per un modello con un campo di input input
e un campo di output 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`) );
Esempio 2
L'esempio seguente utilizza la funzione ML.DECODE_IMAGE
direttamente nella funzione ML.PREDICT
e la funzione ML.CONVERT_COLOR_SPACE
nella funzione ML.PREDICT
per convertire lo spazio colore dell'immagine da RBG
a YIQ
. Mostra inoltre come
utilizza i campi della tabella degli oggetti per filtrare gli oggetti inclusi nell'inferenza.
Restituisce i risultati di inferenza per tutte le immagini JPG nel
tabella di oggetti, per un modello con un campo di immissione input
e un valore
campo di 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') );
Esempio 3
L'esempio seguente utilizza i risultati di ML.DECODE_IMAGE
che sono stati
vengono scritte in una colonna della tabella, ma non vengono ulteriormente elaborate. Utilizza
ML.RESIZE_IMAGE
e ML.CONVERT_IMAGE_TYPE
nella funzione ML.PREDICT
per
per elaborare i dati dell'immagine. Restituisce i risultati dell'inferenza per tutte le immagini nella tabella delle immagini decodificate, per un modello con un campo di input input
e un campo di output feature
.
Crea la tabella delle immagini decodificate:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM `my_dataset.object_table`);
Esegui l'inferenza sulla tabella delle immagini decodificate:
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`) );
Esempio 4
L'esempio seguente utilizza i risultati di ML.DECODE_IMAGE
che sono stati
scritte in una colonna di tabella e pre-elaborate utilizzando
ML.RESIZE_IMAGE
. Restituisce i risultati dell'inferenza per tutte le immagini nella tabella delle immagini decodificate, per un modello con un campo di input input
e un campo di output feature
.
Crea la tabella:
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`);
Esegui l'inferenza sulla tabella delle immagini decodificate:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, decoded_image AS input FROM `my_dataset.decoded_images`) );
Esempio 5
L'esempio seguente utilizza la funzione ML.DECODE_IMAGE
direttamente nella funzione ML.PREDICT
. In questo esempio, il modello ha un campo di output
embeddings
e due campi di immissione: uno che prevede l'inserimento di
f_img
e una che prevede una stringa, f_txt
. L'immagine
l'input proviene dalla tabella degli oggetti e l'input della stringa proviene da una
tabella BigQuery standard unita alla tabella dell'oggetto
utilizzando la colonna 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) );
Passaggi successivi
- Scopri come analizzare le tabelle degli oggetti utilizzando le funzioni remote.
- Prova a eseguire l'inferenza in una tabella di oggetti utilizzando un modello di vettore di funzionalità.
- Prova a eseguire l'inferenza su una tabella di oggetti utilizzando un modello di classificazione.
- Prova ad analizzare una tabella di oggetti utilizzando una funzione remota.
- Prova ad annotare un'immagine con la funzione
ML.ANNOTATE_IMAGE
.