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 quella 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 del modello di TensorFlow Hub.

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.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 di 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 modello su 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 di oggetti
    • bigquery.models.getData nel 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 in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi Google Cloud utenti potrebbero avere diritto a una prova senza costi.

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 ulteriori informazioni sui prezzi di Cloud Storage, consulta la pagina Prezzi di Cloud Storage.

Prima di iniziare

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Crea una prenotazione

Per utilizzare un modello importato con una tabella di 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 resnet_inference_test:

SQL

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

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

    CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;

    Sostituisci PROJECT_ID con l'ID progetto.

bq

  1. Nella Google Cloud console, attiva Cloud Shell.

    Attiva Cloud Shell

  2. Esegui il bq mk comando 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 a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

    Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro a sinistra per aprirlo.

  3. Nel riquadro Spazio di esplorazione, fai clic su Aggiungi dati.

    Si apre la finestra di dialogo Aggiungi dati.

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

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

  5. Nella sezione Origini dati in primo piano, fai clic su Vertex AI.

  6. Fai clic sulla scheda della soluzione Modelli Vertex AI: federazione BigQuery.

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

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

  9. Fai clic su Crea connessione.

  10. Nel riquadro Informazioni sulla connessione, copia il valore del campo ID account di servizio e salvalo da qualche parte. Queste informazioni sono necessarie per concedere le autorizzazioni al account di servizio della connessione.

bq

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

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

    bq show --connection us.lake-connection
    
  3. Dalla colonna properties, copia il valore della proprietà serviceAccountId e 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 per contenere i file del modello.

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 seleziona Visualizzatore oggetti Storage.

  5. 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 ulteriori informazioni, consulta Aggiungere un'entità a una policy a livello di bucket.

Crea una tabella di oggetti

Crea una tabella di oggetti denominata vision_images basata sui file immagine nel bucket pubblico gs://cloud-samples-data/vision:

SQL

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. 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']
    );

bq

In Cloud Shell, esegui il bq mk comando 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:

  1. Scarica il modello ResNet 50 sulla tua macchina locale. Verranno creati un file saved_model.pb e una cartella variables per il modello.
  2. Carica il file saved_model.pb e la cartella variables nel 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 `resnet_inference_test.resnet`
    OPTIONS(
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/*');

    Sostituisci BUCKET_NAME con 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:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

  3. Nel riquadro Spazio di esplorazione , espandi il progetto, fai clic su Set di dati e poi sul set di dati resnet_inference_test.

  4. Vai alla scheda Modelli.

  5. Fai clic sul modello resnet.

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

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

  8. Esamina la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Fai riferimento a questi campi nell'istruzione SELECT per la funzione ML.DECODE_IMAGE. In questo caso, il valore del nome del campo è input_1.

Esegui l'inferenza

Esegui l'inferenza sulla tabella di oggetti vision_images utilizzando il modello resnet:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

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

Libera spazio

  1. Nella Google Cloud console, 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 progetto e fai clic su Chiudi per eliminare il progetto.