Tutorial: esegui l'inferenza su una tabella degli oggetti utilizzando un modello di vettori di caratteristiche
Questo tutorial mostra come creare una tabella degli oggetti basata sulle immagini dal set di dati dei fiori, e poi eseguire l'inferenza su questa tabella degli oggetti utilizzando il modello MobileNet V3.
Il modello MobileNet V3
Il modello MobileNet V3 analizza i file immagine e restituisce un array di vettori di caratteristiche. L'array di vettori di caratteristiche è un elenco di elementi numerici che descrivono le caratteristiche delle immagini analizzate. Ogni vettore di caratteristiche descrive uno spazio di caratteristiche multidimensionale e fornisce le coordinate dell'immagine in questo spazio. Puoi utilizzare le informazioni sui vettori di caratteristiche di un'immagine per classificarla ulteriormente, ad esempio utilizzando la similarità del coseno per raggruppare immagini simili.
L'input del modello MobileNet V3 accetta un tensore di
DType
tf.float32 nella forma [-1, 224, 224, 3]. L'output è un array di tensori di tf.float32 nella forma [-1, 1024].
Autorizzazioni obbligatorie
- Per creare il set di dati, devi disporre dell'autorizzazione
bigquery.datasets.create. Per creare la risorsa di connessione, devi disporre delle seguenti autorizzazioni:
bigquery.connections.createbigquery.connections.get
Per concedere le autorizzazioni al account di servizio della connessione, devi disporre della seguente autorizzazione:
resourcemanager.projects.setIamPolicy
Per creare la tabella degli oggetti, devi disporre delle seguenti autorizzazioni:
bigquery.tables.createbigquery.tables.updatebigquery.connections.delegate
Per creare il bucket, devi disporre dell'autorizzazione
storage.buckets.create.Per caricare il set di dati e il modello in 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.getDatanel modellobigquery.jobs.create
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- BigQuery: You incur storage costs for the object table you create in BigQuery.
- BigQuery ML: You incur costs for the model you create and the inference you perform in BigQuery ML.
- Cloud Storage: You incur costs for the objects you store in Cloud Storage.
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Per ulteriori informazioni sui prezzi di archiviazione di BigQuery, consulta la sezione Prezzi di archiviazione nella documentazione di BigQuery.
Per ulteriori informazioni sui prezzi di BigQuery ML, consulta la sezione Prezzi di BigQuery ML in nella documentazione di BigQuery.
Per maggiori informazioni sui prezzi di Cloud Storage, consulta la pagina dei prezzi di Cloud Storage.
Prima di iniziare
- Accedi al tuo Google Cloud account. 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.
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 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.
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.
Crea una prenotazione
Per utilizzare un
modello importato
con una tabella degli oggetti, devi
creare una prenotazione
che utilizzi l'edizione BigQuery
Enterprise o Enterprise Plus,
quindi
creare un'assegnazione di prenotazione
che utilizzi il tipo di prestazione QUERY.
Crea un set di dati
Crea un set di dati denominato mobilenet_inference_test:
SQL
Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;
Sostituisci
PROJECT_IDcon l'ID progetto.
bq
Nella Google Cloud console, attiva Cloud Shell.
Esegui il
bq mkcomando per creare il set di dati:bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
Sostituisci
PROJECT_IDcon l'ID progetto.
Crea una connessione
Crea una connessione denominata lake-connection:
Console
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 a sinistra per aprirlo.
Nel riquadro Spazio di esplorazione, fai clic su Aggiungi dati.
Si apre la finestra di dialogo Aggiungi dati.
Nel riquadro Filtra per, nella sezione Tipo di origine dati, seleziona Database.
In alternativa, nel campo Cerca origini dati puoi inserire
Vertex AI.Nella sezione Origini dati in primo piano, fai clic su Vertex AI.
Fai clic sulla scheda della soluzione Modelli Vertex AI: federazione BigQuery.
Nell'elenco Tipo di connessione, seleziona Modelli remoti di Vertex AI, funzioni remote, BigLake e Spanner (risorsa Cloud).
Nel campo ID connessione, digita
lake-connection.Fai clic su Crea connessione.`
Nel riquadro Spazio di esplorazione , espandi il progetto, fai clic su Connessioni e seleziona la
us.lake-connectionconnessione.Nel riquadro Informazioni sulla connessione, copia il valore dal campo ID account di servizio. Queste informazioni sono necessarie per concedere l'autorizzazione al account di servizio della connessione nel bucket Cloud Storage che crei nel passaggio successivo.
bq
In Cloud Shell, esegui il
bq mkcomando per creare la connessione:bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connectionEsegui il
bq showcomando per recuperare le informazioni sulla connessione:bq show --connection us.lake-connectionDalla colonna
properties, copia il valore della proprietàserviceAccountIde salvalo da qualche parte. Queste informazioni sono necessarie per concedere le autorizzazioni al account di servizio della connessione.
Crea un bucket Cloud Storage
- Crea un bucket Cloud Storage.
- Crea due cartelle
nel bucket, una denominata
mobilenetper i file del modello e una denominataflowersper il set di dati.
Concedi le autorizzazioni al account di servizio della connessione
Console
Vai alla pagina IAM e amministrazione.
Fai clic su Concedi l'accesso.
Si apre la finestra di dialogo Aggiungi entità.
Nel campo Nuove entità, inserisci l'ID account di servizio che hai copiato in precedenza.
Nel campo Seleziona un ruolo , seleziona Cloud Storage e poi seleziona Visualizzatore oggetti Storage.
Fai clic su Salva.
gcloud
In Cloud Shell, esegui il
gcloud storage buckets add-iam-policy-binding comando:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:MEMBER \ --role=roles/storage.objectViewer
Sostituisci MEMBER con l'ID del account di servizio che hai copiato in precedenza. Sostituisci BUCKET_NAME con il nome del bucket che hai creato in precedenza.
Per maggiori informazioni, consulta Aggiungere un'entità a un criterio a livello di bucket.
Carica il set di dati in Cloud Storage
Recupera i file del set di dati e rendili disponibili in Cloud Storage:
- Scarica il set di dati dei fiori sulla tua macchina locale.
- Decomprimi il file
flower_photos.tgz. - Carica la cartella
flower_photosnella cartellaflowersdel bucket che hai creato in precedenza. - Al termine del caricamento, elimina il file
LICENSE.txtnella cartellaflower_photos.
Crea una tabella degli oggetti
Crea una tabella degli oggetti denominata sample_images basata sul set di dati dei fiori che hai caricato:
SQL
Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
CREATE EXTERNAL TABLE mobilenet_inference_test.sample_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET_NAME/flowers/*']);
Sostituisci
BUCKET_NAMEcon il nome del bucket che hai creato in precedenza.
bq
In Cloud Shell, esegui il
bq mk comando
per creare la connessione:
bq mk --table \ --external_table_definition='gs://BUCKET_NAME/flowers/*@us.lake-connection' \ --object_metadata=SIMPLE \ mobilenet_inference_test.sample_images
Sostituisci BUCKET_NAME con il nome del bucket che hai creato in precedenza.
Carica il modello in Cloud Storage
Recupera i file del modello e rendili disponibili in Cloud Storage:
- Scarica
il modello MobileNet V3 sulla tua macchina locale. Verranno creati un file
saved_model.pbe una cartellavariablesper il modello. - Carica il file
saved_model.pbe la cartellavariablesnella cartellamobilenetdel bucket che hai creato in precedenza.
Carica il modello in BigQuery ML
Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
CREATE MODEL `mobilenet_inference_test.mobilenet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/mobilenet/*');
Sostituisci
BUCKET_NAMEcon il nome del bucket che hai creato in precedenza.
Ispeziona il modello
Ispeziona il modello caricato per vedere quali sono i campi di input e output:
Vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

Nel riquadro Spazio di esplorazione, espandi il progetto, fai clic su Set di dati e poi sul set di dati
mobilenet_inference_test.Vai alla scheda Modelli.
Fai clic sul modello
mobilenet.Nel riquadro del modello che si apre, fai clic sulla scheda Schema.
Esamina la sezione Etichette. Questa sezione identifica i campi di output del modello. In questo caso, il valore del nome del campo è
feature_vector.Esamina la sezione Caratteristiche. Questa sezione identifica i campi che devono essere inseriti nel modello. Fai riferimento a questi campi nell'istruzione
SELECTper la funzioneML.DECODE_IMAGE. In questo caso, il valore del nome del campo èinputs.
Esegui l'inferenza
Esegui l'inferenza sulla tabella degli oggetti sample_images utilizzando il modello mobilenet:
Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
SELECT * FROM ML.PREDICT( MODEL `mobilenet_inference_test.mobilenet`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS inputs FROM mobilenet_inference_test.sample_images) );
I risultati dovrebbero essere simili ai seguenti:
-------------------------------------------------------------------------------------------------------------- | feature_vector | uri | inputs | —------------------------------------------------------------------------------------------------------------- | 0.850297749042511 | gs://mybucket/flowers/dandelion/3844111216_742ea491a0.jpg | 0.29019609093666077 | —------------------------------------------------------------------------------------------------------------- | -0.27427938580513 | | 0.31372550129890442 | —------------------------- ------------------------ | -0.23189745843410492 | | 0.039215687662363052 | —------------------------- ------------------------ | -0.058292809873819351 | | 0.29985997080802917 | —-------------------------------------------------------------------------------------------------------------
Libera spazio
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.