Módulo de etiquetado automático para sistemas avanzados de asistencia al conductor basados en aprendizaje profundo en AWS
Auto-Labeling Module for Advanced Deep Learning-based Driver Assistance Systems on AWS.
En visión por computadora (CV), agregar etiquetas para identificar objetos de interés o cuadros delimitadores para localizar los objetos se denomina etiquetado. Es una de las tareas previas necesarias para preparar datos de entrenamiento y entrenar un modelo de aprendizaje profundo. Se dedican cientos de miles de horas de trabajo para generar etiquetas de alta calidad a partir de imágenes y videos para diversos casos de uso de CV. Puede utilizar Amazon SageMaker Data Labeling de dos formas para crear estas etiquetas:
- Amazon SageMaker Ground Truth Plus – Este servicio proporciona una fuerza laboral experta entrenada en tareas de ML y puede ayudar a cumplir con los requisitos de seguridad, privacidad y cumplimiento de datos. Carga sus datos y el equipo de Ground Truth Plus crea y gestiona flujos de trabajo de etiquetado de datos y la fuerza laboral en su nombre.
- Amazon SageMaker Ground Truth – Alternativamente, puede gestionar sus propios flujos de trabajo de etiquetado de datos y fuerza laboral para etiquetar datos.
Específicamente, para sistemas de vehículos autónomos (AV) y sistemas avanzados de asistencia al conductor (ADAS) basados en aprendizaje profundo, es necesario etiquetar datos multimodales complejos desde cero, incluyendo flujos sincronizados de LiDAR, RADAR y múltiples cámaras. Por ejemplo, la siguiente figura muestra un cuadro delimitador 3D alrededor de un automóvil en la vista Point Cloud para datos de LiDAR, vistas ortogonales de LiDAR alineadas en los costados y siete flujos de cámara diferentes con etiquetas proyectadas del cuadro delimitador.
Los equipos de AV/ADAS necesitan etiquetar varios miles de cuadros desde cero y confían en técnicas como consolidación de etiquetas, calibración automática, selección de cuadros, interpolación de secuencias de cuadros y aprendizaje activo para obtener un único conjunto de datos etiquetados. Ground Truth admite estas características. Para obtener una lista completa de características, consulte Características de etiquetado de datos de Amazon SageMaker. Sin embargo, puede ser desafiante, costoso y llevar mucho tiempo etiquetar decenas de miles de millas de video y datos de LiDAR grabados para empresas que se dedican a crear sistemas AV/ADAS. Una técnica utilizada hoy en día para resolver este problema es el autoetiquetado, que se destaca en el siguiente diagrama para un diseño modular de funciones para ADAS en AWS.
- Los tres métodos esenciales para evaluar un nuevo modelo de lenguaje
- AI vs. Analítica Predictiva Un Análisis Exhaustivo
- ¿Qué es un Field Programmable Gate Array (FPGA)? FPGA vs. GPU para ...
En esta publicación, demostramos cómo utilizar las características de SageMaker, como los modelos de inicio rápido de Amazon SageMaker y las capacidades de inferencia asincrónica, junto con la funcionalidad de Ground Truth para realizar el autoetiquetado.
Descripción general del autoetiquetado
El autoetiquetado (a veces llamado preetiquetado) ocurre antes o junto con las tareas de etiquetado manual. En este módulo, se utiliza el mejor modelo entrenado hasta el momento para una tarea específica (por ejemplo, detección de peatones o segmentación de carriles) para generar etiquetas de alta calidad. Los etiquetadores manuales simplemente verifican o ajustan las etiquetas creadas automáticamente a partir del conjunto de datos resultante. Esto es más fácil, rápido y económico que etiquetar estos grandes conjuntos de datos desde cero. Los módulos posteriores, como los módulos de entrenamiento o validación, pueden utilizar estas etiquetas tal cual.
El aprendizaje activo es otro concepto que está estrechamente relacionado con el autoetiquetado. Es una técnica de aprendizaje automático (ML) que identifica los datos que deben ser etiquetados por sus trabajadores. La funcionalidad de etiquetado automático de Ground Truth es un ejemplo de aprendizaje activo. Cuando Ground Truth inicia un trabajo de etiquetado automático de datos, selecciona una muestra aleatoria de objetos de datos de entrada y los envía a los trabajadores humanos. Cuando se devuelve el conjunto de datos etiquetado, se utiliza para crear un conjunto de entrenamiento y un conjunto de validación. Ground Truth utiliza estos conjuntos de datos para entrenar y validar el modelo utilizado para el autoetiquetado. Luego, Ground Truth ejecuta un trabajo de transformación por lotes para generar etiquetas para datos no etiquetados, junto con puntuaciones de confianza para nuevos datos. Los datos etiquetados con puntuaciones de baja confianza se envían a los etiquetadores humanos. Se repite este proceso de entrenamiento, validación y transformación por lotes hasta que se etiqueta el conjunto de datos completo.
En contraste, el autoetiquetado asume que existe un modelo preentrenado de alta calidad (ya sea privado dentro de la empresa o público en un centro). Este modelo se utiliza para generar etiquetas confiables y utilizarlas en tareas posteriores, como tareas de verificación de etiquetas, entrenamiento o simulación. Este modelo preentrenado en el caso de los sistemas AV/ADAS se implementa en el automóvil en el borde y se puede utilizar en trabajos de inferencia por lotes a gran escala en la nube para generar etiquetas de alta calidad.
JumpStart proporciona modelos preentrenados y de código abierto para una amplia gama de tipos de problemas para ayudarlo a comenzar con el aprendizaje automático. Puede utilizar JumpStart para compartir modelos dentro de su organización. ¡Comencemos!
Resumen de la solución
En esta publicación, describimos los pasos principales sin revisar cada celda en nuestro cuaderno de ejemplo. Para seguir o probarlo por ti mismo, puedes ejecutar el cuaderno Jupyter en Amazon SageMaker Studio.
El siguiente diagrama proporciona una descripción general de la solución.
Configurar el rol y la sesión
Para este ejemplo, utilizamos un kernel de Data Science 3.0 en Studio en un tipo de instancia ml.m5.large. Primero, realizamos algunas importaciones básicas y configuramos el rol y la sesión para su uso posterior en el cuaderno:
import sagemaker, boto3, json
from sagemaker import get_execution_role
from utils import *
Crea tu modelo usando SageMaker
En este paso, creamos un modelo para la tarea de etiquetado automático. Puedes elegir entre tres opciones para crear un modelo:
- Crea un modelo desde JumpStart – Con JumpStart, podemos realizar inferencia en el modelo pre-entrenado, incluso sin ajustarlo previamente en un nuevo conjunto de datos
- Usa un modelo compartido a través de JumpStart con tu equipo u organización – Puedes usar esta opción si deseas utilizar un modelo desarrollado por uno de los equipos dentro de tu organización
- Usa un endpoint existente – Puedes usar esta opción si ya tienes un modelo desplegado en tu cuenta
Para usar la primera opción, seleccionamos un modelo de JumpStart (aquí, usamos mxnet-is-mask-rcnn-fpn-resnet101-v1d-coco
. Una lista de modelos está disponible en el archivo models_manifest.json
proporcionado por JumpStart.
Utilizamos este modelo de JumpStart que está disponible públicamente y entrenado en la tarea de segmentación de instancias, pero también puedes usar un modelo privado. En el siguiente código, usamos los parámetros image_uris
, model_uris
, y script_uris
para obtener los valores de parámetros correctos y utilizar este modelo de MXNet en la API sagemaker.model.Model
para crear el modelo:
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from sagemaker.utils import name_from_base
endpoint_name = name_from_base(f"jumpstart-example-infer-{model_id}")
inference_instance_type = "ml.p3.2xlarge"
# Recuperar la URI del contenedor de Docker de inferencia
deploy_image_uri = image_uris.retrieve(
region=None,
framework=None, # se infiere automáticamente a partir del model_id
image_scope="inference",
model_id=model_id,
model_version=model_version,
instance_type=inference_instance_type,
)
# Recuperar la URI del script de inferencia. Esto incluye scripts para la carga del modelo, el manejo de la inferencia, etc.
deploy_source_uri = script_uris.retrieve(
model_id=model_id, model_version=model_version, script_scope="inference"
)
# Recuperar la URI del modelo base
base_model_uri = model_uris.retrieve(
model_id=model_id, model_version=model_version, model_scope="inference"
)
# Crear la instancia del modelo de SageMaker
model = Model(
image_uri=deploy_image_uri,
source_dir=deploy_source_uri,
model_data=base_model_uri,
entry_point="inference.py", # archivo de punto de entrada en source_dir y presente en deploy_source_uri
role=aws_role,
predictor_cls=Predictor,
name=endpoint_name,
)
Configurar la inferencia asíncrona y el escalado
Aquí configuramos una configuración de inferencia asíncrona antes de implementar el modelo. Elegimos la inferencia asíncrona porque puede manejar tamaños de carga útiles grandes y cumplir con los requisitos de latencia casi en tiempo real. Además, puedes configurar el punto de enlace para que se autoescale y aplicar una política de escalado para establecer el recuento de instancias en cero cuando no haya solicitudes que procesar. En el siguiente código, establecemos max_concurrent_invocations_per_instance
en 4. También configuramos el escalado automático de modo que el punto de enlace se amplíe cuando sea necesario y se reduzca a cero después de que se complete el trabajo de etiquetado automático.
from sagemaker.async_inference.async_inference_config import AsyncInferenceConfig
async_config = AsyncInferenceConfig(
output_path=f"s3://{sess.default_bucket()}/asyncinference/output",
max_concurrent_invocations_per_instance=4)
.
.
.
response = client.put_scaling_policy(
PolicyName="PolíticaDeEscalamiento-Invocaciones",
ServiceNamespace="sagemaker", # El espacio de nombres del servicio de AWS que proporciona el recurso.
ResourceId=resource_id, # Nombre del punto de enlace
ScalableDimension="sagemaker:variant:DesiredInstanceCount", # SageMaker solo admite conteo de instancias
PolicyType="EscalamientoDeSeguimientoDeObjetivo", # 'EscalamientoPorPasos'|'EscalamientoDeSeguimientoDeObjetivo'
TargetTrackingScalingPolicyConfiguration={
"TargetValue": 5.0, # El valor objetivo para la métrica. - aquí la métrica es - SageMakerVariantInvocationsPerInstance
"CustomizedMetricSpecification": {
"MetricName": "TamañoDeColaAproximadoPorInstancia",
"Namespace": "AWS/SageMaker",
"Dimensions": [{"Name": "NombreDelPuntoDeEnlace", "Value": nombre_del_punto_de_enlace}],
"Statistic": "Promedio",
},
"ScaleInCooldown": 300,
"ScaleOutCooldown": 300
},
)
Descargar datos y realizar inferencia
Utilizamos el conjunto de datos Ford Multi-AV Seasonal del Catálogo de Datos Abiertos de AWS.
Primero, descargamos y preparamos los datos para la inferencia. Hemos proporcionado pasos de preprocesamiento para procesar el conjunto de datos en el cuaderno; puedes cambiarlo para procesar tu conjunto de datos. Luego, utilizando la API de SageMaker, podemos iniciar el trabajo de inferencia asíncrona de la siguiente manera:
import glob
import time
max_images = 10
input_locations,output_locations, = [], []
for i, file in enumerate(glob.glob("data/processedimages/*.png")):
input_1_s3_location = upload_image(sess,file,sess.default_bucket())
input_locations.append(input_1_s3_location)
async_response = base_model_predictor.predict_async(input_path=input_1_s3_location)
output_locations.append(async_response.output_path)
if i > max_images:
break
Esto puede tardar hasta 30 minutos o más dependiendo de la cantidad de datos que hayas subido para la inferencia asíncrona. Puedes visualizar una de estas inferencias de la siguiente manera:
plot_response('data/single.out')
Convertir la salida de inferencia asíncrona en un manifiesto de entrada de verificación de Ground Truth
En este paso, creamos un manifiesto de entrada para un trabajo de verificación de cajas delimitadoras en Ground Truth. Subimos la plantilla de la interfaz de usuario de Ground Truth y el archivo de categorías de etiquetas, y creamos el trabajo de verificación. El cuaderno vinculado a esta publicación utiliza una fuerza laboral privada para realizar el etiquetado; puedes cambiar esto si estás utilizando otros tipos de fuerzas laborales. Para obtener más detalles, consulta el código completo en el cuaderno.
Verificar etiquetas del proceso de autoetiquetado en Ground Truth
En este paso, completamos la verificación accediendo al portal de etiquetado. Para obtener más detalles, consulta aquí .
Cuando accedes al portal como miembro de la fuerza laboral, podrás ver las cajas delimitadoras creadas por el modelo JumpStart y realizar ajustes según sea necesario.
Puedes usar esta plantilla para repetir el autoetiquetado con muchos modelos específicos de tareas, fusionar etiquetas potencialmente y utilizar el conjunto de datos etiquetados resultante en tareas posteriores.
Limpiar
En este paso, limpiamos eliminando el punto de enlace y el modelo creados en los pasos anteriores:
# Eliminar el punto de enlace de SageMaker
base_model_predictor.delete_model()
base_model_predictor.delete_endpoint()
Conclusión
En esta publicación, recorrimos un proceso de autoetiquetado que involucra JumpStart e inferencia asíncrona. Utilizamos los resultados del proceso de autoetiquetado para convertir y visualizar datos etiquetados en un conjunto de datos del mundo real. Puedes usar la solución para realizar autoetiquetado con muchos modelos específicos de tareas, fusionar etiquetas potencialmente y utilizar el conjunto de datos etiquetados resultante en tareas posteriores. También puedes explorar el uso de herramientas como el Modelo de Segmentación de Cualquier Cosa para generar máscaras de segmento como parte del proceso de autoetiquetado. En futuras publicaciones de esta serie, cubriremos el módulo de percepción y segmentación. Para obtener más información sobre JumpStart e inferencia asíncrona, consulta SageMaker JumpStart e Inferencia Asíncrona , respectivamente. Te animamos a reutilizar este contenido para casos de uso más allá de AV/ADAS y a comunicarte con AWS para cualquier ayuda.