Comienza a usar el algoritmo de detección de objetos de imagen integrado

Con los algoritmos integrados en AI Platform Training, puedes enviar los datos de entrenamiento, seleccionar un algoritmo y permitir que AI Platform Training controle procesamiento previo y el entrenamiento, sin tener que escribir ningún código para una aplicación de entrenamiento. Los algoritmos de imagen integrados te permiten entrenar en TPU con una configuración mínima. El modelo guardado de TensorFlow resultante es compatible con la deriva en CPU y GPU.

Descripción general

En este instructivo, entrenarás un modelo de detección de objetos de imagen sin escribir ningún código. Envía el conjunto de datos COCO a AI Platform Training para el entrenamiento y, luego, implementa el modelo en AI Platform Training con el fin de obtener predicciones. El modelo resultante clasifica los objetos comunes que aparecen en imágenes de escenas cotidianas complejas.

Antes de comenzar

Para completar este instructivo en la línea de comandos, usa Cloud Shell o cualquier entorno en el que esté instalado Google Cloud CLI.

Completa los siguientes pasos para configurar una cuenta de GCP, habilitar las API necesarias y, también, instalar y activar Google Cloud CLI.

  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 la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de AI Platform Training & Prediction and Compute Engine.

    Habilita las API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita las API de AI Platform Training & Prediction and Compute Engine.

    Habilita las API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init

Autoriza a Cloud TPU para que tenga acceso al proyecto

Sigue estos pasos para autorizar el nombre de la cuenta de servicio de Cloud TPU asociada con tu proyecto de Google Cloud:

  1. Llama a projects.getConfig para obtener el nombre de la cuenta de servicio de Cloud TPU. Ejemplo:

    PROJECT_ID=PROJECT_ID
    
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
    
  2. Guarda el valor de los campos serviceAccountProject y tpuServiceAccount que muestra la API.

  3. Inicializa la cuenta de servicio de Cloud TPU:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
      -H "Content-Type: application/json" -d '{}'  \
      https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
    

A continuación, agrega la cuenta de servicio de Cloud TPU como miembro del proyecto con la función de agente de servicios de Cloud ML. Completa los siguientes pasos en Google Cloud Console o con el comando gcloud:

Consola

  1. Accede a la consola de Google Cloud y elige el proyecto en el que estés usando la TPU.
  2. Elige IAM y administración > IAM.
  3. Haz clic en el botón Agregar para agregar un miembro al proyecto.
  4. Ingresa la cuenta de servicio de la TPU en el cuadro de texto Miembros.
  5. Haz clic en la lista desplegable Funciones.
  6. Habilita la función Agente de servicios de Cloud ML (Administración de servicios > Agente de servicios de Cloud ML).

gcloud

  1. Configura las variables de entorno que contengan el ID del proyecto y la cuenta de servicio de Cloud TPU:

    PROJECT_ID=PROJECT_ID
    SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
    
  2. Otorga la función ml.serviceAgent a la cuenta de servicio de Cloud TPU:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
    

Si quieres obtener más detalles para otorgar funciones a las cuentas de servicio, consulta la documentación de IAM.

Configuración

Modificamos el conjunto de datos COCO para usarlo en este instructivo y lo alojamos en un depósito público de Cloud Storage, gs://cloud-samples-data/ai-platform/built-in/image/coco/.

Consola

Selecciona tu algoritmo

  1. Ve a la página Trabajos de AI Platform Training en la consola de Google Cloud:

    Página Trabajos de AI Platform Training

  2. Haz clic en el botón Trabajo de entrenamiento nuevo. En las opciones que se muestran a continuación, haz clic en Entrenamiento de algoritmos integrados. Aparecerá la página Crear un trabajo de entrenamiento nuevo.

  3. La creación de un trabajo de entrenamiento se divide en cuatro pasos. El primero es Algoritmo de entrenamiento. Selecciona Detección de objetos de imagen y haz clic en Siguiente.

