Guía de inicio rápido sobre la creación de modelos de Cloud mediante la API de AutoML

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, usarás 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

  1. 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.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyecto

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las API de AutoML and Cloud Storage.

    Habilita las API

  5. Instala la herramienta de línea de comandos de gcloud.
  6. Sigue las instrucciones a fin de crear una cuenta de servicio y descargar un archivo de claves para esa cuenta.
  7. Establece la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta de acceso al archivo de claves de la cuenta de servicio que descargaste cuando creaste la cuenta de servicio.
    export GOOGLE_APPLICATION_CREDENTIALS=key-file
  8. Establece la variable de entorno PROJECT_ID para tu ID del proyecto.
    export PROJECT_ID=your-project-id
    Las llamadas a la API de AutoML y los nombres de los recursos incluyen el ID del proyecto. La variable de entorno PROJECT_ID proporciona una manera conveniente de especificar el ID.
  9. Si eres propietario del proyecto, agrega tu cuenta de servicio a la función de IAM del Editor de AutoML y reemplaza service-account-name por el nombre de la nueva cuenta de servicio. Por ejemplo, service-account1@myproject.iam.gserviceaccount.com.
    gcloud auth login
    gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member="serviceAccount:service-account-name" \
       --role="roles/automl.editor"
    
  10. De lo contrario (si no eres propietario del proyecto), pídele al propietario que agregue tu ID de usuario y tu cuenta de servicio a la función de IAM de editor de AutoML.

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,,
Ejemplo de una imagen de conjunto de datos
3916261642_0a504acd60_o.jpg

Cada fila corresponde a un objeto ubicado dentro de una imagen más grande, 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 que se muestra arriba, 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 vértice 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 application-default print-access-token a fin de obtener un token de acceso para la cuenta de servicio que configuraste antes en el tema. La ruta de acceso al archivo de claves de la cuenta de servicio se almacena en la variable de entorno GOOGLE_APPLICATION_CREDENTIALS.

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 application-default print-access-token)" \
-H "Content-Type: application/json" \
"https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets" -d '{
    "display_name": "your_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": "your_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 your-dataset-id por el identificador del conjunto de datos (no el nombre visible). Por ejemplo: IOD5491013845671477445.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets/your-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_NO}/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 your-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 application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/your-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_NO}/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 application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets

Deberías ver un resultado similar al siguiente:

{
  "datasets": [
    {
      "name": "projects/${PROJECT_NO}/locations/us-central1/datasets/dataset-id1",
      "displayName": "display_name1",
      "createTime": "2018-10-29T15:45:53.353442Z",
      "exampleCount": 227,
      "imageObjectDetectionDatasetMetadata": {}
    },
    {
      "name": "projects/${PROJECT_NO}/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 your-dataset-id por el identificador del conjunto de datos (no el nombre visible).
  • Reemplaza your_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 application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models -d '{
  "datasetId": "your-dataset-id",
  "displayName": "your_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_NO}/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 your-operation-id por el ID de la operación de entrenamiento.
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/your-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_NO}/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_NO}/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 application-default print-access-token)" \
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_NO}/locations/us-central1/models/IOD5644417707978784778",
      "displayName": "your_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 your-model-id por el identificador del modelo.
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/your-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 application-default print-access-token)" \
  -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 your-model-id por el identificador del modelo.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
"https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/your-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 application-default print-access-token)" \
  -H "Content-Type: application/json" \
  "https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/your-model-id:undeploy"

Realiza una limpieza

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 application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models

Borra un modelo

Puedes borrar un modelo con el siguiente comando.

  • Reemplaza your-model-id por el identificador del modelo.
curl -X DELETE -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/your-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 application-default print-access-token)" \
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 your-dataset-id por el identificador del modelo.
curl -X DELETE -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets/your-dataset-id