Transferir aprendizaje para modelos de clasificación de imágenes de TensorFlow en Amazon SageMaker

Amazon SageMaker proporciona un conjunto de algoritmos incorporados, modelos pre-entrenadosy plantillas de solución preconstruidas para ayudar a los científicos de datos y a los profesionales del aprendizaje automático (ML) a comenzar a entrenar e implementar modelos de ML rápidamente. Puede usar estos algoritmos y modelos para el aprendizaje supervisado y no supervisado. Pueden procesar varios tipos de datos de entrada, incluidos tabulares, imágenes y texto.

A partir de hoy, SageMaker ofrece un nuevo algoritmo integrado para la clasificación de imágenes: Clasificación de imágenes: TensorFlow. Es un algoritmo de aprendizaje supervisado que admite el aprendizaje por transferencia para muchos modelos preentrenados disponibles en Centro TensorFlow. Toma una imagen como entrada y genera probabilidad para cada una de las etiquetas de clase. Puede ajustar estos modelos preentrenados mediante el aprendizaje de transferencia, incluso cuando no hay disponible una gran cantidad de imágenes de entrenamiento. Está disponible a través de SageMaker. algoritmos incorporados así como a través del Interfaz de usuario JumpStart de SageMaker dentro Estudio Amazon SageMaker. Para más información, consulte su documentación. Clasificación de imágenes: TensorFlow y el cuaderno de ejemplo Introducción a SageMaker TensorFlow: clasificación de imágenes.

La clasificación de imágenes con TensorFlow en SageMaker proporciona transferencia de aprendizaje en muchos modelos previamente entrenados disponibles en TensorFlow Hub. De acuerdo con la cantidad de etiquetas de clase en los datos de entrenamiento, se adjunta una capa de clasificación al modelo de TensorFlow Hub previamente entrenado. La capa de clasificación consta de una capa de abandono y una capa densa, que es una capa totalmente conectada con un regularizador de 2 normas que se inicializa con pesos aleatorios. El entrenamiento del modelo tiene hiperparámetros para la tasa de abandono de la capa de abandono y el factor de regularización L2 para la capa densa. Luego, se puede ajustar toda la red, incluido el modelo preentrenado, o solo la capa de clasificación superior con los nuevos datos de entrenamiento. En este modo de transferencia de aprendizaje, puede lograr el entrenamiento incluso con un conjunto de datos más pequeño.

Cómo usar el nuevo algoritmo de clasificación de imágenes de TensorFlow

Esta sección describe cómo usar el algoritmo de clasificación de imágenes de TensorFlow con el SDK de SageMaker Python. Para obtener información sobre cómo usarlo desde la interfaz de usuario de Studio, consulte Inicio rápido de SageMaker.

El algoritmo admite el aprendizaje por transferencia para los modelos preentrenados que se enumeran en Modelos de concentradores TensorFlow. Cada modelo está identificado por un único model_id. El siguiente código muestra cómo ajustar MobileNet V2 1.00 224 identificado por model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 en un conjunto de datos de entrenamiento personalizado. Para cada model_id, para iniciar un trabajo de capacitación de SageMaker a través del Estimador clase del SDK de Python de SageMaker, debe obtener el URI de la imagen de Docker, el URI del script de entrenamiento y el URI del modelo previamente entrenado a través de las funciones de utilidad proporcionadas en SageMaker. El URI del script de entrenamiento contiene todo el código necesario para el procesamiento de datos, la carga del modelo previamente entrenado, el entrenamiento del modelo y el almacenamiento del modelo entrenado para la inferencia. El URI del modelo preentrenado contiene la definición de la arquitectura del modelo preentrenado y los parámetros del modelo. Tenga en cuenta que el URI de la imagen de Docker y el URI del script de entrenamiento son los mismos para todos los modelos de clasificación de imágenes de TensorFlow. El URI del modelo preentrenado es específico para el modelo en particular. Los tarballs de modelos preentrenados se han descargado previamente de TensorFlow Hub y se han guardado con la firma de modelo adecuada en Servicio de almacenamiento simple de Amazon (Amazon S3), de modo que el trabajo de entrenamiento se ejecuta en aislamiento de red. Ver el siguiente código:

from sagemaker import image_uris, model_uris, script_uris
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-ic-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Con estos artefactos de entrenamiento específicos del modelo, puede construir un objeto del Estimador clase:

# Create SageMaker Estimator instance
tf_ic_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

A continuación, para transferir el aprendizaje en su conjunto de datos personalizado, es posible que deba cambiar los valores predeterminados de los hiperparámetros de entrenamiento, que se enumeran en Hiperparámetros. Puede obtener un diccionario de Python de estos hiperparámetros con sus valores predeterminados llamando hyperparameters.retrieve_default, actualícelos según sea necesario y luego páselos a la clase Estimator. Tenga en cuenta que los valores predeterminados de algunos de los hiperparámetros son diferentes para diferentes modelos. Para modelos grandes, el tamaño de lote predeterminado es más pequeño y el train_only_top_layer hiperparámetro se establece en True. El hiperparámetro Train_only_top_layer define qué parámetros del modelo cambian durante el proceso de ajuste. Si train_only_top_layer is True, los parámetros de las capas de clasificación cambian y el resto de los parámetros permanecen constantes durante el proceso de ajuste fino. Por otro lado, si train_only_top_layer is False, todos los parámetros del modelo están ajustados. Ver el siguiente código:

from sagemaker import hyperparameters
# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

El siguiente código proporciona un conjunto de datos de entrenamiento predeterminado alojado en depósitos de S3. proporcionamos el tf_flowers conjunto de datos como un conjunto de datos predeterminado para ajustar los modelos. El conjunto de datos comprende imágenes de cinco tipos de flores. El conjunto de datos se ha descargado de TensorFlow bajo el Licencia Apache 2.0.

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/tf_flowers/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Finalmente, para iniciar el trabajo de capacitación de SageMaker para ajustar el modelo, llame .fit en el objeto de la clase Estimator, al pasar la ubicación S3 del conjunto de datos de entrenamiento:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Para obtener más información sobre cómo usar el nuevo algoritmo de clasificación de imágenes SageMaker TensorFlow para transferir el aprendizaje en un conjunto de datos personalizado, implementar el modelo ajustado, ejecutar inferencias en el modelo implementado e implementar el modelo previamente entrenado tal como está sin un ajuste fino previo en un conjunto de datos personalizado, consulte el siguiente cuaderno de ejemplo: Introducción a SageMaker TensorFlow: clasificación de imágenes.

Interfaz de entrada/salida para el algoritmo de clasificación de imágenes TensorFlow

Puede ajustar cada uno de los modelos preentrenados que se enumeran en Modelos de concentradores TensorFlow a cualquier conjunto de datos dado que comprenda imágenes pertenecientes a cualquier número de clases. El objetivo es minimizar el error de predicción en los datos de entrada. El modelo devuelto por el ajuste fino se puede implementar aún más para la inferencia. Las siguientes son las instrucciones sobre cómo se deben formatear los datos de entrenamiento para ingresarlos al modelo:

  • Entrada – Un directorio con tantos subdirectorios como clases. Cada subdirectorio debe tener imágenes pertenecientes a esa clase en formato .jpg, .jpeg o .png.
  • Salida – Un modelo ajustado que se puede implementar para la inferencia o se puede entrenar más mediante el entrenamiento incremental. Se agrega una firma de preprocesamiento y posprocesamiento al modelo ajustado de modo que toma una imagen .jpg sin procesar como entrada y devuelve las probabilidades de clase. Un archivo de asignación de índices de clase a etiquetas de clase se guarda junto con los modelos.

El directorio de entrada debería parecerse al siguiente ejemplo si los datos de entrenamiento contienen imágenes de dos clases: roses y dandelion. La ruta S3 debería verse como s3://bucket_name/input_directory/. Tenga en cuenta el final / es requerido. Los nombres de las carpetas y roses, dandelion, y los nombres de archivo .jpg pueden ser cualquier cosa. El archivo de asignación de etiquetas que se guarda junto con el modelo entrenado en el depósito S3 asigna los nombres de carpeta rosas y diente de león a los índices en la lista de probabilidades de clase que genera el modelo. La asignación sigue el orden alfabético de los nombres de las carpetas. En el siguiente ejemplo, el índice 0 en la lista de salida del modelo corresponde a dandelion, y el índice 1 corresponde a roses.

input_directory
    |--roses
        |--abc.jpg
        |--def.jpg
    |--dandelion
        |--ghi.jpg
        |--jkl.jpg

Inferencia con el algoritmo de clasificación de imágenes TensorFlow

Los modelos generados se pueden alojar para la inferencia y admitir formatos de imagen .jpg, .jpeg y .png codificados como el application/x-image tipo de contenido. La imagen de entrada cambia de tamaño automáticamente. La salida contiene los valores de probabilidad, las etiquetas de clase para todas las clases y la etiqueta predicha correspondiente al índice de clase con la probabilidad más alta, codificada en formato JSON. El modelo de clasificación de imágenes de TensorFlow procesa una sola imagen por solicitud y genera solo una línea en el JSON. El siguiente es un ejemplo de una respuesta en JSON:

accept: application/json;verbose

 {"probabilities": [prob_0, prob_1, prob_2, ...],
  "labels":        [label_0, label_1, label_2, ...],
  "predicted_label": predicted_label}

If accept se establece a application/json, entonces el modelo solo genera probabilidades. Para obtener más detalles sobre el entrenamiento y la inferencia, consulte el cuaderno de muestra Introducción a SageMaker TensorFlow: clasificación de imágenes.

Use los algoritmos integrados de SageMaker a través de la interfaz de usuario de JumpStart

También puede usar la clasificación de imágenes SageMaker TensorFlow y cualquiera de los otros algoritmos integrados con unos pocos clics a través de la interfaz de usuario de JumpStart. JumpStart es una función de SageMaker que le permite entrenar e implementar algoritmos integrados y modelos previamente entrenados desde varios marcos de ML y centros de modelos a través de una interfaz gráfica. También le permite implementar soluciones de aprendizaje automático completas que unen modelos de aprendizaje automático y varios otros servicios de AWS para resolver un caso de uso específico. Verificar Ejecute la clasificación de texto con Amazon SageMaker JumpStart usando TensorFlow Hub y Hugging Face models para descubrir cómo usar JumpStart para entrenar un algoritmo o un modelo previamente entrenado con unos pocos clics.

Conclusión

En esta publicación, anunciamos el lanzamiento del algoritmo integrado de clasificación de imágenes SageMaker TensorFlow. Brindamos un código de ejemplo sobre cómo transferir el aprendizaje en un conjunto de datos personalizado usando un modelo previamente entrenado de TensorFlow Hub usando este algoritmo. Para obtener más información, consulte documentación y del cuaderno de ejemplo.


Sobre los autores

Transferir el aprendizaje para los modelos de clasificación de imágenes de TensorFlow en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Dr. Ashish Khetan es un científico senior aplicado con Algoritmos integrados de Amazon SageMaker y ayuda a desarrollar algoritmos de aprendizaje automático. Obtuvo su doctorado en la Universidad de Illinois Urbana-Champaign. Es un investigador activo en aprendizaje automático e inferencia estadística, y ha publicado muchos artículos en conferencias NeurIPS, ICML, ICLR, JMLR, ACL y EMNLP.

Transferir el aprendizaje para los modelos de clasificación de imágenes de TensorFlow en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Dr. Vivek Madan es un científico aplicado con el Equipo JumpStart de Amazon SageMaker. Obtuvo su doctorado en la Universidad de Illinois Urbana-Champaign y fue investigador posdoctoral en Georgia Tech. Es un investigador activo en aprendizaje automático y diseño de algoritmos, y ha publicado artículos en conferencias EMNLP, ICLR, COLT, FOCS y SODA.

Transferir el aprendizaje para los modelos de clasificación de imágenes de TensorFlow en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.joão moura es un arquitecto de soluciones especializado en IA/ML en Amazon Web Services. Se centra principalmente en los casos de uso de NLP y en ayudar a los clientes a optimizar el entrenamiento y la implementación del modelo de aprendizaje profundo. También es un defensor activo de las soluciones de aprendizaje automático de código bajo y el hardware especializado en aprendizaje automático.

Transferir el aprendizaje para los modelos de clasificación de imágenes de TensorFlow en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Raju Penmatcha es un arquitecto senior de soluciones especializado en IA / ML en AWS. Trabaja con clientes del sector educativo, gubernamentales y sin fines de lucro en proyectos relacionados con el aprendizaje automático y la inteligencia artificial, ayudándolos a crear soluciones con AWS. Cuando no está ayudando a los clientes, le gusta viajar a lugares nuevos.

Sello de tiempo:

Mas de Aprendizaje automático de AWS