Datos de entrenamiento

  1. En la sección Datos de entrenamiento, selecciona los datos de entrenamiento para el conjunto de datos de muestra, que está alojado en nuestro depósito público de Cloud Storage:

    1. Selecciona Usar varios archivos almacenados en un directorio de Cloud Storage.

    2. En Ruta de acceso del directorio, escribe “cloud-samples-data/ai-platform/built-in/image/coco/”.

    3. En Nombre del comodín, escribe “train*” para seleccionar todos los archivos de entrenamiento en el directorio.

    4. A continuación, se muestra la Ruta de acceso completa de GCS: “gs://cloud-samples-data/ai-platform/built-in/image/coco/train*”

  2. En la sección Datos de validación, selecciona los datos de validación para el conjunto de datos de muestra, alojado en nuestro depósito público de Cloud Storage:

    1. Selecciona Usar varios archivos almacenados en un directorio de Cloud Storage.

    2. En Ruta de acceso del directorio, escribe “cloud-samples-data/ai-platform/built-in/image/coco/”.

    3. En Nombre del comodín, escribe “val*” para seleccionar todos los archivos de validación en el directorio.

    4. A continuación, se muestra la Ruta de acceso completa de GCS: “gs://cloud-samples-data/ai-platform/built-in/image/coco/val*”

  3. Especifica el directorio de resultados en tu bucket de Cloud Storage en el que deseas que AI Platform Training almacene el modelo entrenado, los puntos de control y otros resultados del trabajo de entrenamiento. Puedes completar la ruta de acceso exacta en el bucket o usar el botón Explorar para seleccionar la ruta.

gcloud

Configura las variables de entorno para el ID de tu proyecto, tu bucket de Cloud Storage, la ruta de acceso de Cloud Storage a los datos de entrenamiento y la selección del algoritmo.

Los algoritmos integrados de AI Platform Training se encuentran en contenedores de Docker que se alojan en Container Registry.

PROJECT_ID="YOUR_PROJECT_ID"
BUCKET_NAME="YOUR_BUCKET_NAME"
REGION="us-central1"

gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/val*"

# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest"

Envía un trabajo de entrenamiento

Para enviar un trabajo, debes especificar algunos argumentos básicos de entrenamiento y algunos argumentos básicos relacionados con el algoritmo de detección de objetos de imagen.

Argumentos generales para el trabajo de entrenamiento:

Argumentos del trabajo de entrenamiento
Argumento Descripción
job-id ID único para el trabajo de entrenamiento. Puedes usarlo para buscar registros del estado de tu trabajo de entrenamiento una vez que lo hayas enviado.
job-dir Ruta de acceso de Cloud Storage en la que AI Platform Training guarda los archivos de entrenamiento después de completar un trabajo de entrenamiento de forma correcta.
scale-tier Especifica los tipos de máquinas para el entrenamiento. Usa BASIC para seleccionar una configuración de una sola máquina.
master-image-uri Es el URI de Container Registry usado para especificar qué contenedor de Docker se usará en el trabajo de entrenamiento. Usa el contenedor para el algoritmo de detección de objetos de imagen integrado que se definió con anterioridad como IMAGE_URI.
region Especifica la región disponible en la que deseas ejecutar el trabajo de entrenamiento. Para este instructivo, puedes usar la región us-central1.

Argumentos específicos del algoritmo de detección de objetos de imagen integrado:

Argumentos del algoritmo
Argumento Descripción
training_data_path Es la ruta de acceso a un patrón de ruta de TFRecord que se usa para el entrenamiento.
validation_data_path Es la ruta de acceso a un patrón de ruta de TFRecord que se usa para la validación.
pretrained_checkpoint_path Es la ruta de acceso de los puntos de control previamente entrenados. Puedes usar algunos puntos de control publicados.
num_classes Es la cantidad de clases en los datos de entrenamiento o validación.
max_steps Es la cantidad de pasos que ejecutará el trabajo de entrenamiento.
train_batch_size Es la cantidad de imágenes que se usarán por cada paso de entrenamiento.
num_eval_images Es la cantidad total de imágenes que se usan para la evaluación.
Si es 0, todas las imágenes en validation_data_path se usarán para la evaluación.
learning_rate_decay_type Es el método por el que la tasa de aprendizaje disminuye durante el entrenamiento.
warmup_learning_rate Es la tasa de aprendizaje al comienzo de la fase de preparación.
warmup_steps Es la cantidad de pasos que se deben ejecutar durante la fase de preparación o su duración en pasos. El trabajo de entrenamiento usa warmup_learning_rate durante la fase de preparación. Cuando finaliza la fase de preparación, el trabajo de entrenamiento usa initial_learning_rate.
initial_learning_rate Es la tasa de aprendizaje inicial después de que se complete la fase de preparación.
stepwise_learning_rate_steps Son los pasos para disminuir o cambiar las tasas de aprendizaje en el tipo de disminución gradual de la tasa.
Por ejemplo, 100,200 significa que la tasa de aprendizaje cambiará (con respecto a stepwise_learning_rate_levels) en el paso 100 y en el paso 200. Ten en cuenta que solo se respetará cuando learning_rate_decay_type esté configurado como gradual.
stepwise_learning_rate_levels Es el valor de la tasa de aprendizaje de cada paso en el tipo de disminución gradual de la tasa. Ten en cuenta que solo se respetará cuando learning_rate_decay_type esté configurado como gradual.
image_size Es el tamaño de la imagen (ancho y alto) que se usa para el entrenamiento.
optimizer_type Es el optimizador que se usa para el entrenamiento. Debe ser uno de los siguientes:
{momentum, adam, adadelta, adagrad, rmsprop}
optimizer_arguments Se trata de los argumentos para el optimizador. Es una lista separada por comas de pares “nombre=valor”. Debe ser compatible con optimizer_type. Ejemplos:
  • Para el optimizador Momentum, acepta momentum=0.9. Consulta tf.train.MomentumOptimizer para obtener más detalles.
  • Para el optimizador Adam, puede ser beta1=0.9,beta2=0.999. Consulta tf.train.AdamOptimizer para obtener más detalles.
  • Para el optimizador RMSProp, puede ser decay=0.9,momentum=0.1,epsilon=1e-10. Consulta RMSPropOptimizer para obtener más detalles.
fpn_type Es el tipo de red de pirámide de características (FPN) de varios niveles. Debe ser una de las siguientes opciones: {fpn, nasfpn}.
resnet_depth Es la profundidad de la red troncal ResNet. Debe ser una de las siguientes opciones: {18,34,50,101,152,200}.
max_num_bboxes_in_training Es la cantidad máxima de cuadros de límite propuestos para usar en el entrenamiento.
max_num_bboxes_in_prediction Es la cantidad máxima de cuadros de límite propuestos para usar en los resultados de la predicción.
bbox_aspect_ratios Es la escala de tamaño de los cuadros de base que representan la relación de aspecto de los cuadros agregados en cada nivel. El número indica la relación entre el ancho y el alto. Por ejemplo, “1.0,2.0,0.5” agrega tres cuadros en cada nivel de escala.
nms_iou_threshold Es el umbral con el que se decide si los cuadros de límite se superponen con respecto a la IOU para la supresión que no es la máxima.
nms_score_threshold Es el umbral para decidir cuándo quitar cuadros de límite en función de la puntuación.
focal_loss_alpha Es el valor alfa de pérdida focal (parámetro de equilibrio).
focal_loss_gamma Es el valor de Gamma de pérdida focal (parámetro de enfoque).
aug_scale_min Es la escala mínima aplicada durante el aumento de imágenes. Su valor está entre [0, 1.0].
aug_scale_max Es la escala máxima aplicada durante el aumento de imágenes. Su valor está entre [1.0, inf].
aug_rand_hflip Booleano. Si se establece en verdadero, esta configuración aumenta el entrenamiento con un giro horizontal aleatorio.

Para ver una lista detallada de todas las otras marcas del algoritmo de detección de objetos de imagen, consulta la referencia del algoritmo de detección de objetos de imagen integrado.

Consola

Argumentos del algoritmo

En la primera parte de la pestaña Argumentos del algoritmo, escribe los siguientes valores:

  • Cantidad de clases: 91
  • Pasos máximos: 15,000
  • Tamaño del lote del entrenamiento: 64
  • Cantidad de imágenes de evaluación: 5,000

En la Sección del modelo de la pestaña Argumentos del algoritmo, haz lo siguiente:

  1. En Ruta de acceso del punto de control previamente entrenado, escribe gs://cloud-samples-data/ai-platform/built-in/image/pretrained_checkpoints/detection/.

  2. Deja todos los otros campos con su configuración predeterminada y, a continuación, haz clic en Siguiente.

Configuración del trabajo

En la pestaña Configuración del trabajo, haz lo siguiente:

  1. Ingresa un ID de trabajo único (como “object_detection_example”).
  2. Ingresa una región disponible (como “us-central1”).
  3. A fin de elegir los tipos de máquinas, selecciona “CUSTOM” para el nivel de escala. Aparecerá una sección para que proporciones la especificación personalizada del clúster.
    1. En Tipo de instancia principal, selecciona complex_model_m.
    2. En Tipo de trabajador, selecciona cloud_tpu. El recuento de trabajadores se establece de forma predeterminada en 1.

Haz clic en Listo para enviar el trabajo de entrenamiento.

gcloud

  1. Configura todos los argumentos para el trabajo de entrenamiento y el algoritmo antes de usar gcloud a fin de enviar el trabajo:

    DATASET_NAME="coco"
    ALGORITHM="object_detection"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. Envía el trabajo:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --job-dir=$JOB_DIR \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --train_batch_size=64 \
      --num_eval_images=500 \
      --train_steps_per_eval=2000 \
      --max_steps=15000 \
      --num_classes=90 \
      --warmup_steps=500 \
      --initial_learning_rate=0.08 \
      --fpn_type="nasfpn" \
      --aug_scale_min=0.8 \
      --aug_scale_max=1.2
    

  3. Una vez que enviaste el trabajo de forma correcta, puedes ver los registros si ejecutas los siguientes comandos de gcloud:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

