Tutorial: esegui l'inferenza su una tabella di oggetti utilizzando un modello di vettore di caratteristiche

Questo tutorial mostra come creare una tabella di oggetti basata sulle immagini dal set di dati flowers, ed esegui l'inferenza sulla tabella dell'oggetto utilizzando Modello MobileNet V3.

Il modello MobileNet V3

Il modello MobileNet V3 analizza i file immagine e restituisce un array di vettori di caratteristiche. La matrice del vettore di caratteristiche è un elenco di elementi numerici che descrivono il caratteristiche delle immagini analizzate. Ogni vettore di caratteristiche descrive un spazio delle caratteristiche multidimensionale e fornisce le coordinate dell'immagine in in questo spazio. Puoi utilizzare la funzionalità vettoriali di un'immagine per classificarla ulteriormente, ad esempio utilizzando la somiglianza coseno per raggruppare immagini simili.

L'input del modello MobileNet V3 prende 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.create
    • bigquery.connections.get
  • Per concedere le autorizzazioni all'account di servizio della connessione, è necessario il 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, è necessario Autorizzazioni storage.objects.create e storage.objects.get.

  • Per caricare il modello in BigQuery ML, è necessario quanto segue 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'oggetto
    • bigquery.models.getData sul modello
    • bigquery.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 basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Per ulteriori informazioni sui prezzi dello spazio di archiviazione di BigQuery, vedi Prezzi dell'archiviazione in BigQuery documentazione.

Per ulteriori informazioni sui prezzi di BigQuery ML, consulta Prezzi di BigQuery ML in documentazione di BigQuery.

Per ulteriori informazioni sui prezzi di Cloud Storage, consulta Prezzi di Cloud Storage.

Prima di iniziare

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API BigQuery and BigQuery Connection API.

    Abilita le API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API BigQuery and BigQuery Connection API.

    Abilita le API

Crea un set di dati

Crea un set di dati denominato mobilenet_inference_test:

SQL

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Editor, esegui la seguente istruzione SQL:

    CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;
    

    Sostituisci PROJECT_ID con l'ID progetto.

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

  2. Esegui l' 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.

Crea una connessione

Crea una connessione denominata lake-connection:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Fai clic su Aggiungi dati e poi fai clic su Origine dati esterna.

  3. Nell'elenco Tipo di connessione, seleziona BigLake e funzioni remote (risorsa Cloud).

  4. Nel campo ID connessione, digita lake-connection.

  5. Fai clic su Crea connessione.

  6. Nel riquadro Explorer, espandi il progetto, espandi la Connessioni esterne e seleziona us.lake-connection connessione.

  7. Nel riquadro Informazioni sulla connessione, copia il valore dalla ID account di servizio. Queste informazioni sono necessarie per concedere l'autorizzazione all'account di servizio della connessione sul bucket Cloud Storage che creerai nel passaggio successivo.

bq

  1. In Cloud Shell, esegui Comando bq mk per creare la connessione:

    bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \
    lake-connection
    
  2. Esegui il comando bq show per recuperare le informazioni sulla connessione:

    bq show --connection us.lake-connection
    
  3. Dalla colonna properties, copia il valore della colonna serviceAccountId. e salvarla da qualche parte. Queste informazioni sono necessarie per concedere autorizzazioni allo spazio l'account di servizio.

Crea un bucket Cloud Storage

  1. Crea un bucket Cloud Storage.
  2. Crea due cartelle nel bucket, una denominata mobilenet per i file del modello e una denominata flowers per il set di dati.

Concedi le autorizzazioni all'account di servizio della connessione

Console

  1. Vai alla sezione IAM e Console di amministrazione.

    Vai a IAM e Amministratore

  2. Fai clic su Concedi l'accesso.

    Si apre la finestra di dialogo Aggiungi entità.

  3. Nel campo Nuove entità, inserisci l'ID account di servizio che copiato in precedenza.

  4. Nel campo Seleziona un ruolo, seleziona Cloud Storage e poi Visualizzatore oggetti Storage.

  5. Fai clic su Salva.

gcloud

In Cloud Shell, esegui 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 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 livello di bucket .

carica il set di dati in Cloud Storage

Ottieni i file del set di dati e rendili disponibili in Cloud Storage:

  1. Scarica il set di dati dei fiori alla macchina locale.
  2. Decomprimi il file flower_photos.tgz.
  3. Carica la cartella flower_photos alla cartella flowers nel bucket che hai creato in precedenza.
  4. Al termine del caricamento, elimina il file LICENSE.txt nel flower_photos cartella.

Crea una tabella di oggetti

Crea una tabella di oggetto denominata sample_images in base al set di dati dei fiori che hai selezionato caricato:

SQL

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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 creato in precedenza.

bq

In Cloud Shell, esegui 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 creato in precedenza.

Carica il modello in Cloud Storage

Ottieni i file del modello e rendili disponibili in Cloud Storage:

  1. Scarica il modello MobileNet V3 alla macchina locale. Questo ti offre saved_model.pb e una cartella variables per il modello.
  2. Carica il file saved_model.pb e variables alla cartella mobilenet nel bucket che creato in precedenza.

Carica il modello in BigQuery ML

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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 creato in precedenza.

Ispeziona il modello

Esamina il modello caricato per vedere quali sono i suoi campi di input e output:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, espandi la mobilenet_inference_test ed espandi il nodo Modelli.

  3. Fai clic sul modello mobilenet.

  4. Nel riquadro del modello visualizzato, fai clic sulla scheda Schema.

  5. Esamina la sezione Etichette. Identifica i campi di output modello. In questo caso, il valore del nome del campo feature_vector.

  6. Esamina la sezione Funzionalità. Identifica i campi che devono da inserire nel modello. Puoi farne riferimento nell'istruzione SELECT per la funzione ML.DECODE_IMAGE. In questo caso, il valore del nome del campo inputs.

Esegui inferenza

Esegui l'inferenza sulla tabella dell'oggetto sample_images utilizzando il modello mobilenet:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.