Comienza a usar el algoritmo integrado de clasificación de imágenes

Con los algoritmos integrados en AI Platform Training, puedes enviar los datos de entrenamiento, seleccionar un algoritmo y permitir que AI Platform Training se encargue del 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 clasificación de imágenes sin escribir ningún código. Envía el conjunto de datos de flores a AI Platform Training para el entrenamiento e implementa el modelo en AI Platform Prediction para obtener las predicciones. El modelo resultante clasifica las imágenes de flores según las especies (margarita, tulipán, rosa, girasol o diente de león).

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. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    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 la consola de Google Cloud o usa el comando gcloud:

Console

  1. Accede a la consola de Google Cloud y elige el proyecto en el que usas 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 de flores de TensorFlow 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/flowers/.

Console

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 clasificación de imágenes 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 al directorio, completa: “cloud-samples-data/ai-platform/built-in/image/flowers/”

    3. En Nombre del comodín, completa “flowers_train*” para seleccionar todos los archivos de entrenamiento del directorio.

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

  2. En la sección Datos de validación, selecciona los datos de validación 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 al directorio, completa: “cloud-samples-data/ai-platform/built-in/image/flowers/”

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

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

  3. Especifica el directorio de resultados en tu depósito 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 depósito 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/flowers/flowers_train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*"

# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_classification: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 clasificación de imágenes.

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 Es la ruta de acceso de Cloud Storage en la que AI Platform Training guarda los archivos de entrenamiento tras 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 integrado de clasificación de imágenes definido antes 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 integrado de clasificación de imágenes:

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, 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.
model_type Es el tipo de arquitectura de modelo que se usa para entrenar modelos. Puede ser uno de los siguientes:
  • resnet-(18|34|50|101|152|200)
  • efficientnet-(b0|b1|b2|b3|b4|b5|b6|b7)
label_smoothing Es el parámetro de alisamiento de etiquetas usado en softmax_cross_entropy.
weight_decay Es el coeficiente de disminución de peso para la regularización L2. loss = cross_entropy + params['weight_decay'] * l2_loss

Para obtener una lista detallada de todas las demás marcas del algoritmo de clasificación de imágenes, consulta la referencia del algoritmo integrado de clasificación de imágenes.

Console

Argumentos del algoritmo

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

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

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

  1. En Tipo de modelo, selecciona Efficientnet-b4.
  2. Deja en blanco el campo Ruta de acceso al punto de control previamente entrenado.
  3. Deja Alisamiento de etiquetas y Disminución de peso en sus valores predeterminados.

Configuración del trabajo

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

  1. Ingresa un ID del trabajo único (por ejemplo, “image_classification_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="flowers"
    ALGORITHM="image_classification"
    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 \
      --master-image-uri=$IMAGE_URI \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --job-dir=$JOB_DIR \
      --max_steps=30000 \
      --train_batch_size=128 \
      --num_classes=5 \
      --num_eval_images=100 \
      --initial_learning_rate=0.128 \
      --warmup_steps=1000 \
      --model_type='efficientnet-b4'

  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:

gcloud storage ls $JOB_DIR/* --all-versions

Implementa el modelo entrenado

AI Platform Training organiza los modelos entrenados mediante recursos de modelo y de versión. 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.

Console

  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 (“image_classification” o el nombre que le diste al trabajo).

  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 de modelo, como “algorithms_image_classification_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 integrado de clasificación de imágenes 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:

    gcloud storage 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/flowers_image_classification/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: flowers_image_classification_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:

    gcloud storage 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/daisy.jpg'
    
    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
    

Lo más probable es que el resultado de la predicción incluya la clase daisy, lo que indica que el modelo implementado clasificó la imagen de entrada como una margarita. (Debido a que el entrenamiento no es determinista, el modelo puede variar).

Acerca de los datos

El equipo de TensorFlow proporciona el conjunto de datos de flores que se usa en este ejemplo para el entrenamiento.

¿Qué sigue?