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

Questo tutorial mostra come creare una tabella degli oggetti basata sulle immagini del set di dati flowers, e poi eseguire l'inferenza su questa 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 delle caratteristiche descrive uno spazio delle caratteristiche multidimensionale e fornisce le coordinate dell'immagine in questo spazio. Puoi utilizzare le informazioni vettoriali delle funzionalità 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.create
    • bigquery.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.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 e storage.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 degli oggetti
    • bigquery.models.getData sul modello
    • bigquery.jobs.create

Costi

In questo documento, utilizzi 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. I nuovi utenti di Google Cloud potrebbero avere diritto a una prova gratuita.

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

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

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

  8. Crea una prenotazione

    Per utilizzare un modello importato con una tabella degli 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 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 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.

    Crea una connessione

    Crea una connessione denominata lake-connection:

    Console

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. Nel riquadro Explorer, fai clic su Aggiungi dati.

      Si apre la finestra di dialogo Aggiungi dati.

    3. Nel riquadro Filtra per, seleziona Database nella sezione Tipo di origine dati.

      In alternativa, nel campo Cerca origini dati, puoi inserire Vertex AI.

    4. Nella sezione Origini dati in evidenza, fai clic su Vertex AI.

    5. Fai clic sulla scheda della soluzione Vertex AI Models: BigQuery Federation.

    6. Nell'elenco Tipo di connessione, seleziona Modelli remoti di Vertex AI, funzioni remote e BigLake (risorsa Cloud).

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

    8. Fai clic su Crea connessione.

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

    10. 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 sul bucket Cloud Storage che crei nel passaggio successivo.

    bq

    1. In Cloud Shell, esegui il 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 informazioni sulla connessione:

      bq show --connection us.lake-connection
      
    3. Dalla colonna properties, copia il valore della proprietà serviceAccountId e salvalo da qualche parte. Hai bisogno di queste informazioni per concedere le autorizzazioni al account di servizio della connessione.

    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 al account di servizio della connessione

    Console

    1. Vai alla pagina IAM e amministrazione.

      Vai a IAM e amministrazione

    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 hai 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 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 saperne di più, consulta Aggiungere un principal 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:

    1. Scarica il set di dati sui fiori sul tuo computer locale.
    2. Decomprimi il file flower_photos.tgz.
    3. Carica la cartella flower_photos nella cartella flowers del bucket che hai creato in precedenza.
    4. Una volta completato il caricamento, elimina il file LICENSE.txt nella cartella flower_photos.

    Creare una tabella degli oggetti

    Crea una tabella degli oggetti denominata sample_images in base al set di dati sui fiori che hai 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 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 su Cloud Storage

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

    1. Scarica il modello MobileNet V3 sulla tua macchina locale. In questo modo otterrai un file saved_model.pb e una cartella variables per il modello.
    2. Carica il file saved_model.pb e la cartella variables nella cartella mobilenet del bucket che hai 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 che hai creato in precedenza.

    Ispezionare 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, il set di dati mobilenet_inference_test e il nodo Modelli.

    3. Fai clic sul modello mobilenet.

    4. Nel riquadro del modello che si apre, fai clic sulla scheda Schema.

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

    6. Esamina la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Fai riferimento a questi valori 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 degli oggetti 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. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.