Tutorial: esegui l'inferenza su una tabella di oggetti utilizzando un modello di classificazione
Questo tutorial mostra come creare una tabella di oggetti basata sulle immagini di un set di dati pubblico e poi eseguire l'inferenza su questa tabella di oggetti utilizzando il modello ResNet 50.
Il modello ResNet 50
Il modello ResNet 50 analizza i file immagine e restituisce un batch di vettori che rappresentano la probabilità che un'immagine appartenga alla classe corrispondente (logits). Per ulteriori informazioni, consulta la sezione Utilizzo nella pagina TensorFlow Hub del modello.
L'input del modello ResNet 50 accetta un tensore di
DType =
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 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
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 Prezzi di BigQuery ML nella documentazione di BigQuery.
Per maggiori informazioni sui prezzi di Cloud Storage, consulta la pagina Prezzi di Cloud Storage.
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.
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
(
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
(
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. Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;
Sostituisci
PROJECT_IDcon l'ID progetto.Nella console Google Cloud , attiva Cloud Shell.
Esegui il comando
bq mkper creare il set di dati:bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
Sostituisci
PROJECT_IDcon l'ID progetto.Vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Explorer:

Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro a sinistra per aprirlo.
Nel riquadro Explorer, fai clic su Aggiungi dati.
Si apre la finestra di dialogo Aggiungi dati.
Nel riquadro Filtra per, seleziona Database nella sezione Tipo di origine dati.
In alternativa, nel campo Cerca origini dati, puoi inserire
Vertex AI.Nella sezione Origini dati in evidenza, fai clic su Vertex AI.
Fai clic sulla scheda della soluzione Vertex AI Models: BigQuery Federation.
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 Informazioni sulla connessione, copia il valore dal campo ID account di servizio e salvalo da qualche parte. Queste informazioni sono necessarie per concedere le autorizzazioni al account di servizio della connessione.
In Cloud Shell, esegui il comando
bq mkper creare la connessione:bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connectionEsegui il comando
bq showper recuperare informazioni sulla connessione:bq show --connection us.lake-connectionDalla colonna
properties, copia il valore della proprietàserviceAccountIde salvalo da qualche parte. Hai bisogno di queste informazioni per concedere le autorizzazioni al account di servizio della connessione.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 Visualizzatore oggetti Storage.
Fai clic su Salva.
Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
CREATE EXTERNAL TABLE resnet_inference_test.vision_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://cloud-samples-data/vision/*.jpg'] );
- Scarica
il modello ResNet 50 sulla tua macchina locale. In questo modo otterrai un file
saved_model.pbe una cartellavariablesper il modello. - Carica il file
saved_model.pbe la cartellavariablesnel bucket che hai creato in precedenza. Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
CREATE MODEL `resnet_inference_test.resnet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/*');
Sostituisci
BUCKET_NAMEcon il nome del bucket che hai creato in precedenza.Vai alla pagina BigQuery.
Nel riquadro a sinistra, fai clic su Explorer:

Nel riquadro Explorer, espandi il progetto, fai clic su Set di dati e poi sul set di dati
resnet_inference_test.Vai alla scheda Modelli.
Fai clic sul modello
resnet.Nel riquadro del modello che si apre, fai clic sulla scheda Schema.
Esamina la sezione Etichette. Identifica i campi restituiti dal modello. In questo caso, il valore del nome del campo è
activation_49.Guarda la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Fai riferimento a questi valori nell'istruzione
SELECTper la funzioneML.DECODE_IMAGE. In questo caso, il valore del nome del campo èinput_1.Vai alla pagina BigQuery.
Nel riquadro Editor, esegui la seguente istruzione SQL:
SELECT * FROM ML.PREDICT( MODEL `resnet_inference_test.resnet`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS input_1 FROM resnet_inference_test.vision_images) );
I risultati dovrebbero essere simili ai seguenti:
------------------------------------------------------------------------------------------------------------------------------------- | activation_49 | uri | input_1 | —------------------------------------------------------------------------------------------------------------------------------------ | 1.0254175464297077e-07 | gs://cloud-samples-data/vision/automl_classification/flowers/daisy/21652746_cc379e0eea_m.jpg | 0.0 | —------------------------------------------------------------------------------------------------------------------------------------ | 2.1671139620593749e-06 | | 0.0 | —-------------------------- ----------- | 8.346052027263795e-08 | | 0.0 | —-------------------------- ----------- | 1.159310958342985e-08 | | 0.0 | —------------------------------------------------------------------------------------------------------------------------------------- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Crea una prenotazione
Per utilizzare un
modello importato
con una tabella di oggetti, devi
creare una prenotazione
che utilizzi BigQuery
Enterprise o Enterprise Plus,
e poi
creare un'assegnazione di prenotazione
che utilizzi il tipo di job QUERY.
Crea un set di dati
Crea un set di dati denominato resnet_inference_test:
SQL
bq
Crea una connessione
Crea una connessione denominata lake-connection:
Console
bq
Crea un bucket Cloud Storage
Crea un bucket Cloud Storage per contenere i file del modello.
Concedi le autorizzazioni al account di servizio della connessione
Console
gcloud
In Cloud Shell, esegui il
comando gcloud storage buckets add-iam-policy-binding:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:MEMBER \ --role=roles/storage.objectViewer
Sostituisci MEMBER con l'ID 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 principal a un criterio a livello di bucket.
Creare una tabella degli oggetti
Crea una tabella degli oggetti denominata vision_images in base ai
file immagine nel bucket pubblico gs://cloud-samples-data/vision:
SQL
bq
In Cloud Shell, esegui il
comando bq mk
per creare la connessione:
bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images
Carica il modello su Cloud Storage
Recupera i file del modello e rendili disponibili in Cloud Storage:
Carica il modello in BigQuery ML
Ispezionare il modello
Esamina il modello caricato per vedere quali sono i suoi campi di input e output:
Esegui inferenza
Esegui l'inferenza sulla tabella degli oggetti vision_images utilizzando il modello resnet: