Ejecute la segmentación de imágenes con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Ejecute la segmentación de imágenes con Amazon SageMaker JumpStart

En diciembre de 2020, AWS anunció la disponibilidad general de JumpStart de Amazon SageMaker, una capacidad de Amazon SageMaker que lo ayuda a comenzar rápida y fácilmente con el aprendizaje automático (ML). JumpStart proporciona ajuste e implementación con un solo clic de una amplia variedad de modelos previamente entrenados en tareas populares de ML, así como una selección de soluciones integrales que resuelven problemas comerciales comunes. Estas características eliminan el trabajo pesado de cada paso del proceso de ML, lo que facilita el desarrollo de modelos de alta calidad y reduce el tiempo de implementación.

Esta publicación es la tercera de una serie sobre el uso de JumpStart para tareas específicas de ML. En el Primer comentario, mostramos cómo puede ejecutar casos de uso de clasificación de imágenes en JumpStart. En el segunda publicación, mostramos cómo puede ejecutar casos de uso de clasificación de texto en JumpStart. En esta publicación, proporcionamos un tutorial paso a paso sobre cómo ajustar e implementar un modelo de segmentación de imágenes, utilizando modelos entrenados de MXNet. Exploramos dos formas de obtener el mismo resultado: a través de la interfaz gráfica de JumpStart en Estudio Amazon SageMaker, y programáticamente a través de API JumpStart.

Si desea pasar directamente al código de la API de JumpStart que explicamos en esta publicación, puede consultar los siguientes cuadernos de Jupyter de muestra:

Descripción general de JumpStart

JumpStart lo ayuda a comenzar con los modelos ML para una variedad de tareas sin escribir una sola línea de código. Al momento de escribir, JumpStart le permite hacer lo siguiente:

  • Implemente modelos previamente entrenados para tareas comunes de ML – JumpStart le permite abordar tareas comunes de ML sin esfuerzo de desarrollo al proporcionar una fácil implementación de modelos entrenados previamente en grandes conjuntos de datos disponibles públicamente. La comunidad de investigación de ML ha realizado un gran esfuerzo para que la mayoría de los modelos desarrollados recientemente estén disponibles públicamente para su uso. JumpStart alberga una colección de más de 300 modelos, que abarcan las 15 tareas de ML más populares, como detección de objetos, clasificación de texto y generación de texto, lo que facilita su uso a los principiantes. Estos modelos se extraen de centros de modelos populares como TensorFlow, PyTorch, Hugging Face y MXNet.
  • Ajuste fino de modelos preentrenados – JumpStart le permite ajustar modelos previamente entrenados sin necesidad de escribir su propio algoritmo de entrenamiento. En ML, la capacidad de transferir el conocimiento aprendido en un dominio a otro dominio se denomina transferencia de aprendizaje. Puede usar el aprendizaje por transferencia para producir modelos precisos en sus conjuntos de datos más pequeños, con costos de capacitación mucho más bajos que los involucrados en la capacitación del modelo original. JumpStart también incluye algoritmos de entrenamiento populares basados ​​en LightGBM, CatBoost, XGBoost y Scikit-learn, que puede entrenar desde cero para regresión tabular y clasificación.
  • Utilice soluciones prediseñadas – JumpStart proporciona un conjunto de 17 soluciones para casos de uso comunes de ML, como pronóstico de demanda y aplicaciones industriales y financieras, que puede implementar con solo unos pocos clics. Las soluciones son aplicaciones de aprendizaje automático integrales que unen varios servicios de AWS para resolver un caso de uso comercial particular. Ellos usan Formación en la nube de AWS plantillas y arquitecturas de referencia para una implementación rápida, lo que significa que son totalmente personalizables.
  • Consulte los ejemplos de cuadernos para los algoritmos de SageMaker – SageMaker proporciona un conjunto de algoritmos integrados para ayudar a los científicos de datos y profesionales de ML a comenzar a entrenar e implementar modelos de ML rápidamente. JumpStart proporciona cuadernos de muestra que puede usar para usar rápidamente estos algoritmos.
  • Revisar videos y blogs de capacitación – JumpStart también proporciona numerosas publicaciones de blog y videos que le enseñan cómo usar diferentes funcionalidades dentro de SageMaker.

JumpStart acepta configuraciones de VPC personalizadas y Servicio de administración de claves de AWS (AWS KMS) claves de cifrado, para que pueda utilizar los modelos y soluciones disponibles de forma segura dentro de su entorno empresarial. Puede pasar su configuración de seguridad a JumpStart dentro de Studio o a través del SDK de Python de SageMaker.

Segmentación semántica

La segmentación semántica delimita cada clase de objetos que aparecen en una imagen de entrada. Etiqueta (clasifica) cada píxel de la imagen de entrada con una etiqueta de clase de un conjunto predefinido de clases. Varios objetos de la misma clase se asignan a la misma máscara.

El modelo disponible para el ajuste fino construye una "cabeza" de red totalmente convolucional (FCN) sobre la red base. El paso de ajuste fino ajusta el FCNHead mientras mantiene congelados los parámetros del resto del modelo y devuelve el modelo ajustado. El objetivo es minimizar la pérdida de entropía cruzada softmax por píxel para entrenar el FCN. El modelo devuelto por el ajuste fino se puede implementar aún más para la inferencia.

El directorio de entrada debería verse como el siguiente código si los datos de entrenamiento contienen dos imágenes. Los nombres de los archivos .png pueden ser cualquier cosa.

input_directory
    |--images
        |--abc.png
        |--def.png
    |--masks
        |--abc.png
        |--def.png
    class_label_to_prediction_index.json

Los archivos de máscara deben tener información de etiqueta de clase para cada píxel.

Segmentación de instancias

La segmentación de instancias detecta y delimita cada objeto de interés distinto que aparece en una imagen. Etiqueta cada píxel con una etiqueta de instancia. Mientras que la segmentación semántica asigna la misma etiqueta a píxeles de varios objetos de la misma clase, la segmentación de instancias etiqueta además los píxeles correspondientes a cada aparición de un objeto en la imagen con una etiqueta separada.

Actualmente, JumpStart ofrece modelos solo de inferencia para la segmentación de instancias y no admite el ajuste fino.

Las siguientes imágenes ilustran la diferencia entre la inferencia en la segmentación semántica y la segmentación de instancias. La imagen original tiene dos personas en la imagen. La segmentación semántica trata a varias personas en la imagen como una sola entidad: Person. Sin embargo, la segmentación de instancias identifica personas individuales dentro de la Person categoría.

Resumen de la solución

Las siguientes secciones proporcionan una demostración paso a paso para realizar la segmentación semántica con JumpStart, tanto a través de la interfaz de usuario de Studio como a través de las API de JumpStart.

Seguimos los siguientes pasos:

  1. Acceda a JumpStart a través de la interfaz de usuario de Studio:
    1. Ejecute la inferencia en el modelo previamente entrenado.
    2. Ajuste el modelo preentrenado.
  2. Use JumpStart mediante programación con SageMaker Python SDK:
    1. Ejecute la inferencia en el modelo previamente entrenado.
    2. Ajuste el modelo preentrenado.

También discutimos características avanzadas adicionales de JumpStart.

Acceda a JumpStart a través de la interfaz de usuario de Studio

En esta sección, demostramos cómo entrenar e implementar modelos JumpStart a través de la interfaz de usuario de Studio.

Ejecutar inferencia en el modelo previamente entrenado

El siguiente video le muestra cómo encontrar un modelo de segmentación semántica previamente entrenado en JumpStart e implementarlo. La página del modelo contiene información valiosa sobre el modelo, cómo usarlo, el formato de datos esperado y algunos detalles de ajuste. Puede implementar cualquiera de los modelos preentrenados disponibles en JumpStart. Para la inferencia, elegimos el tipo de instancia ml.g4dn.xlarge. Proporciona la aceleración de GPU necesaria para una latencia de inferencia baja, pero a un precio más bajo. Después de configurar la instancia de alojamiento de SageMaker, elija Despliegue. Pueden pasar entre 5 y 10 minutos hasta que su terminal persistente esté en funcionamiento.

Después de unos minutos, su punto final está operativo y listo para responder a las solicitudes de inferencia.

