Esegui l'inferenza sulle tabelle degli oggetti immagine
Questo documento descrive come utilizzare BigQuery ML per eseguire l'inferenza sulle tabelle di oggetti immagine.
Panoramica
Puoi eseguire l'inferenza sui dati di immagine utilizzando una tabella di oggetti come input per la funzione ML.PREDICT
.
Per farlo, devi prima scegliere un modello appropriato, caricarlo in Cloud Storage e importarlo in BigQuery eseguendo l'istruzione CREATE MODEL
.
Puoi creare un modello personalizzato o scaricarne uno da TensorFlow Hub.
Limitazioni
- BigQuery ML per le tabelle di oggetti è supportato solo quando si utilizzano prezzi basati sulla capacità tramite prenotazioni. I prezzi on demand non sono supportati.
- I file immagine associati alla tabella degli oggetti devono soddisfare i seguenti requisiti:
- Hanno dimensioni inferiori a 20 MB.
- Avere un formato JPEG, PNG o BMP.
- Le dimensioni combinate dei file immagine associati alla tabella degli oggetti devono essere inferiori a 1 TB.
Il modello deve essere uno dei seguenti:
- Un modello TensorFlow o TensorFlow Lite (in anteprima) in formato SavedModel.
- Un modello PyTorch in formato ONNX. (in anteprima)
Il modello deve soddisfare i requisiti e le limitazioni di input descritti in Input supportati.
Le dimensioni serializzate del modello devono essere inferiori a 450 MB.
Le dimensioni deserializzate (in memoria) del modello devono essere inferiori a 1000 MB.
Il tensore di input del modello deve soddisfare i seguenti criteri:
- Avere un tipo di dati di
tf.float32
con valori in[0, 1)
o avere un tipo di dati ditf.uint8
con valori in[0, 255)
. - Hanno 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 di
Il modello deve essere addestrato con immagini in uno dei seguenti spazi colore:
RGB
HSV
YIQ
YUV
GRAYSCALE
Puoi utilizzare la funzione
ML.CONVERT_COLOR_SPACE
per convertire le immagini di input nello spazio dei colori 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 a utilizzare questo modello, consulta Tutorial: eseguire l'inferenza su una tabella di oggetti utilizzando un modello di classificazione.
- MobileNet V3. Per provare a utilizzare questo modello, consulta Tutorial: eseguire l'inferenza su una tabella di oggetti utilizzando un modello di vettore delle caratteristiche.
Autorizzazioni obbligatorie
- Per caricare il modello in Cloud Storage, devi disporre delle autorizzazioni
storage.objects.create
estorage.objects.get
. Per caricare il modello in BigQuery ML, devi disporre delle 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 degli oggettibigquery.models.getData
sul modellobigquery.jobs.create
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API BigQuery and BigQuery Connection API.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API BigQuery and BigQuery Connection API.
Carica un modello in Cloud Storage
Per caricare un modello, procedi nel seguente modo:
- Se hai creato un tuo modello, salvalo localmente. Se stai utilizzando un modello da 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 tabelle di oggetti immagine equivale a caricare un modello che funziona con i dati strutturati. Segui questi passaggi per caricare un modello in BigQuery ML:
CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` OPTIONS( model_type = 'MODEL_TYPE', model_path = 'BUCKET_PATH');
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto.DATASET_ID
: l'ID del set di dati che conterrà 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 che contiene il modello, nel formato[gs://bucket_name/[folder_name/]*]
.
L'esempio seguente utilizza il progetto predefinito e carica un modello TensorFlow in BigQuery ML come my_vision_model
, utilizzando il file saved_model.pb
e la cartella variables
di 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 di output. Devi fare riferimento a questi campi quando esegui l'inferenza nella tabella degli oggetti.
Per ispezionare un modello, procedi nel seguente modo:
Vai alla pagina BigQuery.
Nel riquadro Explorer, espandi il progetto, espandi il set di dati che contiene il modello, quindi espandi il nodo Modelli.
Fai clic sul modello.
Nel riquadro del modello che si apre, fai clic sulla scheda Schema.
Esamina la sezione Etichette. Identifica i campi dell'output del modello.
Consulta la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Puoi farvi riferimento nell'istruzione
SELECT
per la funzioneML.DECODE_IMAGE
.
Per un'ispezione più dettagliata di un modello TensorFlow, ad esempio per determinare la forma dell'input del modello, installa TensorFlow e utilizza il comando saved_model_cli show
.
Pre-elabora immagini
Devi utilizzare la funzione ML.DECODE_IMAGE
per convertire i byte immagine in una rappresentazione ARRAY
multidimensionale. Puoi utilizzare l'output ML.DECODE_IMAGE
direttamente in una funzione ML.PREDICT
oppure scrivere i risultati da ML.DECODE_IMAGE
in una colonna della 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 );
Utilizza le seguenti funzioni per elaborare ulteriormente le immagini in modo che funzionino con il tuo 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 restituiti dalla funzioneML.DECODE_IMAGE
da numeri in virgola mobile a numeri interi con un intervallo di[0, 255)
. - La funzione
ML.RESIZE_IMAGE
ridimensiona le immagini.
Puoi utilizzarle come parte della funzione ML.PREDICT
o eseguirle in una colonna della tabella contenente l'output dei dati immagine di ML.DECODE_IMAGE
.
Esegui inferenza
Dopo aver caricato un modello appropriato e, facoltativamente, pre-elaborato i dati dell'immagine, puoi eseguire l'inferenza sui dati dell'immagine.
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 il modello e la tabella degli oggetti.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 di tabella contenente l'output dei dati immagine da parte diML.DECODE_IMAGE
o altre funzioni di elaborazione delle immagini.MODEL_INPUT
: il nome di un campo di input per il modello.Puoi trovare queste informazioni controllando il modello e osservando 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 nella
funzione ML.PREDICT
. Restituisce i risultati di inferenza per tutte le immagini nella tabella degli oggetti per un modello con un campo di immissione 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
. Illustra inoltre come utilizzare i campi della tabella degli oggetti per filtrare gli oggetti inclusi nell'inferenza.
Restituisce i risultati di inferenza per tutte le immagini JPG nella tabella degli oggetti, per un modello con un campo di immissione input
e un campo di output 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 scritti in una colonna di tabella, ma che non sono stati elaborati ulteriormente. Utilizza ML.RESIZE_IMAGE
e ML.CONVERT_IMAGE_TYPE
nella funzione ML.PREDICT
per elaborare i dati dell'immagine. Restituisce i risultati di 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 nella 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 scritti in una colonna di tabella e pre-elaborati utilizzando ML.RESIZE_IMAGE
. Restituisce i risultati di 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 nella 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 input: uno che prevede un'immagine, f_img
, e l'altro che prevede una stringa, f_txt
. L'input dell'immagine proviene dalla tabella degli oggetti, mentre l'input della stringa proviene da una tabella BigQuery standard che viene unita alla tabella degli oggetti 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 su una tabella di oggetti utilizzando un modello di vettore di caratteristiche.
- 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 a effettuare previsioni con modelli remoti su Vertex AI.