Instructivo: Ejecuta la inferencia en una tabla de objeto con un modelo de vector de atributos
En este instructivo, se muestra cómo crear una tabla de objetos basada en las imágenes deconjunto de datos de flores y, luego, ejecutar inferencias en esa tabla de objetos con el modelo de MobileNet V3.
El modelo MobileNet V3
El modelo MobileNet V3 analiza los archivos de imagen y muestra un array de vector de atributos. El array de vector de atributos es una lista de elementos numéricos que describen las características de las imágenes analizadas. Cada vector de atributos describe un espacio de atributos multidimensionales y proporciona las coordenadas de la imagen en este espacio. Puedes usar la información del vector de atributos para una imagen de clasificación mayor, por ejemplo, mediante la similitud de coseno con el fin de agrupar imágenes similares.
La entrada del modelo MobileNet V3 toma un tensor de
DType
tf.float32
en la forma [-1, 224, 224, 3]
. La salida es un array de tensores de tf.float32
en la forma [-1, 1024]
.
Permisos necesarios
- Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
. Para crear el recurso de conexión, necesitas los siguientes permisos:
bigquery.connections.create
bigquery.connections.get
Para otorgar permisos a la cuenta de servicio de la conexión, necesitas el siguiente permiso:
resourcemanager.projects.setIamPolicy
Para crear la tabla de objetos, necesitas los siguientes permisos:
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
Para crear el bucket, necesitas el permiso
storage.buckets.create
.Para subir el conjunto de datos y el modelo a Cloud Storage, necesitas los permisos
storage.objects.create
ystorage.objects.get
.Para cargar el modelo en BigQuery ML, necesitas los siguientes permisos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para ejecutar inferencias, necesitas los siguientes permisos:
bigquery.tables.getData
en la tabla de objetosbigquery.models.getData
en el modelobigquery.jobs.create
Costos
En este documento, usarás los siguientes componentes facturables de 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.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información sobre los precios de almacenamiento de BigQuery, consulta los Precios de almacenamiento en la documentación de BigQuery.
Para obtener más información sobre los precios de BigQuery ML, consulta los precios de BigQuery ML en la documentación de BigQuery.
Para obtener más información, consulta la página Precios de Cloud Storage.
Antes de comenzar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Crea una reserva
Para usar un
modelo importado
con una tabla de objetos, debes
crear una reserva
que use la
Edición Enterprise o Enterprise Plus de BigQuery,
y, luego,
crear una asignación de reserva
que use el tipo de trabajo QUERY
.
Crea un conjunto de datos
Crea un conjunto de datos llamado mobilenet_inference_test
:
SQL
Ve a la página de BigQuery.
En el panel Editor, ejecuta la siguiente instrucción de SQL:
CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;
Reemplaza
PROJECT_ID
con el ID del proyecto.
bq
En la consola de Google Cloud, activa Cloud Shell.
Ejecuta el comando
bq mk
para crear el conjunto de datos.bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
Reemplaza
PROJECT_ID
con el ID del proyecto.
Crear una conexión
Crea una conexión llamada lake-connection
:
Console
Ve a la página de BigQuery.
Haz clic en
Agregar y, luego, en Fuente de datos externa.En la lista Tipo de conexión, selecciona BigLake y funciones remotas (Cloud Resource).
En el campo ID de conexión, escribe
lake-connection
.Haz clic en Crear conexión (Create connection).
En el panel Explorador, expande tu proyecto, expande el nodo Conexiones externas y selecciona la conexión
us.lake-connection
.En el panel Información de conexión, copia el valor del campo ID de cuenta de servicio. Necesitarás esta información para otorgar permiso a la cuenta de servicio de la conexión en el bucket de Cloud Storage que crearás en el siguiente paso.
bq
En Cloud Shell, ejecuta el comando
bq mk
para crear la conexión:bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
Ejecuta el comando
bq show
para recuperar información sobre la conexión:bq show --connection us.lake-connection
En la columna
properties
, copia el valor de la propiedadserviceAccountId
y guárdalo en algún lugar. Necesitarás esta información para otorgar permisos a la cuenta de servicio de la conexión.
Crea un bucket de Cloud Storage
- Crea buckets de Cloud Storage.
- Crea dos carpetas
en el bucket, una llamada
mobilenet
para los archivos de modelo y otra llamadaflowers
para el conjunto de datos.
Otorga permisos a la cuenta de servicio de las conexiones
Console
Ir a la página IAM y administración
Haz clic en Otorgar acceso.
Se abre el cuadro de diálogo Agregar principales.
En el campo Principales nuevas (New principals), ingresa el ID de la cuenta de servicio que copiaste antes.
En el campo Selecciona una función, elige Cloud Storage y, luego, Visualizador de objetos de almacenamiento.
Haz clic en Guardar.
gcloud
En Cloud Shell, ejecuta el siguiente 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
Reemplaza MEMBER
por el ID de la cuenta de servicio que copiaste antes. Reemplaza BUCKET_NAME
por el nombre del bucket que creaste previamente.
Para obtener más información, consulta Agrega una principal a una política a nivel del bucket.
Sube el conjunto de datos a Cloud Storage
Obtén los archivos de conjuntos de datos y haz que estén disponibles en Cloud Storage:
- Descarga el conjunto de datos de flores a tu máquina local.
- Descomprime el archivo
flower_photos.tgz
. - Sube la carpeta
flower_photos
a la carpetaflowers
en el bucket que creaste antes. - Una vez que se complete la carga, borra el archivo
LICENSE.txt
en la carpetaflower_photos
.
Crea una tabla de objetos
Crea una tabla de objetos llamada sample_images
basada en el conjunto de datos de flores que
subiste:
SQL
Ve a la página de BigQuery.
En el panel Editor, ejecuta la siguiente instrucción de SQL:
CREATE EXTERNAL TABLE mobilenet_inference_test.sample_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET_NAME/flowers/*']);
Reemplaza
BUCKET_NAME
por el nombre del bucket que creaste previamente.
bq
En Cloud Shell, ejecuta el comando bq mk
para crear la conexión:
bq mk --table \ --external_table_definition='gs://BUCKET_NAME/flowers/*@us.lake-connection' \ --object_metadata=SIMPLE \ mobilenet_inference_test.sample_images
Reemplaza BUCKET_NAME
por el nombre del bucket que creaste previamente.
Sube el modelo a Cloud Storage.
Obtén los archivos del modelo y haz que estén disponibles en Cloud Storage:
- Descarga
el modelo de MobileNet V3 en tu máquina local. Esto te brinda un
archivo
saved_model.pb
y una carpetavariables
para el modelo. - Sube el archivo
saved_model.pb
y la carpetavariables
a la carpetamobilenet
en el bucket que creaste antes.
Carga el modelo en BigQuery ML
Ve a la página de BigQuery.
En el panel Editor, ejecuta la siguiente instrucción de SQL:
CREATE MODEL `mobilenet_inference_test.mobilenet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/mobilenet/*');
Reemplaza
BUCKET_NAME
por el nombre del bucket que creaste previamente.
Inspecciona el modelo
Inspecciona el modelo subido para ver cuáles son sus campos de entrada y salida:
Ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto, expande el conjunto de datos
mobilenet_inference_test
y, luego, expande el nodo Modelos.Haz clic en el modelo
mobilenet
.En el panel del modelo que se abre, haz clic en la pestaña Esquema.
Consulta la sección Etiquetas. Esto identifica los campos que genera el modelo. En este caso, el valor del nombre del campo es
feature_vector
.Mira la sección Atributos. Esto identifica los campos que se deben ingresar en el modelo. Haz referencia a ellos en la declaración
SELECT
para la funciónML.DECODE_IMAGE
. En este caso, el valor del nombre del campo esinputs
.
Ejecuta la inferencia
Ejecuta la inferencia en la tabla de objetos sample_images
con el modelo mobilenet
:
Ve a la página de BigQuery.
En el panel Editor, ejecuta la siguiente instrucción de 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) );
Los resultados debería ser similar al siguiente:
-------------------------------------------------------------------------------------------------------------- | 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 | —-------------------------------------------------------------------------------------------------------------
Realiza una limpieza
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.