De manera similar, puede implementar un modelo de segmentación de instancias previamente entrenado siguiendo los mismos pasos en el video anterior mientras busca la segmentación de instancias en lugar de la segmentación semántica en la barra de búsqueda de JumpStart.

Afinar el modelo pre-entrenado

El siguiente video muestra cómo encontrar y ajustar un modelo de segmentación semántica en JumpStart. En el video, afinamos el modelo usando el Conjunto de datos PennFudanPed, proporcionado por defecto en JumpStart, que puede descargar bajo el Licencia Apache 2.0.

El ajuste fino de su propio conjunto de datos implica tomar el formato correcto de los datos (como se explica en la página del modelo), subirlo a Servicio de almacenamiento simple de Amazon (Amazon S3) y especificando su ubicación en la configuración del origen de datos. Usamos los mismos valores de hiperparámetro establecidos de forma predeterminada (número de épocas, tasa de aprendizaje y tamaño del lote). También usamos un ml.p3.2xlarge respaldado por GPU como nuestra instancia de capacitación de SageMaker.

Puede monitorear su trabajo de entrenamiento ejecutándose directamente en la consola de Studio y recibir una notificación cuando finalice. Una vez completada la capacitación, puede implementar el modelo ajustado desde la misma página que contiene los detalles del trabajo de capacitación. El flujo de trabajo de implementación es el mismo que implementar un modelo previamente entrenado.

Utilice JumpStart mediante programación con el SDK de SageMaker

En las secciones anteriores, mostramos cómo puede usar la interfaz de usuario de JumpStart para implementar un modelo previamente entrenado y ajustarlo de forma interactiva, en cuestión de unos pocos clics. Sin embargo, también puede usar los modelos de JumpStart y ajustarlos fácilmente mediante programación mediante el uso de API que están integradas en el SDK de SageMaker. Ahora repasamos un ejemplo rápido de cómo puede replicar el proceso anterior. Todos los pasos de esta demostración están disponibles en los cuadernos adjuntos. Introducción a JumpStart: segmentación de instancias y Introducción a JumpStart – Segmentación Semántica.

Ejecutar inferencia en el modelo previamente entrenado

En esta sección, elegimos un modelo preentrenado adecuado en JumpStart, implementamos este modelo en un punto final de SageMaker y ejecutamos la inferencia en el punto final implementado.

SageMaker es una plataforma basada en contenedores Docker. JumpStart utiliza el marco específico disponible Contenedores de aprendizaje profundo de SageMaker (DLC). Obtenemos cualquier paquete adicional, así como scripts para manejar el entrenamiento y la inferencia para la tarea seleccionada. Finalmente, los artefactos del modelo pre-entrenados se recuperan por separado con model_uris, lo que proporciona flexibilidad a la plataforma. Puede usar cualquier cantidad de modelos entrenados previamente para la misma tarea con un solo script de entrenamiento o inferencia. Ver el siguiente código:

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Por ejemplo, la segmentación, podemos establecer model_id a mxnet-semseg-fcn-resnet50-ade. El está en el identificador corresponde a la segmentación de instancias.

A continuación, alimentamos los recursos en un modelo de SageMaker instancia e implementar un punto final:

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

¡Después de unos minutos, nuestro modelo se implementa y podemos obtener predicciones en tiempo real!

El siguiente fragmento de código le da una idea de cómo se ve la segmentación semántica. Se visualiza la máscara predicha para cada píxel. Para obtener inferencias de un modelo implementado, se debe proporcionar una imagen de entrada en formato binario. La respuesta del punto final es una etiqueta predicha para cada píxel de la imagen. usamos el query_endpoint y parse_response funciones auxiliares, que se definen en el cuaderno de acompañamiento:

query_response = query(base_model_predictor, pedestrian_img)
predictions, labels, image_labels = parse_response(query_response)
print("Objects present in the picture:", image_labels)

Afinar el modelo pre-entrenado

Para ajustar un modelo seleccionado, necesitamos obtener el URI de ese modelo, así como el del script de entrenamiento y la imagen del contenedor que se usa para el entrenamiento. Afortunadamente, estas tres entradas dependen únicamente del nombre del modelo, la versión (para obtener una lista de los modelos disponibles, consulte Tabla de modelos disponibles de JumpStart)y el tipo de instancia en la que desea entrenar. Esto se demuestra en el siguiente fragmento de código:

from sagemaker import image_uris, model_uris, script_uris

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"
training_instance_type = "ml.p3.2xlarge"
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,)# 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 to further fine-tune

train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

Recuperamos el model_id correspondiente al mismo modelo que usamos anteriormente. Ahora puede ajustar este modelo de JumpStart en su propio conjunto de datos personalizado mediante el SDK de SageMaker. Usamos un conjunto de datos que está alojado públicamente en Amazon S3, convenientemente enfocado en la segmentación semántica. El conjunto de datos debe estar estructurado para un ajuste fino como se explica en la sección anterior. Consulte el siguiente código de ejemplo:

# URI of your training dataset
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_SemSeg/"
training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning")# Create SageMaker Estimator instance
semseg_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,)# Launch a SageMaker Training job by passing s3 path of the training data
semseg_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Obtenemos los mismos hiperparámetros por defecto para nuestro modelo seleccionado que los que vimos en la sección anterior, usando sagemaker.hyperparameters.retrieve_default(). Luego instanciamos un estimador de SageMaker y llamamos al .fit para comenzar a ajustar nuestro modelo, pasándole el URI de Amazon S3 para nuestros datos de entrenamiento. los entry_point El script proporcionado se llama transfer_learning.py (lo mismo para otras tareas y modelos), y el canal de datos de entrada se pasa a .fit debe ser nombrado training.

Mientras el algoritmo se entrena, puede monitorear su progreso en el cuaderno de SageMaker donde está ejecutando el código o en Reloj en la nube de Amazon. Cuando finaliza el entrenamiento, los artefactos del modelo ajustados se cargan en la ubicación de salida de Amazon S3 especificada en la configuración del entrenamiento. Ahora puede implementar el modelo de la misma manera que el modelo previamente entrenado.

Características avanzadas

Además de ajustar e implementar modelos previamente entrenados, JumpStart ofrece muchas funciones avanzadas.

El primer sitio que te recomiendo es sintonización automática de modelos. Esto le permite ajustar automáticamente sus modelos de ML para encontrar los valores de hiperparámetros con la mayor precisión dentro del rango proporcionado a través de la API de SageMaker.

La segunda es entrenamiento incremental. Esto le permite entrenar un modelo que ya ha ajustado utilizando un conjunto de datos expandido que contiene un patrón subyacente que no se tuvo en cuenta en las ejecuciones de ajuste anteriores, lo que resultó en un rendimiento deficiente del modelo. El entrenamiento incremental ahorra tiempo y recursos porque no necesita volver a entrenar el modelo desde cero.

Conclusión

En esta publicación, mostramos cómo ajustar e implementar un modelo de segmentación semántica previamente entrenado y cómo adaptarlo para la segmentación de instancias mediante JumpStart. Puede lograr esto sin necesidad de escribir código. Pruebe la solución usted mismo y envíenos sus comentarios.

Para obtener más información sobre JumpStart y cómo puede usar modelos preentrenados de código abierto para una variedad de otras tareas de ML, consulte lo siguiente Vídeo de AWS re: Invent 2020.


Acerca de los autores

Ejecute la segmentación de imágenes con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Dr. Vivek Madan es un científico aplicado del equipo JumpStart de Amazon SageMaker. Obtuvo su doctorado en la Universidad de Illinois en 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.

Ejecute la segmentación de imágenes con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.santosh kulkarni es un Arquitecto de Soluciones Empresariales en Amazon Web Services que trabaja con clientes deportivos en Australia. Le apasiona crear aplicaciones distribuidas a gran escala para resolver problemas comerciales utilizando su conocimiento en AI/ML, big data y desarrollo de software.

Ejecute la segmentación de imágenes con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.leonardo bachega es científico sénior y gerente del equipo JumpStart de Amazon SageMaker. Le apasiona crear servicios de inteligencia artificial para la visión por computadora.

Sello de tiempo:

Mas de Aprendizaje automático de AWS