Logotipo de Zephyrnet

Implemente una solución de seguimiento de varios objetos en un conjunto de datos personalizado con Amazon SageMaker | Servicios web de Amazon

Fecha:

La demanda de seguimiento de múltiples objetos (MOT) en el análisis de video ha aumentado significativamente en muchas industrias, como deportes en vivo, fabricación y monitoreo de tráfico. Por ejemplo, en los deportes en vivo, MOT puede rastrear a los jugadores de fútbol en tiempo real para analizar el rendimiento físico, como la velocidad en tiempo real y la distancia de movimiento.

Desde su introducción en 2021, Pista de bytes sigue siendo uno de los métodos con mejor rendimiento en varios conjuntos de datos de referencia, entre los últimos desarrollos de modelos en la aplicación MOT. En ByteTrack, el autor propuso un método de asociación de datos simple, efectivo y genérico (denominado BYTE) para la comparación de cajas de detección y tracklets. En lugar de solo mantener los cuadros de detección de puntuación alta, también mantiene los cuadros de detección de puntuación baja, lo que puede ayudar a recuperar tracklets inigualables con estos cuadros de detección de puntuación baja cuando se produce oclusión, desenfoque de movimiento o cambio de tamaño. La estrategia de asociación BYTE también se puede utilizar en otros rastreadores basados ​​en Re-ID, como MOT justo. Los experimentos mostraron mejoras en comparación con los algoritmos de seguimiento de vainilla. Por ejemplo, FairMOT logró una mejora del 1.3% en MOTA (FairMOT: sobre la imparcialidad de la detección y la reidentificación en el seguimiento de múltiples objetos), que es una de las principales métricas en la tarea MOT al aplicar BYTE en la asociación de datos.

En el post Entrene e implemente un modelo FairMOT con Amazon SageMaker, demostramos cómo entrenar e implementar un modelo FairMOT con Amazon SageMaker en Conjuntos de datos de desafío MOT. Al aplicar una solución MOT en casos del mundo real, debe entrenar o ajustar un modelo MOT en un conjunto de datos personalizado. Con Verdad fundamental de Amazon SageMaker, puede crear etiquetas de manera efectiva en su propio conjunto de datos de video.

Siguiendo con el post anterior, hemos añadido las siguientes aportaciones y modificaciones:

  • Genere etiquetas para un conjunto de datos de video personalizado usando Ground Truth
  • Preprocesar la etiqueta generada por Ground Truth para que sea compatible con ByteTrack y otras soluciones MOT
  • Entrena el algoritmo ByteTrack con un Trabajo de entrenamiento de SageMaker (con la opción de ampliar un contenedor preconstruido)
  • Implemente el modelo entrenado con varias opciones de implementación, incluida la inferencia asíncrona

También proporcionamos la ejemplo de código en GitHub, que usa SageMaker para etiquetar, construir, entrenar e inferir.

SageMaker es un servicio completamente administrado que brinda a todos los desarrolladores y científicos de datos la capacidad de preparar, crear, entrenar e implementar modelos de aprendizaje automático (ML) rápidamente. SageMaker proporciona varios algoritmos integrados e imágenes de contenedor que puede usar para acelerar el entrenamiento y la implementación de modelos de ML. Además, los algoritmos personalizados como ByteTrack también se pueden admitir a través de imágenes de contenedores de Docker personalizadas. Para obtener más información sobre cómo decidir el nivel correcto de compromiso con los contenedores, consulte Usar contenedores de Docker con SageMaker.

SageMaker ofrece muchas opciones para la implementación de modelos, como la inferencia en tiempo real, la inferencia sin servidor y la inferencia asíncrona. En esta publicación, mostramos cómo implementar un modelo de seguimiento con diferentes opciones de implementación, para que pueda elegir el método de implementación adecuado en su propio caso de uso.

Resumen de la solución

Nuestra solución consta de los siguientes pasos de alto nivel:

  1. Etiquete el conjunto de datos para el seguimiento, con un cuadro delimitador en cada objeto (por ejemplo, peatón, automóvil, etc.). Configure los recursos para el desarrollo y la ejecución de código ML.
  2. Entrene un modelo de ByteTrack y ajuste los hiperparámetros en un conjunto de datos personalizado.
  3. Implemente el modelo ByteTrack entrenado con diferentes opciones de implementación según su caso de uso: procesamiento en tiempo real, asíncrono o predicción por lotes.

El siguiente diagrama ilustra la arquitectura en cada paso.
resumen_flujo

Requisitos previos

Antes de comenzar, complete los siguientes requisitos previos:

  1. Cree una cuenta de AWS o use una cuenta de AWS existente.
  2. Recomendamos ejecutar el código fuente en el us-east-1 Región.
  3. Asegúrese de tener al menos una instancia de GPU (por ejemplo, ml.p3.2xlarge para entrenamiento de una sola GPU, o ml.p3.16xlarge) para el trabajo de entrenamiento distribuido. También se admiten otros tipos de instancias de GPU, con varias diferencias de rendimiento.
  4. Asegúrese de tener al menos una instancia de GPU (por ejemplo, ml.p3.2xlarge) para el punto final de inferencia.
  5. Asegúrese de tener al menos una instancia de GPU (por ejemplo, ml.p3.2xlarge) para ejecutar la predicción por lotes con trabajos de procesamiento.

Si es la primera vez que ejecuta los servicios de SageMaker en los tipos de instancia mencionados anteriormente, es posible que deba Solicitar un aumento de la cuota para las instancias requeridas.

Configura tus recursos

Después de completar todos los requisitos previos, estará listo para implementar la solución.

  1. Crear una instancia de cuaderno de SageMaker. Para esta tarea, recomendamos utilizar el ml.t3.medium tipo de instancia. Mientras ejecutamos el código, usamos docker build para ampliar la imagen de formación de SageMaker con el código ByteTrack (el docker build El comando se ejecutará localmente dentro del entorno de la instancia del cuaderno). Por lo tanto, recomendamos aumentar el tamaño del volumen a 100 GB (tamaño de volumen predeterminado a 5 GB) desde las opciones de configuración avanzada. Para tu Gestión de identidades y accesos de AWS (IAM), elija una función existente o cree una nueva y adjunte la AmazonS3FullAccess, AmazonSNSFullAccess, AmazonSageMakerFullAccessy AmazonElasticContainerRegistryPublicFullAccess políticas para el rol.
  2. Clona el Repositorio GitHub En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. /home/ec2-user/SageMaker carpeta en la instancia del cuaderno que creó.
  3. Crear un nuevo Servicio de almacenamiento simple de Amazon (Amazon S3) o utilice un depósito existente.

Etiquetar el conjunto de datos

En preparación-de-datos.ipynb notebook, descargamos un archivo de video de prueba MOT16 y lo dividimos en pequeños archivos de video con 200 cuadros. Luego subimos esos archivos de video al depósito S3 como fuente de datos para el etiquetado.

Para etiquetar el conjunto de datos para la tarea MOT, consulte Cómo comenzar. Cuando se completa el trabajo de etiquetado, podemos acceder al siguiente directorio de anotaciones en la ubicación de salida del trabajo en el depósito S3.

El manifests directorio debe contener un output carpeta si terminamos de etiquetar todos los archivos. podemos ver el archivo output.manifest existentes output carpeta. Este archivo de manifiesto contiene información sobre el video y las etiquetas de seguimiento de video que puede usar más adelante para entrenar y probar un modelo.

Entrene un modelo de ByteTrack y ajuste los hiperparámetros en el conjunto de datos personalizado

Para entrenar su modelo ByteTrack, usamos el bytetrack-entrenamiento.ipynb computadora portátil. El cuaderno consta de los siguientes pasos:

  1. Inicialice la configuración de SageMaker.
  2. Realizar el preprocesamiento de datos.
  3. Cree y envíe la imagen del contenedor.
  4. Definir un trabajo de entrenamiento.
  5. Inicie el trabajo de entrenamiento.
  6. Sintonice los hiperparámetros.

Especialmente en el preprocesamiento de datos, necesitamos convertir el conjunto de datos etiquetados con el formato de salida Ground Truth al conjunto de datos de formato MOT17, y convertir el conjunto de datos de formato MOT17 a un conjunto de datos de formato MSCOCO (como se muestra en la siguiente figura) para que podamos entrenar un YOLOX modelo en el conjunto de datos personalizado. Debido a que mantenemos tanto el conjunto de datos en formato MOT como el conjunto de datos en formato MSCOCO, puede entrenar otros algoritmos MOT sin separar la detección y el seguimiento en el conjunto de datos en formato MOT. Puede cambiar fácilmente el detector a otros algoritmos como YOLO7 para usar su algoritmo de detección de objetos existente.

Implementar el modelo ByteTrack entrenado

Después de entrenar el modelo YOLOX, implementamos el modelo entrenado para la inferencia. SageMaker ofrece varias opciones para la implementación de modelos, como la inferencia en tiempo real, la inferencia asíncrona, la inferencia sin servidor y la inferencia por lotes. En nuestra publicación, usamos el código de muestra para la inferencia en tiempo real, la inferencia asincrónica y la inferencia por lotes. Puede elegir el código adecuado de estas opciones en función de sus propios requisitos comerciales.

Debido a que la transformación por lotes de SageMaker requiere que los datos se particionen y almacenen en Amazon S3 como entrada y las invocaciones se envían a los puntos finales de inferencia al mismo tiempo, no cumple con los requisitos de las tareas de seguimiento de objetos donde los objetivos deben enviarse de forma secuencial. . Por lo tanto, no usamos los trabajos de transformación por lotes de SageMaker para ejecutar la inferencia por lotes. En este ejemplo, usamos trabajos de procesamiento de SageMaker para realizar inferencias por lotes.

La siguiente tabla resume la configuración de nuestros trabajos de inferencia.

Tipo de inferencia carga útil Tiempo de procesamiento Escalado automático
Gestión del riesgo Hasta 6 MB hasta 1 minuto El recuento mínimo de instancias es 1 o superior
Asincrónico Hasta 1 GB Hasta minutos 15 El recuento mínimo de instancias puede ser cero
Lote (con trabajo de procesamiento) No hay límite No hay límite No se admite

Implementar un punto final de inferencia en tiempo real

Para implementar un punto final de inferencia en tiempo real, podemos ejecutar el bytetrack-inferencia-yolox.ipynb computadora portátil. Separamos la inferencia de ByteTrack en detección y seguimiento de objetos. En el punto final de inferencia, solo ejecutamos el modelo YOLOX para la detección de objetos. En el cuaderno, creamos un objeto de seguimiento, recibimos el resultado de la detección de objetos desde el punto final de inferencia y actualizamos los rastreadores.

Usamos SageMaker PyTorchModel SDK para crear e implementar un modelo ByteTrack de la siguiente manera:

from sagemaker.pytorch.model import PyTorchModel pytorch_model = PyTorchModel( model_data=s3_model_uri, role=role, source_dir="sagemaker-serving/code", entry_point="inference.py", framework_version="1.7.1", py_version="py3",
) endpoint_name =<endpint name>
pytorch_model.deploy( initial_instance_count=1, instance_type="ml.p3.2xlarge", endpoint_name=endpoint_name
)

Después de implementar el modelo en un punto final con éxito, podemos invocar el punto final de inferencia con el siguiente fragmento de código:

with open(f"datasets/frame_{frame_id}.png", "rb") as f: payload = f.read() response = sm_runtime.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/x-image", Body=payload
)
outputs = json.loads(response["Body"].read().decode())

Ejecutamos la tarea de seguimiento en el lado del cliente después de aceptar el resultado de detección del punto final (consulte el siguiente código). Al dibujar los resultados del seguimiento en cada cuadro y guardarlos como un video de seguimiento, puede confirmar el resultado del seguimiento en el video de seguimiento.

aspect_ratio_thresh = 1.6
min_box_area = 10
tracker = BYTETracker( frame_rate=30, track_thresh=0.5, track_buffer=30, mot20=False, match_thresh=0.8 ) online_targets = tracker.update(torch.as_tensor(outputs[0]), [height, width], (800, 1440))
online_tlwhs = []
online_ids = []
online_scores = []
for t in online_targets: tlwh = t.tlwh tid = t.track_id vertical = tlwh[2] / tlwh[3] > aspect_ratio_thresh if tlwh[2] * tlwh[3] > min_box_area and not vertical: online_tlwhs.append(tlwh) online_ids.append(tid) online_scores.append(t.score) results.append( f"{frame_id},{tid},{tlwh[0]:.2f},{tlwh[1]:.2f},{tlwh[2]:.2f},{tlwh[3]:.2f},{t.score:.2f},-1,-1,-1n" )
online_im = plot_tracking( frame, online_tlwhs, online_ids, frame_id=frame_id + 1, fps=1. / timer.average_time
)

Implementar un punto final de inferencia asincrónica

La inferencia asíncrona de SageMaker es la opción ideal para solicitudes con grandes tamaños de carga útil (hasta 1 GB), largos tiempos de procesamiento (hasta 1 hora) y requisitos de latencia casi en tiempo real. Para las tareas de MOT, es común que un archivo de video tenga más de 6 MB, que es el límite de carga útil de un punto final en tiempo real. Por lo tanto, implementamos un punto final de inferencia asincrónica. Referirse a inferencia asíncrona para obtener más detalles sobre cómo implementar un punto final asíncrono. Podemos reutilizar el modelo creado para el punto final en tiempo real; para esta publicación, pusimos un proceso de seguimiento en el script de inferencia para que podamos obtener el resultado de seguimiento final directamente para el video de entrada.

Para usar secuencias de comandos relacionadas con ByteTrack en el punto final, debemos colocar la secuencia de comandos y el modelo de seguimiento en la misma carpeta y comprimir la carpeta como el model.tar.gz y luego cárguelo en el depósito S3 para la creación del modelo. El siguiente diagrama muestra la estructura de model.tar.gz.

