Esegui l'inferenza sulle tabelle di oggetti immagine

Questo documento descrive come utilizzare BigQuery ML per eseguire l'inferenza nelle tabelle di oggetti immagine.

Panoramica

Puoi eseguire l'inferenza sui dati immagine utilizzando una tabella di oggetti come input Funzione ML.PREDICT.

Per farlo, devi prima scegliere un modello appropriato, caricarlo su Cloud Storage e importarlo in BigQuery eseguendo CREATE MODEL. Puoi creare il tuo modello o scaricarne uno da TensorFlow Hub.

Limitazioni

  • Con BigQuery ML modelli importati con le tabelle di oggetti è supportata solo quando si utilizzano prezzi basati sulla capacità tramite prenotazioni; i prezzi on demand non sono supportati.
  • I file immagine associati alla tabella degli oggetti devono soddisfare i seguenti requisiti requisiti:
    • Avere una dimensione inferiore a 20 MB.
    • Utilizza un formato JPEG, PNG o BMP.
  • Le dimensioni combinate dei file immagine associati alla tabella degli oggetti devono inferiore a 1 TB.
  • Il modello deve essere uno dei seguenti:

  • Il modello deve soddisfare i requisiti di input e le limitazioni descritti in Input supportati.

  • Le dimensioni serializzate del modello devono essere inferiori a 450 MB.

  • La dimensione deserializzata (in memoria) del modello deve essere inferiore a 1000 MB

  • Il tensore di input del modello deve soddisfare i seguenti criteri:

    • Avere un tipo di dati tf.float32 con valori in [0, 1) o avere un tipo di dati tf.uint8 con valori in [0, 255).
    • Avere la forma [batch_size, weight, height, 3], dove:
      • batch_size deve essere -1, None o 1.
      • width e height devono essere maggiori di 0.
  • Il modello deve essere addestrato con immagini in uno dei seguenti spazi colore:

    • RGB
    • HSV
    • YIQ
    • YUV
    • GRAYSCALE

    Puoi utilizzare lo Funzione ML.CONVERT_COLOR_SPACE per convertire le immagini di input nello spazio colore con cui è stato addestrato il modello.

Modelli di esempio

I seguenti modelli in TensorFlow Hub funzionano con BigQuery ML e tabelle di oggetti immagine:

Autorizzazioni obbligatorie

  • Per caricare 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

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

Carica un modello in Cloud Storage

Per caricare un modello, segui questi passaggi:

  1. Se hai creato il tuo modello, salvalo localmente. Se stai utilizzando un modello di TensorFlow Hub, scaricalo dalla macchina locale. Se utilizzi TensorFlow, il comando un file saved_model.pb e una cartella variables per il modello.
  2. Se necessario, crea un bucket Cloud Storage.
  3. Carica gli artefatti del modello nel bucket.

Carica il modello in BigQuery ML

Caricare un modello che funziona con le tabelle di oggetti immagine equivale a caricare un che funziona con i dati strutturati. Segui questi passaggi per caricare un modello BigQuery ML:

CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`
OPTIONS(
  model_type = 'MODEL_TYPE',
  model_path = 'BUCKET_PATH');

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto.
  • DATASET_ID: l'ID del set di dati da che contiene il modello.
  • MODEL_NAME: il nome del modello.
  • MODEL_TYPE: utilizza uno dei seguenti valori:
    • TENSORFLOW per un modello TensorFlow
    • ONNX per un modello PyTorch in formato ONNX
  • BUCKET_PATH: il percorso Bucket Cloud Storage che contiene il modello, nel formato [gs://bucket_name/[folder_name/]*].

L'esempio seguente utilizza il progetto predefinito e carica un file TensorFlow modello in BigQuery ML come my_vision_model, utilizzando saved_model.pb file e variables cartella da gs://my_bucket/my_model_folder:

CREATE MODEL `my_dataset.my_vision_model`
OPTIONS(
  model_type = 'TENSORFLOW',
  model_path = 'gs://my_bucket/my_model_folder/*');

Ispeziona il modello

Puoi esaminare il modello caricato per vedere quali sono i suoi campi di input e output . Devi fare riferimento a questi campi quando esegui l'inferenza sull'oggetto .

Per ispezionare un modello, segui questi passaggi:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, espandi la che contiene il modello ed espandi il nodo Modelli.

  3. Fai clic sul modello.

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

  5. Esamina la sezione Etichette. Identifica i campi di output modello.

  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.

Per un'ispezione più dettagliata di un modello TensorFlow, ad esempio determinare la forma dell'input del modello, installa TensorFlow e utilizza Comando saved_model_cli show.

Pre-elabora le immagini

Devi utilizzare Funzione ML.DECODE_IMAGE per convertire i byte di immagine in una rappresentazione ARRAY multidimensionale. Puoi usa l'output ML.DECODE_IMAGE direttamente in una funzione ML.PREDICT, oppure scrivere i risultati da ML.DECODE_IMAGE in una colonna della tabella e fai riferimento a quella colonna quando chiami ML.PREDICT.

L'esempio seguente scrive l'output della funzione ML.DECODE_IMAGE in una tabella:

CREATE OR REPLACE TABLE mydataset.mytable AS (
  SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM mydataset.object_table
  );

Usa le seguenti funzioni per elaborare ulteriormente le immagini in modo che funzionino con il modello:

Puoi utilizzarle come parte della funzione ML.PREDICT o eseguirle su una colonna della tabella contenente i dati di immagine generati da ML.DECODE_IMAGE.

Esegui inferenza

Dopo aver caricato un modello appropriato e, facoltativamente, pre-elaborato puoi eseguire l'inferenza sui dati immagine.

Per eseguire l'inferenza:

SELECT *
FROM ML.PREDICT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  (SELECT [other columns from the object table,] IMAGE_DATA AS MODEL_INPUT
  FROM PROJECT_ID.DATASET_ID.TABLE_NAME)
);

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene la tabella del modello e dell'oggetto.
  • DATASET_ID: l'ID del set di dati che contiene la tabella del modello e dell'oggetto.
  • MODEL_NAME: il nome del modello.
  • IMAGE_DATA: i dati dell'immagine, rappresentati dall'output della funzione ML.DECODE_IMAGE o da un colonna della tabella contenente l'output dei dati di immagine di ML.DECODE_IMAGE o altre funzioni di elaborazione delle immagini.
  • MODEL_INPUT: il nome di un campo di immissione per il modello.Puoi trovare queste informazioni ispezione del modello e esaminando i nomi dei campi nella sezione Funzionalità.
  • TABLE_NAME: il nome della tabella dell'oggetto.

Esempi

Esempio 1

L'esempio seguente utilizza la funzione ML.DECODE_IMAGE direttamente nel Funzione ML.PREDICT. Restituisce i risultati di inferenza per tutte le immagini nel tabella di oggetti, per un modello con un campo di immissione input e un valore campo di feature:

SELECT * FROM
ML.PREDICT(
  MODEL `my_dataset.vision_model`,
  (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 480, 480, FALSE) AS input
  FROM `my_dataset.object_table`)
);

Esempio 2

L'esempio seguente utilizza la funzione ML.DECODE_IMAGE direttamente nel ML.PREDICT e utilizza la funzione ML.CONVERT_COLOR_SPACE nella Funzione ML.PREDICT per convertire lo spazio colore dell'immagine da RBG a YIQ. Mostra inoltre come utilizza i campi della tabella degli oggetti per filtrare gli oggetti inclusi nell'inferenza. Restituisce i risultati di inferenza per tutte le immagini JPG nel tabella di oggetti, per un modello con un campo di immissione input e un valore campo di feature:

SELECT * FROM
  ML.PREDICT(
    MODEL `my_dataset.vision_model`,
    (SELECT uri, ML.CONVERT_COLOR_SPACE(ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 280, TRUE), 'YIQ') AS input
    FROM `my_dataset.object_table`
    WHERE content_type = 'image/jpeg')
  );

Esempio 3

L'esempio seguente utilizza i risultati di ML.DECODE_IMAGE che sono stati vengono scritte in una colonna della tabella, ma non vengono ulteriormente elaborate. Utilizza ML.RESIZE_IMAGE e ML.CONVERT_IMAGE_TYPE nella funzione ML.PREDICT per per elaborare i dati dell'immagine. Restituisce i risultati di inferenza per tutte le immagini nel tabella delle immagini decodificate, per un modello con un campo di immissione input e un valore campo di feature.

Crea la tabella delle immagini decodificate:

CREATE OR REPLACE TABLE `my_dataset.decoded_images`
  AS (SELECT ML.DECODE_IMAGE(data) AS decoded_image
  FROM `my_dataset.object_table`);

Esegui l'inferenza sulla tabella delle immagini decodificate:

SELECT * FROM
ML.PREDICT(
  MODEL`my_dataset.vision_model`,
  (SELECT uri, ML.CONVERT_IMAGE_TYPE(ML.RESIZE_IMAGE(decoded_image, 480, 480, FALSE)) AS input
  FROM `my_dataset.decoded_images`)
);

Esempio 4

L'esempio seguente utilizza i risultati di ML.DECODE_IMAGE che sono stati scritte in una colonna di tabella e pre-elaborate utilizzando ML.RESIZE_IMAGE. Restituisce i risultati di inferenza per tutte le immagini nel tabella delle immagini decodificate, per un modello con un campo di immissione input e un valore campo di feature.

Crea la tabella:

CREATE OR REPLACE TABLE `my_dataset.decoded_images`
  AS (SELECT ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data) 480, 480, FALSE) AS decoded_image
  FROM `my_dataset.object_table`);

Esegui l'inferenza sulla tabella delle immagini decodificate:

SELECT * FROM
ML.PREDICT(
  MODEL `my_dataset.vision_model`,
  (SELECT uri, decoded_image AS input
  FROM `my_dataset.decoded_images`)
);

Esempio 5

L'esempio seguente utilizza la funzione ML.DECODE_IMAGE direttamente nel Funzione ML.PREDICT. In questo esempio, il modello ha un campo di output embeddings e due campi di immissione: uno che prevede l'inserimento di f_img e una che prevede una stringa, f_txt. L'immagine l'input proviene dalla tabella degli oggetti e l'input della stringa proviene da una tabella BigQuery standard unita alla tabella dell'oggetto utilizzando la colonna uri.

SELECT * FROM
  ML.PREDICT(
    MODEL `my_dataset.mixed_model`,
    (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(my_dataset.my_object_table.data), 224, 224, FALSE) AS f_img,
      my_dataset.image_description.description AS f_txt
    FROM `my_dataset.object_table`
    JOIN `my_dataset.image_description`
    ON object_table.uri = image_description.uri)
  );

Passaggi successivi