Tutorial: Ejecutar inferencias en una tabla de objetos mediante un modelo de vector de características
En este tutorial se explica cómo crear una tabla de objetos basada en las imágenes del conjunto de datos de flores y, a continuación, cómo ejecutar la inferencia en esa tabla de objetos con el modelo MobileNet V3.
Modelo MobileNet V3
El modelo MobileNet V3 analiza archivos de imagen y devuelve una matriz de vectores de características. La matriz de vectores de características es una lista de elementos numéricos que describen las características de las imágenes analizadas. Cada vector de características describe un espacio de características multidimensional y proporciona las coordenadas de la imagen en este espacio. Puedes usar la información del vector de características de una imagen para clasificarla mejor. Por ejemplo, puedes usar la similitud del coseno para agrupar imágenes similares.
La entrada del modelo MobileNet V3 toma un tensor de
DType
tf.float32
con la forma [-1, 224, 224, 3]
. El resultado es una matriz de tensores de tf.float32
con la forma [-1, 1024]
.
Permisos obligatorios
- 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 conceder 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 segmento, 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 la inferencia, necesitas los siguientes permisos:
bigquery.tables.getData
en la tabla de objetosbigquery.models.getData
en el modelobigquery.jobs.create
Costes
En este documento, se utilizan 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 costes basada en el uso previsto,
utiliza la calculadora de precios.
Para obtener más información sobre los precios de almacenamiento de BigQuery, consulta la sección Precios de almacenamiento de la documentación de BigQuery.
Para obtener más información sobre los precios de BigQuery ML, consulta la página Precios de BigQuery ML de la documentación de BigQuery.
Para obtener más información sobre los precios de Cloud Storage, consulta la página Precios de Cloud Storage.
Antes de empezar
- 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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. Ve a la página BigQuery.
En el panel Editor, ejecuta la siguiente instrucción SQL:
CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;
Sustituye
PROJECT_ID
por el ID del proyecto.En la Google Cloud consola, activa Cloud Shell.
Ejecuta el comando
bq mk
para crear el conjunto de datos:bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
Sustituye
PROJECT_ID
por el ID del proyecto.Ve a la página BigQuery.
En el panel Explorador, haz clic en
Añadir datos.Se abrirá el cuadro de diálogo Añadir datos.
En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Bases de datos.
También puede introducir
Vertex AI
en el campo Buscar fuentes de datos.En la sección Fuentes de datos destacadas, haga clic en Vertex AI.
Haz clic en la tarjeta de solución Modelos de Vertex AI: federación de BigQuery.
En la lista Tipo de conexión, selecciona Modelos remotos, funciones remotas y BigLake (recurso de Cloud) de Vertex AI.
En el campo Connection ID (ID de conexión), escribe
lake-connection
.Haga clic en Crear conexión.
En el panel Explorador, expande tu proyecto, el nodo Conexiones externas y la conexión
us.lake-connection
.En el panel Información de conexión, copia el valor del campo ID de cuenta de servicio. Necesitas esta información para conceder permiso a la cuenta de servicio de la conexión en el segmento de Cloud Storage que crearás en el siguiente paso.
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 obtener información sobre la conexión:bq show --connection us.lake-connection
En la columna
properties
, copie el valor de la propiedadserviceAccountId
y guárdelo en algún lugar. Necesitas esta información para conceder permisos a la cuenta de servicio de la conexión.- Crea un segmento de Cloud Storage.
- Crea dos carpetas en el depósito: una llamada
mobilenet
para los archivos del modelo y otra llamadaflowers
para el conjunto de datos. Ve a la página IAM y administración.
Haz clic en Conceder acceso.
Se abrirá el cuadro de diálogo Añadir principales.
En el campo Nuevos principales, introduce el ID de la cuenta de servicio que has copiado anteriormente.
En el campo Selecciona un rol, elige Cloud Storage y, a continuación, Visor de objetos de Storage.
Haz clic en Guardar.
- Descarga el conjunto de datos de flores en tu máquina local.
- Descomprime el archivo
flower_photos.tgz
. - Sube la carpeta
flower_photos
a la carpetaflowers
del segmento que has creado anteriormente. - Una vez que se haya completado la subida, elimina el archivo
LICENSE.txt
de la carpetaflower_photos
. Ve a la página BigQuery.
En el panel Editor, ejecuta la siguiente instrucción SQL:
CREATE EXTERNAL TABLE mobilenet_inference_test.sample_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET_NAME/flowers/*']);
Sustituye
BUCKET_NAME
por el nombre del bucket que has creado anteriormente.- Descarga
el modelo MobileNet V3 en tu máquina local. De esta forma, obtendrás un archivo
saved_model.pb
y una carpetavariables
para el modelo. - Sube el archivo
saved_model.pb
y la carpetavariables
a la carpetamobilenet
del segmento que has creado anteriormente. Ve a la página BigQuery.
En el panel Editor, ejecuta la siguiente instrucción SQL:
CREATE MODEL `mobilenet_inference_test.mobilenet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/mobilenet/*');
Sustituye
BUCKET_NAME
por el nombre del bucket que has creado anteriormente.Ve a la página BigQuery.
En el panel Explorador, despliega tu proyecto, el conjunto de datos
mobilenet_inference_test
y el nodo Modelos.Haz clic en el modelo
mobilenet
.En el panel de modelo que se abre, haz clic en la pestaña Esquema.
Consulte la sección Etiquetas. Identifica los campos que genera el modelo. En este caso, el valor del nombre del campo es
feature_vector
.Consulte la sección Funciones. Identifica los campos que se deben introducir en el modelo. Se hace referencia a ellos en la instrucción
SELECT
de la funciónML.DECODE_IMAGE
. En este caso, el valor del nombre del campo esinputs
.Ve a la página BigQuery.
En el panel Editor, ejecuta la siguiente instrucción 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ían ser similares a los siguientes:
-------------------------------------------------------------------------------------------------------------- | 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 | —-------------------------------------------------------------------------------------------------------------
- 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.
Crear 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, a continuación, crear una asignación de reserva que use el tipo de tarea QUERY
.
Crear conjunto de datos
Crea un conjunto de datos llamado mobilenet_inference_test
:
SQL
bq
Crear una conexión
Crea una conexión llamada lake-connection
:
Consola
bq
Crea un segmento de Cloud Storage
Conceder permisos a la cuenta de servicio de la conexión
Consola
gcloud
En Cloud Shell, ejecuta el 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
Sustituye MEMBER
por el ID de la cuenta de servicio que has copiado antes. Sustituye BUCKET_NAME
por el nombre del segmento que has creado anteriormente.
Para obtener más información, consulta Añadir un principal a una política a nivel de segmento.
Subir el conjunto de datos a Cloud Storage
Obtén los archivos del conjunto de datos y haz que estén disponibles en Cloud Storage:
Crear una tabla de objetos
Crea una tabla de objetos llamada sample_images
a partir del conjunto de datos de flores que has subido:
SQL
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
Sustituye BUCKET_NAME
por el nombre del bucket que has creado anteriormente.
Sube el modelo a Cloud Storage
Obtén los archivos del modelo y haz que estén disponibles en Cloud Storage:
Cargar el modelo en BigQuery ML
Inspeccionar el modelo
Inspecciona el modelo subido para ver cuáles son sus campos de entrada y salida:
Ejecutar inferencia
Ejecuta la inferencia en la tabla de objetos sample_images
con el modelo mobilenet
: