Etiqueta imágenes con la API de AutoML Vision
En esta guía de inicio rápido, se te guiará por los siguientes procesos:
- Copiar un CSV que enumera imágenes y cuadros de límite con etiquetas en Google Cloud Storage
- Usar la detección de objetos de AutoML Vision para crear tu conjunto de datos y entrenar y, luego, implementar tu modelo
En esta guía de inicio rápido, debes usar los comandos cURL para enviar solicitudes a la API de AutoML Vision. Consulta la Guía de inicio rápido sobre cómo usar la interfaz de usuario para completar todos los pasos que se indican aquí en la interfaz de usuario. Si deseas obtener más instrucciones para usar la IU o la API, consulta las guías prácticas.
Antes de comenzar
Configura tu proyecto
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las APIs de AutoML and Cloud Storage:
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las APIs de AutoML and Cloud Storage:
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - Establece la variable de entorno
PROJECT_ID
para tu ID del proyecto.export PROJECT_ID=PROJECT_ID
Las llamadas a la API de AutoML y los nombres de los recursos incluyen el ID del proyecto. La variable de entornoPROJECT_ID
proporciona una manera conveniente de especificar el ID.
Prepara un conjunto de datos
En esta guía de inicio rápido, usarás un conjunto de datos creado a partir del conjunto de datos de imágenes abiertas V4.
Este conjunto de datos de ensaladas público se encuentra en gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv
.
El formato CSV es el siguiente:
TRAINING,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Salad,0.0,0.0954,,,0.977,0.957,, VALIDATION,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Seafood,0.0154,0.1538,,,1.0,0.802,, TEST,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Tomato,0.0,0.655,,,0.231,0.839,,
Cada fila corresponde a un objeto ubicado dentro de una imagen mayor, con cada objeto designado de forma específica como datos de prueba, entrenamiento o validación. Las tres líneas que se incluyen aquí indican tres objetos distintos ubicados dentro de la misma imagen disponibles en gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg
. Cada fila tiene una etiqueta diferente: Salad
, Seafood
o Tomato
, además de otras filas con etiquetas Baked goods
o Cheese
.
Se especifican cuadros de límite para cada imagen con el vértice superior izquierdo y el vértice inferior derecho:
- (0,0) corresponde al vértice superior izquierdo.
- (1,1) corresponde al vértice inferior derecho.
En la primera fila, las coordenadas (x, y) del vértice superior izquierdo del objeto etiquetado Salad
son (0.0,0.0954), y las coordenadas del vértice inferior derecho del objeto son (0.977,0.957).
Si deseas obtener información más detallada sobre cómo dar formato al archivo CSV y los requisitos mínimos para crear un conjunto de datos válido, consulta Prepara los datos de entrenamiento.
Crea un conjunto de datos e importa datos de entrenamiento
El comando curl
usa el comando gcloud auth print-access-token
a fin de obtener un token de acceso para tu Cuenta de Google.
Para la versión Beta, usa us-central1
como la región, sin importar la ubicación real.
Crea un conjunto de datos
Usa el siguiente comando curl
para crear un conjunto de datos nuevo con el nombre visible que prefieras:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets" -d '{ "display_name": "DISPLAY_NAME", "image_object_detection_dataset_metadata": { } }'
La respuesta muestra un ID de conjunto de datos relativo (como IOD5491013845671477445
) que necesitarás en los siguientes pasos.
{ "name": "projects/PROJECT_ID/locations/us-central1/datasets/IOD5491013845671477445", "displayName": "DISPLAY_NAME", "createTime": "2018-10-29T15:45:53.353442Z", "imageObjectDetectionDatasetMetadata": {} }
Importa datos
Importa los datos de entrenamiento en tu conjunto de datos. El comando importData
toma como entrada el URI del conjunto de datos. Aquí proporcionarás la dirección pública de Google Cloud Storage en la que se almacena el conjunto de datos Salads. Es posible que este proceso tome hasta 30 minutos.
- Reemplaza DATASET_ID por el identificador del conjunto de datos (no el nombre visible). Por ejemplo:
IOD5491013845671477445
.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID:importData \ -d '{ "input_config": { "gcs_source": { "input_uris": [ "gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv" ] } } }'
La respuesta muestra un ID de operación relativo (por ejemplo, IOD1555149246326374411
) que se puede usar para obtener el estado de la operación.
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-29T15:56:29.176485Z", "updateTime": "2018-10-29T15:56:29.176485Z", "importDataDetails": {} } }
Obtén el estado de la operación de importación
Puedes consultar el estado de la operación de importación de datos mediante el siguiente comando curl
.
- Reemplaza OPERATION_ID por el ID de la operación que se muestra en la operación de importación de datos.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID
La operación de importación puede tomar un tiempo en completarse. Cuando la tarea de importación se complete, verás done: true
en el estado de la operación sin errores, como se muestra en el siguiente ejemplo.
Esta solicitud también mostrará advertencias para la importación del conjunto de datos. Se agregaron errores a este conjunto de datos para mostrarte un ejemplo de estas advertencias. Usar esta operación para ver las advertencias es una forma útil de encontrar errores en los datos.
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-29T15:56:29.176485Z", "updateTime": "2018-10-29T16:10:41.326614Z", "importDataDetails": {} }, "done": true, "response": { "@type": "type.googleapis.com/google.protobuf.Empty" } }
Obtén una lista de conjuntos de datos
Para obtener una lista de tus conjuntos de datos, usa el siguiente comando.
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets
Deberías ver un resultado similar al siguiente:
{ "datasets": [ { "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID1", "displayName": "DISPLAY_NAME1", "createTime": "2018-10-29T15:45:53.353442Z", "exampleCount": 227, "imageObjectDetectionDatasetMetadata": {} }, { "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID2", "displayName": "DISPLAY_NAME2", "createTime": "2018-10-24T21:06:05.390059Z", "exampleCount": 227, "imageObjectDetectionDatasetMetadata": {} } ] }
Entrena tu modelo
Inicia una aplicación de entrenamiento de modelos
Luego de crear el conjunto de datos y de importar los datos de entrenamiento en el conjunto, puedes entrenar el modelo personalizado.
Entrena el modelo mediante el siguiente comando curl
.
- Reemplaza DATASET_ID por el identificador del conjunto de datos (no el nombre visible).
- Reemplaza DISPLAY_NAME por un nombre que elijas para el modelo.
- Especifica
image_object_detection_model_metadata.model_type
. Hay dos opciones disponibles para optimizar la latencia o la exactitud:cloud-low-latency-1
: Optimiza el entrenamiento para la latencia.cloud-high-accuracy-1
: Optimiza el entrenamiento para la exactitud.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models -d '{ "datasetId": "DATASET_ID", "displayName": "DISPLAY_NAME", "image_object_detection_model_metadata": {}, }'
Deberías recibir un ID para la operación de entrenamiento del modelo (por ejemplo, IOD5644417707978784777
) que puedes usar a fin de obtener el estado de la operación de entrenamiento.
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-29T16:41:23.902167Z", "updateTime": "2018-10-29T16:41:23.902167Z", "createModelDetails": {} } }
El proceso de entrenamiento puede tomar varias horas en completarse.
Obtén el estado de la operación de entrenamiento de modelos
Puedes consultar el estado de la operación de entrenamiento de modelos mediante el siguiente comando curl
.
- Reemplaza OPERATION_ID por el ID de la operación de entrenamiento.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID
Deberías ver un resultado similar al siguiente. Cuando se complete la operación, verás done: true
sin errores.
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-24T22:08:23.327323Z", "updateTime": "2018-10-24T23:41:18.452855Z", "createModelDetails": {} }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.Model", "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784777" } }
Verifica que el modelo esté disponible
Una vez que la operación de entrenamiento de modelos se complete de forma correcta, puedes verificar que el modelo esté disponible mediante el siguiente comando para enumerar los modelos del proyecto.
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models
Deberías recibir un ID de modelo (por ejemplo, IOD5644417707978784778
) que puedes usar para obtener métricas de evaluación del modelo cuando finalice el entrenamiento.
Deberías ver un resultado similar al siguiente:
{ "model": [ { "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784778", "displayName": "DISPLAY_NAME", "datasetId": "IOD5491013845671477445", "createTime": "2018-10-24T23:37:00.858493Z", "updateTime": "2018-10-24T23:37:00.858493Z", "deploymentState": "DEPLOYED", "imageObjectDetectionModelMetadata": { "modelType": "cloud-low-latency-1", "nodeCount": "1", "nodeQps": 1.2987012987012987 } } ] }
Evalúa el modelo
Una vez que finalizó el entrenamiento del modelo, puedes enumerar las métricas de evaluación del modelo mediante el siguiente comando curl
.
- Reemplaza MODEL_ID por el identificador del modelo.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations
La detección de objetos de AutoML Vision proporciona un conjunto agregado de métricas de evaluación que indican el rendimiento general del modelo y, también, métricas de evaluación para cada etiqueta, que indican el rendimiento del modelo en esa etiqueta con diferentes umbrales.
Implementa tu modelo
Para poder realizar una predicción, debes implementar el modelo de forma manual.
Usa el siguiente comando para implementar tu modelo:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:deploy \ -d '{ "imageObjectDetectionModelDeploymentMetadata": { "nodeCount": 2 } }'
Realiza una predicción
Envía una solicitud de predicción
Puedes usar el modelo implementado para realizar una predicción en una imagen local mediante el siguiente archivo JSON y el comando curl
.
- Crea un archivo JSON de solicitud llamado
predict_request.json
y proporciona una imagen codificada en base64 en el campo"imageBytes"
.
predict_request.json
{ "payload": { "image": { "image_bytes": "/9j/4QAYRXhpZgAA...base64-encoded-image...9tAVx/zDQDlGxn//2Q==" } } }
- Reemplaza MODEL_ID por el identificador del modelo.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:predict" -d @PATH_TO_JSON_FILE/predict_request.json
Una solicitud correcta muestra una respuesta con uno o más cuadros de límite especificados por dos normalizedVertices
opuestos en diagonal.
Cada cuadro de límite identificado tiene una score
de confianza y una anotación (displayName
) asociadas.
{ "payload": [ { "imageObjectDetection": { "boundingBox": { "normalizedVertices": [ { "x": 0.034553755, "y": 0.015524037 }, { "x": 0.941527, "y": 0.9912563 } ] }, "score": 0.9997793 }, "displayName": "Salad" }, { "imageObjectDetection": { "boundingBox": { "normalizedVertices": [ { "x": 0.11737197, "y": 0.7098793 }, { "x": 0.510878, "y": 0.87987 } ] }, "score": 0.63219965 }, "displayName": "Tomato" } ] }
Anula la implementación del modelo (opcional)
El modelo generará cargos mientras esté implementado. Para evitar que se generen costos por el hosting del modelo, puedes anular su implementación.
Ejecuta el siguiente comando para anular la implementación del modelo:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:undeploy"
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.
Si ya no necesitas el modelo personalizado ni el conjunto de datos relacionado, puedes borrarlos.
Enumera modelos
Puedes enumerar los modelos del proyecto, junto con sus identificadores, mediante el siguiente comando:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models
Borra un modelo
Puedes borrar un modelo con el siguiente comando.
- Reemplaza MODEL_ID por el identificador del modelo.
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID
Enumera conjuntos de datos
Puedes enumerar los conjuntos de datos del proyecto, junto con sus identificadores, mediante el siguiente comando:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets
Borra un conjunto de datos
Puedes borrar un conjunto de datos mediante el siguiente comando.
- Reemplaza DATASET_ID por el identificador del modelo.
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID