Tutorial: eseguire l'inferenza su una tabella degli oggetti utilizzando un modello di vettore delle caratteristiche
Questo tutorial mostra come creare una tabella degli oggetti basata sulle immagini del set di dati flowers e quindi eseguire l'inferenza sulla tabella degli oggetti utilizzando il modello MobileNet V3.
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 feature 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 somiglianza coseno per raggruppare immagini simili.
L'input del modello MobileNet V3 assume un tensore di DType
tf.float32
a forma di [-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.create
bigquery.connections.get
Per concedere le autorizzazioni all'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.create
bigquery.tables.update
bigquery.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.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 dell'oggettobigquery.models.getData
sul modellobigquery.jobs.create
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- BigQuery: ti vengono addebitati dei costi di archiviazione per la tabella degli oggetti creata in BigQuery.
- BigQuery ML: ti vengono addebitati dei costi per il modello creato e per l'inferenza eseguita in BigQuery ML.
- Cloud Storage: ti vengono addebitati dei costi per gli oggetti archiviati in Cloud Storage.
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Per ulteriori informazioni sui prezzi dell'archiviazione di BigQuery, consulta Prezzi dell'archiviazione nella documentazione di BigQuery.
Per ulteriori informazioni sui prezzi di BigQuery ML, consulta Prezzi di BigQuery ML nella documentazione di BigQuery.
Per ulteriori informazioni sui prezzi di Cloud Storage, consulta la pagina Prezzi di Cloud Storage.
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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API BigQuery and BigQuery Connection API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API BigQuery and BigQuery Connection API.
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_ID
con l'ID progetto.
bq
Nella console Google Cloud, attiva Cloud Shell.
Esegui il comando
bq mk
per creare il set di dati:bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
Sostituisci
PROJECT_ID
con l'ID progetto.
Creazione di una connessione
Crea una connessione denominata lake-connection
:
Console
Vai alla pagina BigQuery.
Fai clic su
Aggiungi dati e poi su Origine dati esterna.Nell'elenco Tipo di connessione, seleziona BigLake e funzioni remote (Cloud Resource).
Nel campo ID connessione, digita
lake-connection
.Fai clic su Crea connessione.
Nel riquadro Explorer, espandi il progetto, espandi il nodo Connessioni esterne e seleziona la connessione
us.lake-connection
.Nel riquadro Informazioni sulla connessione, copia il valore dal campo ID account di servizio. Queste informazioni sono necessarie per concedere l'autorizzazione all'account di servizio della connessione nel bucket Cloud Storage che creerai nel passaggio successivo.
bq
In Cloud Shell, esegui il comando
bq mk
per creare la connessione:bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
Esegui il comando
bq show
per recuperare le informazioni sulla connessione:bq show --connection us.lake-connection
Dalla colonna
properties
, copia il valore della proprietàserviceAccountId
e salvalo da qualche parte. Queste informazioni sono necessarie per concedere le autorizzazioni all'account di servizio della connessione.
crea un bucket Cloud Storage
- Crea un bucket Cloud Storage.
- Crea due cartelle
nel bucket, una denominata
mobilenet
per i file del modello e una denominataflowers
per il set di dati.
Concedi le autorizzazioni all'account di servizio della connessione
Console
Vai alla pagina IAM e amministrazione.
Fai clic su Concedi l'accesso.
Viene visualizzata 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.
gsutil
In Cloud Shell, esegui il comando gsutil iam ch
:
gsutil iam ch serviceAccount:MEMBER:objectViewer gs://BUCKET_NAME
Sostituisci MEMBER
con l'ID dell'account di servizio che hai
copiato in precedenza. Sostituisci BUCKET_NAME
con il nome del bucket che hai creato in precedenza.
Per saperne di più, 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 "Fiori" sulla tua macchina locale.
- Decomprimi il file
flower_photos.tgz
. - Carica la cartella
flower_photos
nella cartellaflowers
del bucket che hai creato in precedenza. - Una volta completato il caricamento, elimina il file
LICENSE.txt
nella cartellaflower_photos
.
Crea una tabella di oggetti
Crea una tabella oggetto 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_NAME
con il nome del bucket che hai creato in precedenza.
bq
In Cloud Shell, esegui il comando bq mk
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. In questo modo avrai un file
saved_model.pb
e una cartellavariables
per il modello. - Carica il file
saved_model.pb
e la cartellavariables
nella cartellamobilenet
del 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_NAME
con il nome del bucket che hai creato in precedenza.
Ispeziona il modello
Esamina il modello caricato per vedere quali sono i suoi campi di input e di output:
Vai alla pagina BigQuery.
Nel riquadro Explorer, espandi il progetto, espandi il set di dati
mobilenet_inference_test
, quindi espandi il nodo Modelli.Fai clic sul modello
mobilenet
.Nel riquadro del modello che si apre, fai clic sulla scheda Schema.
Esamina la sezione Etichette. Questo identifica i campi di output dal modello. In questo caso, il valore del nome del campo è
feature_vector
.Esamina la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Devi farvi riferimento nell'istruzione
SELECT
per la funzioneML.DECODE_IMAGE
. In questo caso, il valore del nome del campo èinputs
.
Esegui inferenza
Esegui l'inferenza nella tabella dell'oggetto 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 | —-------------------------------------------------------------------------------------------------------------
Esegui la pulizia
- Nella console Google Cloud, 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 del progetto e fai clic su Chiudi per eliminare il progetto.