Necesitamos establecer explícitamente el tamaño de la solicitud, el tamaño de la respuesta y el tiempo de espera de la respuesta como variables de entorno, como se muestra en el siguiente código. El nombre de la variable de entorno varía según el marco. Para obtener más detalles, consulte Crear un punto final de inferencia asincrónica.

pytorch_model = PyTorchModel( model_data=s3_model_uri, role=role, entry_point="inference.py", framework_version="1.7.1", sagemaker_session=sm_session, py_version="py3", env={ 'TS_MAX_REQUEST_SIZE': '1000000000', #default max request size is 6 Mb for torchserve, need to update it to support the 1GB input payload 'TS_MAX_RESPONSE_SIZE': '1000000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '900' # max timeout is 15mins (900 seconds) }
) pytorch_model.create( instance_type="ml.p3.2xlarge",
)

Al invocar el punto final asíncrono, en lugar de enviar la carga útil en la solicitud, enviamos la URL de Amazon S3 del video de entrada. Cuando la inferencia del modelo termine de procesar el video, los resultados se guardarán en la ruta de salida de S3. Podemos configurar Servicio de notificación simple de Amazon (Amazon SNS) temas para que cuando los resultados estén listos, podamos recibir un mensaje SNS como notificación.

Ejecute la inferencia por lotes con el procesamiento de SageMaker

Para archivos de video de más de 1 GB, usamos un trabajo de procesamiento de SageMaker para hacer inferencias por lotes. Definimos un contenedor Docker personalizado para ejecutar un trabajo de procesamiento de SageMaker (consulte el siguiente código). Dibujamos el resultado del seguimiento en el video de entrada. Puede encontrar el video de resultado en el depósito S3 definido por s3_output.

from sagemaker.processing import ProcessingInput, ProcessingOutput
script_processor.run( code='./container-batch-inference/predict.py', inputs=[ ProcessingInput(source=s3_input, destination="/opt/ml/processing/input"), ProcessingInput(source=s3_model_uri, destination="/opt/ml/processing/model"), ], outputs=[ ProcessingOutput(source='/opt/ml/processing/output', destination=s3_output), ]
)

Limpiar

Para evitar costos innecesarios, elimine los recursos que creó como parte de esta solución, incluido el punto final de inferencia.

Conclusión

Esta publicación demostró cómo implementar una solución de seguimiento de múltiples objetos en un conjunto de datos personalizado utilizando uno de los algoritmos de última generación en SageMaker. También demostramos tres opciones de implementación en SageMaker para que pueda elegir la opción óptima para su propio escenario comercial. Si el caso de uso requiere baja latencia y necesita que se implemente un modelo en un dispositivo perimetral, puede implementar la solución MOT en el perímetro con Panorama de AWS.

Para obtener más información, consulte Seguimiento de objetos múltiples usando YOLOX + BYTE-TRACK y análisis de datos.


Acerca de los autores

gordon wang, es TAM especialista sénior en IA/ML en AWS. Apoya a los clientes estratégicos con las mejores prácticas de AI/ML en muchas industrias. Es un apasionado de la visión artificial, la PNL, la IA generativa y los MLOps. En su tiempo libre, le encanta correr y caminar.

Yanwei Cui, doctorado, es arquitecto sénior de soluciones especialista en aprendizaje automático en AWS. Comenzó la investigación de aprendizaje automático en IRISA (Instituto de Investigación de Ciencias de la Computación y Sistemas Aleatorios), y tiene varios años de experiencia en la creación de aplicaciones industriales impulsadas por inteligencia artificial en visión por computadora, procesamiento de lenguaje natural y predicción del comportamiento del usuario en línea. En AWS, comparte la experiencia en el dominio y ayuda a los clientes a desbloquear los potenciales comerciales y generar resultados prácticos con el aprendizaje automático a escala. Fuera del trabajo, le gusta leer y viajar.

Dra. Melanie Li, es TAM especialista sénior en AI/ML en AWS con sede en Sídney, Australia. Ayuda a los clientes empresariales a crear soluciones aprovechando las herramientas de inteligencia artificial y aprendizaje automático de última generación en AWS y brinda orientación sobre la arquitectura y la implementación de soluciones de aprendizaje automático con las mejores prácticas. En su tiempo libre, le encanta explorar la naturaleza al aire libre y pasar tiempo con su familia y amigos.

Guang yang, es un científico aplicado sénior en Amazon ML Solutions Lab, donde trabaja con clientes en varias verticales y aplica la resolución creativa de problemas para generar valor para los clientes con soluciones de ML/IA de última generación.

punto_img

Información más reciente

punto_img