Tutorial: eseguire 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 quindi eseguire l'inferenza su tale 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 rappresenta la probabilità che un'immagine appartenga alla classe corrispondente (logit). Per ulteriori informazioni, consulta la sezione Utilizzo sulla pagina TensorFlow Hub del modello.

L'input del modello ResNet 50 assume 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 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 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 vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • BigQuery: ti sono addebitati 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 sono addebitati costi per gli oggetti archiviati in Cloud Storage.

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Per ulteriori informazioni sui prezzi dell'archiviazione di BigQuery, consulta la sezione Prezzi dell'archiviazione nella documentazione di BigQuery.

Per ulteriori informazioni sui prezzi di BigQuery ML, consulta la pagina relativa ai 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

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

Creazione di una connessione

Crea una connessione denominata lake-connection:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Fai clic su Aggiungi dati, poi 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 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 all'account di servizio della connessione.

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 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 all'account di servizio della connessione.

Crea un bucket Cloud Storage

Crea un bucket Cloud Storage per contenere i file del modello.

Concedi le autorizzazioni all'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.

    Viene visualizzata 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.

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 maggiori informazioni, consulta Aggiungere un'entità a un criterio a livello di bucket.

Crea una tabella degli oggetti

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

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 comando bq mk per creare la connessione:

bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*[email protected]' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images

Carica il modello in Cloud Storage

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

  1. Scarica il modello ResNet 50 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 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

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

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, espandi il set di dati resnet_inference_test, quindi il nodo Modelli.

  3. Fai clic sul modello resnet.

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

  5. Esamina la sezione Etichette. Identifica i campi dell'output del modello. In questo caso, il valore del nome del campo è activation_49.

  6. Consulta la sezione Funzionalità. Identifica i campi che devono essere inseriti nel modello. Puoi farvi riferimento nell'istruzione SELECT per la funzione ML.DECODE_IMAGE. In questo caso, il valore del nome del campo è input_1.

Esegui inferenza

Esegui l'inferenza sulla tabella degli 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     |
    —------------------------------------------------------------------------------------------------------------------------------------
    

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.