Instructivo: Ejecuta la inferencia en una tabla de objeto con un modelo de clasificación
En este instructivo, se muestra cómo crear una tabla de objetos basada en las imágenes de un conjunto de datos públicos y, luego, ejecutar inferencias en esa tabla de objetos con el modelo ResNet 50.
El modelo ResNet 50
El modelo ResNet 50 analiza los archivos de imágenes y genera un lote de vectores que representan la probabilidad de que una imagen pertenezca a la clase correspondiente (logits). Para obtener más información, consulta la sección Uso en la página de TensorFlow Hub del modelo.
La entrada del modelo ResNet 50 toma un tensor de DType
= 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 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 resnet_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.resnet_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
.Haga clic en Crear conexión.
En el panel Información de conexión, copia el valor del campo ID de cuenta de servicio y guárdalo en algún lugar. Necesitarás esta información para otorgar permisos a la cuenta de servicio de la conexión.
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 un bucket de Cloud Storage para contener los archivos del modelo.
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.
Crea una tabla de objetos
Crea una tabla de objetos llamada vision_images
basada en los
archivos de imagen del bucket público gs://cloud-samples-data/vision
:
SQL
Ve a la página de BigQuery.
En el panel Editor, ejecuta la siguiente instrucción de 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
En Cloud Shell, ejecuta el comando bq mk
para crear la conexión:
bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images
Sube el modelo a Cloud Storage.
Obtén los archivos del modelo y haz que estén disponibles en Cloud Storage:
- Descarga
el modelo ResNet 50 a 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
al 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 `resnet_inference_test.resnet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/*');
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
resnet_inference_test
y, luego, expande el nodo Modelos.Haz clic en el modelo
resnet
.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
activation_49
.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 esinput_1
.
Ejecuta la inferencia
Ejecuta la inferencia en la tabla de objetos vision_images
con el modelo resnet
:
Ve a la página de BigQuery.
En el panel Editor, ejecuta la siguiente instrucción de 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) );
Los resultados debería ser similar al siguiente:
------------------------------------------------------------------------------------------------------------------------------------- | 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 | —------------------------------------------------------------------------------------------------------------------------------------
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.