El entrenamiento mediante algoritmos integrados en AI Platform Training te permite enviar el conjunto de datos y entrenar un modelo sin escribir ningún código de entrenamiento. En esta página, se explica cómo funciona el algoritmo integrado de reconocimiento de objetos en imágenes y cómo usarlo.
Descripción general
El algoritmo integrado de reconocimiento de objetos en imágenes usa tus conjuntos de datos de entrenamiento y validación para entrenar modelos de forma continua y, luego, da como resultado el modelo guardado más preciso que se generó durante el trabajo de entrenamiento. También puedes usar el ajuste de hiperparámetros para lograr la máxima exactitud en el modelo. El modelo guardado que se exportó se puede usar directamente en la predicción, ya sea de forma local o mediante su implementación en AI Platform Prediction para el servicio de producción.
Limitaciones
Los algoritmos integrados de imagen admiten el entrenamiento con CPU, GPU o TPU únicas. El modelo guardado resultante es compatible con la deriva en CPU y GPU.
Las siguientes funciones no son compatibles con el entrenamiento por medio del algoritmo integrado de reconocimiento de objetos en imágenes:
- Entrenamiento distribuido. Para ejecutar un trabajo de entrenamiento distribuido de TensorFlow en AI Platform Training, debes crear una aplicación de entrenamiento.
- Entrenamiento con varias GPU. Los algoritmos integrados solo utilizan una GPU a la vez. Para aprovechar al máximo el entrenamiento con varias GPU en una máquina, debes crear una aplicación de entrenamiento. Encuentra más información acerca de los tipos de máquinas.
Tipos de máquina admitidos
Se admiten los siguientes niveles de escala y tipos de máquinas de AI Platform Training:
- Nivel de escala
BASIC
- Nivel de escala
BASIC_TPU
- Nivel de escala
CUSTOM
con cualquiera de los tipos de máquina de Compute Engine compatibles con AI Platform Training. - Nivel de escala
CUSTOM
con cualquiera de los siguientes tipos de máquinas heredadas:standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
complex_model_m_gpu
complex_model_l_gpu
complex_model_m_p100
complex_model_m_v100
complex_model_l_v100
TPU_V2
(8 núcleos)
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:
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
Guarda el valor de los campos
serviceAccountProject
ytpuServiceAccount
que muestra la API.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
- Accede a la consola de Google Cloud y elige el proyecto en el que usas la TPU.
- Elige IAM y administración > IAM.
- Haz clic en el botón Agregar para agregar un miembro al proyecto.
- Ingresa la cuenta de servicio de la TPU en el cuadro de texto Miembros.
- Haz clic en la lista desplegable Funciones.
- Habilita la función Agente de servicios de Cloud ML (Administración de servicios > Agente de servicios de Cloud ML).
gcloud
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
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.
Da formato a los datos de entrada para el entrenamiento
El algoritmo integrado de reconocimiento de objetos en imágenes requiere que los datos de entrada tengan el formato tf.Examples
y se guarden en archivos TFRecord. La estructura de datos tf.Example
y el formato de archivo TFRecord están diseñados para la lectura eficiente de datos con TensorFlow.
El formato TFRecord es un formato simple para almacenar una secuencia de registros binarios.
En este caso, todos los registros contienen representaciones binarias de imágenes. Cada imagen, junto con sus etiquetas de clase, se representa como tf.Example
. Puedes guardar muchos tf.Example
en un solo archivo TFRecord. También puedes fragmentar un conjunto de datos grande entre varios archivos TFRecord.
Obtén más información sobre TFRecord y tf.Example
.
Convierte tus imágenes a TFRecords
Si deseas convertir las imágenes al formato requerido a fin de obtener predicciones, sigue la guía de TensorFlow Model Journal para preparar entradas para la detección de objetos.
Verifica los permisos del bucket de Cloud Storage
A fin de almacenar tus datos, usa un bucket de Cloud Storage en el mismo proyecto de Google Cloud que usas para ejecutar trabajos de AI Platform Training. De lo contrario, otorga acceso a AI Platform Training al depósito de Cloud Storage en el que se almacenan tus datos.
Formato de entrada requerido
Para entrenar con el algoritmo integrado de reconocimiento de objetos en imágenes, los datos de imagen deben estructurarse como tf.Example
que incluyan los siguientes campos:
image/encoded
es la imagen sin procesar codificada como una string.image/object/class/label
es una lista de etiquetas de números enteros para la imagen correspondiente (una etiqueta por cuadro).El conjunto de etiquetas de números enteros que se usa para tu conjunto de datos debe ser una secuencia consecutiva que comience en
1
. Por ejemplo, si tu conjunto de datos tiene cinco clases, cada etiqueta debe ser un número entero en el intervalo[1, 5]
.image/object/bbox/xmin
es una lista de coordenadas normalizadas del eje x del lado izquierdo para la imagen correspondiente (una coordenada por cuadro). Cada coordenada debe estar en el intervalo[0, 1]
.image/object/bbox/xmax
es una lista de coordenadas normalizadas del eje x del lado derecho para la imagen correspondiente (una coordenada por cuadro). Cada coordenada debe estar en el intervalo[0, 1]
.image/object/bbox/ymin
es una lista de coordenadas normalizadas del eje x de la parte superior para la imagen correspondiente (una coordenada por cuadro). Cada coordenada debe estar en el intervalo[0, 1]
.image/object/bbox/ymax
es una lista de coordenadas normalizadas del eje x de la parte inferior para la imagen correspondiente (una coordenada por cuadro). Cada coordenada debe estar en el intervalo[0, 1]
.
En el siguiente ejemplo, se muestra la estructura de un tf.Example
para una imagen que contiene dos cuadros de límite. El primer cuadro tiene la etiqueta 1
, su esquina superior izquierda está en las coordenadas normalizadas (0.1, 0.4)
y su esquina inferior derecha está en las coordenadas normalizadas (0.5, 0.8)
. El segundo cuadro tiene la etiqueta 2
, la esquina superior izquierda está en las coordenadas normalizadas (0.3, 0.5)
y la esquina inferior derecha está en las coordenadas normalizadas (0.4, 0.7)
.
{
'image/encoded': '<encoded image data>',
'image/object/class/label': [1, 2],
'image/object/bbox/xmin': [0.1, 0.3],
'image/object/bbox/xmax': [0.5, 0.4],
'image/object/bbox/ymin': [0.4, 0.5],
'image/object/bbox/ymax': [0.8, 0.7]
}
Este formato tf.Example
sigue el mismo que se usa en la secuencia de comandos de reconocimiento de objetos TFRecord.
Obtén el mejor modelo guardado como resultado
Cuando finaliza el trabajo de entrenamiento, AI Platform Training escribe un modelo guardado de TensorFlow en el depósito de Cloud Storage que especificaste como jobDir
cuando enviaste el trabajo. El modelo guardado se escribe en jobDir/model
. Por ejemplo, si envías el trabajo a gs://your-bucket-name/your-job-dir
, AI Platform Training escribe el modelo guardado en gs://your-bucket-name/your-job-dir/model
.
Si habilitaste el ajuste de hiperparámetros, AI Platform Training muestra el modelo guardado de TensorFlow con la mayor exactitud que se obtuvo durante el proceso de entrenamiento. Por ejemplo, si enviaste un trabajo de entrenamiento con 2,500 pasos de entrenamiento y la mayor exactitud se produjo a los 2,000 pasos, se obtiene un modelo guardado de TensorFlow de ese punto en particular.
Cada prueba de AI Platform Training escribe el modelo guardado de TensorFlow con la mayor exactitud en su propio directorio dentro del bucket de Cloud Storage. Por ejemplo, gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
.
La firma del resultado del modelo guardado es la siguiente:
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['encoded_image'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: encoded_image_string_tensor:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['detection_boxes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100, 4)
name: detection_boxes:0
outputs['detection_classes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_classes:0
outputs['detection_scores'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_scores:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['num_detections'] tensor_info:
dtype: DT_FLOAT
shape: (-1)
name: num_detections:0
Method name is: tensorflow/serving/predict
Datos de entrada:
encoded_image
: Son los bytes de imagen sin formato (no decodificados). Equivale aimage/encoded
almacenado en tf.Example.key
: Es el identificador de valor de la string del resultado de la predicción. Este valor se envía a lakey
del resultado. En la predicción por lotes, esto ayuda a vincular el resultado de la predicción con la entrada.
Resultados:
num_detections
: Es la cantidad de cuadros de límite detectados.detection_boxes
: Es una lista de coordenadas ([ymin, xmin, ymax, xmax
]) relativas (valor en [0,1
]) de los cuadros de límite de detección.detection_classes
: Es una lista de etiquetas de clase previstas (números enteros) para cada cuadro de detección endetection_boxes
.detection_scores
: Es una lista descores
para cada cuadro de detección endetection_boxes
.key
: Es la clave del resultado.
El siguiente es un ejemplo de resultados de predicción:
{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}
Configuración de ejemplo
Si envías un trabajo mediante gcloud
, debes crear un archivo config.yaml
para las especificaciones de ajuste de hiperparámetros y tipo de máquina. Si usas la consola de Google Cloud, no es necesario que crees este archivo. Obtén información sobre cómo enviar un trabajo de entrenamiento.
En el siguiente archivo config.yaml
de ejemplo, se muestra cómo asignar recursos TPU para el trabajo de entrenamiento:
cat << EOF > config.yaml
trainingInput:
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
EOF
Luego usa el archivo config.yaml
para enviar un trabajo de entrenamiento.
Configuración del ajuste de hiperparámetros
Para usar el ajuste de hiperparámetros, incluye la configuración en el mismo archivo config.yaml
que la configuración de la máquina.
Puedes encontrar explicaciones breves de cada hiperparámetro en la consola de Google Cloud y una explicación más completa en la referencia para el algoritmo integrado de reconocimiento de objetos en imágenes.
En el siguiente archivo config.yaml
de ejemplo, se muestra cómo asignar recursos TPU para el trabajo de entrenamiento y, además, se incluye la configuración del ajuste de hiperparámetros:
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: "AP"
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
EOF
Envía un trabajo de entrenamiento de reconocimiento de objetos en imágenes
En esta sección, se explica cómo enviar un trabajo de entrenamiento con el algoritmo integrado de reconocimiento de objetos en imágenes.
Console
Selecciona tu algoritmo
Ve a la página Trabajos de AI Platform Training en la consola de Google Cloud:
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.
En la página Crear un trabajo de entrenamiento nuevo, selecciona reconocimiento de objetos en imágenes y haz clic en Siguiente.
Selecciona tus datos de entrenamiento y validación
En el cuadro desplegable debajo de Datos de entrenamiento, especifica si usas un solo archivo o varios:
- Si usas un solo archivo, selecciona “Usar un solo archivo en un depósito de GCS”.
- Si usas varios archivos, selecciona “Usar varios archivos almacenados en un directorio de Cloud Storage”.
En Ruta del directorio, haz clic en Explorar. En el panel derecho, haz clic en el nombre del bucket en el que subiste los datos de entrenamiento y navega hasta tu archivo.
Si seleccionas varios archivos, coloca los caracteres comodín en Nombre del comodín. La “Ruta de acceso completa de GCS” se muestra debajo para que puedas confirmar si es correcta.
En el cuadro desplegable debajo de Datos de validación, especifica si usas un solo archivo o varios:
- Si usas un solo archivo, selecciona “Usar un solo archivo en un depósito de GCS”.
- Si usas varios archivos, selecciona “Usar varios archivos almacenados en un directorio de Cloud Storage”.
En Ruta del directorio, haz clic en Explorar. En el panel derecho, haz clic en el nombre del bucket en el que subiste los datos de entrenamiento y navega hasta tu archivo.
Si seleccionas varios archivos, coloca los caracteres comodín en Nombre del comodín. La “Ruta de acceso completa de GCS” se muestra debajo para que puedas confirmar si es correcta.
En Directorio de resultados, ingresa la ruta de acceso al depósito de Cloud Storage en el que deseas que AI Platform Training almacene los resultados del trabajo de entrenamiento. Puedes completar la ruta de acceso al depósito de Cloud Storage directamente o hacer clic en el botón Explorar para seleccionarla.
A fin de mantener el orden, crea un directorio nuevo dentro del bucket de Cloud Storage para este trabajo de entrenamiento. Puedes hacerlo desde el panel Explorar.
Haz clic en Siguiente.
Configura los argumentos del algoritmo
Cada argumento específico del algoritmo muestra un valor predeterminado para los trabajos de entrenamiento sin ajuste de hiperparámetros. Si habilitas el ajuste de hiperparámetros en un argumento de algoritmo, debes especificar su valor mínimo y máximo.
Si deseas obtener más información sobre todos los argumentos del algoritmo, sigue los vínculos en la consola de Google Cloud y consulta la referencia del algoritmo integrado de reconocimiento de objetos en imágenes para conocer más detalles.
Envía el trabajo
En la pestaña Configuración del trabajo, haz lo siguiente:
- Ingresa un ID de trabajo único.
- Ingresa una región disponible (como “us-central1”).
- 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.
- Selecciona un tipo de máquina disponible para el tipo principal.
- Si deseas usar TPU, configura el Tipo de trabajador como cloud_tpu. El recuento de trabajadores se establece de forma predeterminada en 1.
Haz clic en Listo para enviar el trabajo de entrenamiento.
gcloud
Configura las variables de entorno para tu trabajo:
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME" # Specify the same region where your data is stored REGION="YOUR_REGION" gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION # Set Cloud Storage paths to your training and validation data # Include a wildcard if you select multiple files. TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord" VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord" # Specify the Docker container for your built-in algorithm selection IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="coco" ALGORITHM="object_detection" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}" DATE="$(date '+%Y%m%d_%H%M%S')" # Specify an ID for this job JOB_ID="${MODEL_NAME}_${DATE}" # Specify the directory where you want your training outputs to be stored JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
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=22500 \ --num_classes=90 \ --warmup_steps=500 \ --initial_learning_rate=0.08 \ --fpn_type="nasfpn" \ --aug_scale_min=0.8 \ --aug_scale_max=1.2
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
¿Qué sigue?
- Aprende a usar tu propio conjunto de datos con la secuencia de comandos de detección de objetos TFRecord.
- Consulta la referencia del algoritmo integrado de reconocimiento de objetos en imágenes para obtener información sobre los diferentes parámetros.