Esegui l'inferenza sulle tabelle degli oggetti immagine
Questo documento descrive come utilizzare BigQuery ML per eseguire l'inferenza su tabelle di oggetti immagine.
Puoi eseguire l'inferenza sui dati immagine 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 l'istruzione CREATE MODEL.
Puoi creare il tuo modello o scaricarne uno da TensorFlow Hub.
Limitazioni
- L'utilizzo dei modelli importati di BigQuery ML con le 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 dimensioni inferiori a 20 MB.
- Avere un formato JPEG, PNG o BMP.
- Le dimensioni combinate dei file immagine associati alla tabella di oggetti devono essere inferiori a 1 TB.
- Per prestazioni ottimali di elenco e query, specifica un massimo di 10 URI di origine nell'opzione
urisdella tabella degli oggetti. Se specifichi più di 10 URI di bucket, il numero totale di file supportati dalla tabella di oggetti si riduce e le query potrebbero non riuscire con un errore di memoriaResources exceeded during query executionquando viene elencato un numero elevato di file. Se devi fare riferimento a più di 10 bucket, suddividili in più tabelle di oggetti. Il modello deve essere uno dei seguenti:
- Un modello TensorFlow o TensorFlow Lite in formato SavedModel.
- Un modello PyTorch in formato ONNX.
Il modello deve soddisfare i requisiti e le limitazioni di input descritti nell'istruzione
CREATE MODELper l'importazione di modelli TensorFlow.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
tf.float32con valori in[0, 1)o un tipo di datitf.uint8con valori in[0, 255). - Avere la forma
[batch_size, width, height, 3], dove:batch_sizedeve essere-1,Noneo1.widtheheightdevono essere maggiori di 0.
- Avere un tipo di dati
Il modello deve essere addestrato con immagini in uno dei seguenti spazi dei colori:
RGBHSVYIQYUVGRAYSCALE
Puoi utilizzare la funzione
ML.CONVERT_COLOR_SPACEper 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: esegui l'inferenza su una tabella di oggetti utilizzando un modello di classificazione.
- MobileNet V3. Per provare a utilizzare questo modello, consulta Tutorial: esegui l'inferenza su una tabella di oggetti utilizzando un modello di vettore di caratteristiche.
Autorizzazioni obbligatorie
- Per caricare il modello su Cloud Storage, devi disporre delle autorizzazioni
storage.objects.createestorage.objects.get. Per caricare il modello in BigQuery ML, devi disporre delle seguenti autorizzazioni:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.tables.getDatanella tabella degli oggettibigquery.models.getDatasul 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
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 role
(
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, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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 role
(
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, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Carica un modello su Cloud Storage
Per caricare un modello, segui questi passaggi:
- 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.pbe una cartellavariablesper il modello. - Se necessario, crea un bucket Cloud Storage.
- Carica gli artefatti del modello nel bucket.
Carica il modello in BigQuery ML
Il caricamento di un modello che funziona con le tabelle di oggetti immagine è lo stesso del caricamento di 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: il tuo 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:TENSORFLOWper un modello TensorFlowONNXper 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 output. Devi fare riferimento a questi campi quando esegui l'inferenza sulla tabella degli oggetti.
Per ispezionare un modello:
Vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.
Nel riquadro Explorer, espandi il progetto e fai clic su Set di dati.
Fai clic sul set di dati che contiene il modello.
Fai clic sulla scheda Modelli.
Nel riquadro del modello che si apre, fai clic sulla scheda Schema.
Guarda la sezione Etichette. Identifica i campi di output del modello.
Guarda la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Fai riferimento a questi elementi nell'istruzione
SELECTper 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 le immagini
Devi utilizzare la funzione ML.DECODE_IMAGE per convertire i byte dell'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 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_SPACEconverte le immagini con uno spazio dei coloriRGBin uno spazio dei colori diverso. - La funzione
ML.CONVERT_IMAGE_TYPEconverte i valori dei pixel restituiti dalla funzioneML.DECODE_IMAGEda numeri in virgola mobile a numeri interi con un intervallo di[0, 255). - La funzione
ML.RESIZE_IMAGEridimensiona le immagini.
Puoi utilizzarle come parte della funzione ML.PREDICT o eseguirle su una colonna della tabella contenente i dati immagine generati da ML.DECODE_IMAGE.
Esegui l'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 progetto del progetto che contiene il modello e la tabella di 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_IMAGEo da una colonna della tabella contenente i dati dell'immagine generati daML.DECODE_IMAGEo da altre funzioni di elaborazione delle immagini.MODEL_INPUT: il nome di un campo di immissione per il modello. Puoi trovare queste informazioni esaminando il modello e osservando i nomi dei campi nella sezione Caratteristiche.TABLE_NAME: il nome della tabella di oggetti.
Esempi
Esempio 1
L'esempio seguente utilizza la funzione ML.DECODE_IMAGE direttamente nella funzione ML.PREDICT. Restituisce i risultati dell'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 dei colori dell'immagine da RBG a YIQ. Mostra anche come utilizzare i campi della tabella degli oggetti per filtrare gli oggetti inclusi nell'inferenza.
Restituisce i risultati dell'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 della tabella, ma non sono stati elaborati ulteriormente. Utilizza ML.RESIZE_IMAGE e ML.CONVERT_IMAGE_TYPE nella funzione ML.PREDICT per elaborare i dati delle immagini. Restituisce i risultati dell'inferenza per tutte le immagini nella tabella delle immagini decodificate, per un modello con un campo di immissione 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 scritti in una colonna della tabella e pre-elaborati 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 immissione 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 un'immagine, f_img, e uno che prevede una stringa, f_txt. L'input dell'immagine proviene dalla tabella degli oggetti e l'input della stringa proviene da una tabella BigQuery standard 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 di 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 ad annotare un'immagine con la funzione
ML.ANNOTATE_IMAGE.