Conoce tu directorio de trabajos

Después de completar con éxito un trabajo de entrenamiento, AI Platform Training crea un modelo entrenado en el bucket de Cloud Storage, junto con otros artefactos. Encontrarás la siguiente estructura de directorio dentro de tu JOB_DIR:

  • model/ (un directorio de modelo guardado de TensorFlow que también contiene un archivo deployment_config.yaml)
    • saved_model.pb
    • deployment_config.yaml
  • eval/
    • events.out.tfevents.[timestamp].cmle-training-[timestamp]
    • events.out.tfevents...
    • ...
  • variables/
    • variables.data-00000-of-00001
    • variables.index

El directorio de trabajos también contiene varios archivos de puntos de control del modelo.

Confirma que la estructura de tu directorio en JOB_DIR coincida con la siguiente:

gsutil ls -a $JOB_DIR/*

Implementa el modelo entrenado

AI Platform Training organiza los modelos entrenados mediante recursos de model y de model. Un modelo AI Platform Training es un contenedor para las versiones del modelo de aprendizaje automático.

Para implementar un modelo, debes crear un recurso de modelo en AI Platform Training, crear una versión de ese modelo y, luego, usar el modelo y la versión para solicitar predicciones en línea.

Para obtener más información sobre cómo implementar modelos en AI Platform Training, consulta Cómo implementar un modelo de TensorFlow.

Consola

  1. En la página Trabajos puedes encontrar una lista de todos tus trabajos de entrenamiento. Haz clic en el nombre del trabajo de entrenamiento que acabas de enviar (“object_detection” o el nombre de trabajo que usaste).

  2. En la página Detalles del trabajo puedes ver el progreso general de tu trabajo, o haz clic en Ver registros para obtener una vista más detallada de su progreso.

  3. Cuando el trabajo se haya completado correctamente, aparecerá el botón Implementar modelo en la parte superior. Haz clic en Implementar modelo.

  4. Selecciona Implementar como modelo nuevo y, luego, ingresa un nombre para el modelo, como “algorithms_object_detection_model”. Luego, haz clic en Confirmar.

  5. En la página Crear versión, ingresa un nombre de versión, como "v1", y deja todos los otros campos con su configuración predeterminada. Haz clic en Guardar.

gcloud

El proceso de entrenamiento con el algoritmo de detección de objetos de imagen integrado genera un archivo, deployment_config.yaml, que facilita la implementación del modelo en AI Platform Training para las predicciones.

  1. Copia el archivo en tu directorio local y visualiza su contenido:

    gsutil cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    El archivo deployment_config.yaml debería ser similar al que se muestra a continuación:

    deploymentUri: gs://BUCKET_NAME/algorithms_training/coco_object_detection/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: coco_object_detection_20190227060114
    runtimeVersion: '1.14'
    
  2. Crea el modelo y la versión en AI Platform Training:

    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    La versión tarda unos minutos en crearse.

Obtén predicciones en línea

Cuando solicitas predicciones, debes asegurarte de que tus datos de entrada tengan el formato JSON.

  1. Descarga los archivos de artefactos de entrenamiento:

    gsutil cp $JOB_DIR/artifacts/* .
    
  2. Prepara la entrada de predicción para una imagen.

    Para enviar una solicitud de predicción en línea mediante la CLI de Google Cloud, como en este ejemplo, escribe cada instancia en una fila del archivo JSON delimitado por saltos de línea.

    Ejecuta los siguientes comandos en tu terminal a fin de crear entradas para una sola instancia que puedas enviar a AI Platform Prediction:

    Con la siguiente secuencia de comandos de Python, se codifica una sola imagen con base64, se le da el formato adecuado para la predicción, se agrega una clave de instancia y se escribe el resultado en un archivo llamado prediction_instances.json:

    import json
    import base64
    import tensorflow as tf
    
    IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/coco_sample.jpeg'
    
    with tf.gfile.Open(IMAGE_URI, 'rb') as image_file:
      encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
    image_bytes = {'b64': str(encoded_string)}
    instances = {'image_bytes': image_bytes, 'key': '1'}
    with open("prediction_instances.json","w") as f:
      f.write(json.dumps(instances))
    
  3. Envía la solicitud de predicción:

    gcloud ai-platform predict --model $MODEL_NAME \
     --version $VERSION_NAME \
     --json-instances prediction_instances.json
    

Para cada objeto detectado dentro de la imagen, el resultado de la predicción incluye clases, puntuaciones y la ubicación de los cuadros de límite.

Acerca de los datos

El conjunto de datos Objetos comunes en contexto (COCO) de Microsoft es un conjunto de datos de detección, segmentación y subtitulado de objetos a gran escala.

¿Qué sigue?