Esta publicación de blog está coescrita por Jonathan Lee, Nelson Leung, Paul Min y Troy Squillaci de Intel.
In Parte 1 de esta publicación, discutimos cómo Intel®3DAT colaboró con Servicios profesionales de aprendizaje automático de AWS (MLPS) para crear una aplicación SaaS de IA escalable. 3DAT utiliza visión artificial e IA para reconocer, rastrear y analizar más de 1,000 puntos de datos biomecánicos de video estándar. Permite a los clientes crear productos basados en la biomecánica enriquecidos y potentes, como aplicaciones web y móviles con datos de rendimiento detallados y visualizaciones tridimensionales.
En la Parte 2 de esta publicación, profundizamos en cada etapa de la arquitectura. Exploramos los servicios de AWS utilizados para cumplir con los requisitos de diseño de 3DAT, incluidos Secuencias de datos de Amazon Kinesis y Servicio Amazon Elastic Kubernetes (Amazon EKS), con el fin de implementar de manera escalable los modelos de estimación de pose necesarios para esta aplicación de software como servicio (SaaS).
Descripción de la arquitectura
El objetivo principal del equipo de MLPS era poner en producción las canalizaciones del modelo de estimación de poses 2D y 3D y crear una aplicación funcional y escalable. El siguiente diagrama ilustra la arquitectura de la solución.
La arquitectura completa se divide en cinco componentes principales:
- Capas de la interfaz de la aplicación de usuario
- Base de datos
- Orquestación del flujo de trabajo
- Generación de inferencia de estimación de pose escalable
- Monitoreo operativo
Entremos en detalles sobre cada componente, sus interacciones y la lógica detrás de las opciones de diseño.
Capas de la interfaz de la aplicación de usuario
El siguiente diagrama muestra las capas de la interfaz de la aplicación que brindan acceso al usuario y control de la aplicación y sus recursos.
Estos puntos de acceso admiten diferentes casos de uso basados en diferentes perfiles de clientes. Por ejemplo, un usuario de la aplicación puede enviar un trabajo a través de la CLI, mientras que un desarrollador puede crear una aplicación utilizando el SDK de Python e incorporar inteligencia de estimación de poses en sus aplicaciones. La CLI y el SDK están construidos como componentes modulares; ambas capas son contenedores de la capa API, que está construida usando Puerta de enlace API de Amazon para resolver las llamadas API y AWS Lambda asociado funciones, que se encargan de la lógica de back-end asociada con cada llamada a la API. Estas capas fueron un componente crucial para el equipo de Intel OTG porque abre una amplia base de clientes que pueden usar esta aplicación SaaS de manera efectiva.
capa de API
La solución tiene un conjunto básico de nueve API, que corresponden a los tipos de objetos que operan en esta plataforma. Cada API tiene un archivo de Python que define las acciones de la API que se pueden ejecutar. A la creación de nuevos objetos se le asigna automáticamente un ID de objeto de forma secuencial. Los atributos de estos objetos se almacenan y rastrean en el Amazon Aurora sin servidor base de datos utilizando este ID. Por lo tanto, las acciones de la API se relacionan con las funciones que se definen en un archivo central que contiene la lógica de back-end para consultar la base de datos de Aurora. Esta lógica de back-end utiliza el Boto3 Cliente de servicio de datos de Amazon RDS para acceder al clúster de la base de datos.
La única excepción es la /job
API, que tiene una create_job
método que maneja el envío de videos para crear un nuevo trabajo de procesamiento. Este método inicia el Funciones de paso de AWS lógica de flujo de trabajo para ejecutar el trabajo. Al pasar en un job_id
, este método utiliza el Boto3 Cliente de Step Functions llamar al start_execution
método para un determinado stateMachineARN
(Nombre del recurso de Amazon).
Las ocho API de objetos tienen los métodos y un patrón de acceso similar, como se resume en la siguiente tabla.
Tipo de método | Nombre de la función | Descripción |
list_[object_name]s |
Selecciona todos los objetos de este tipo de la base de datos y los muestra. | |
PUBLICAR | create_[object] |
Inserta un nuevo registro de objeto con las entradas requeridas en la base de datos. |
get_[object] |
Selecciona los atributos del objeto en función del ID del objeto de la base de datos y las visualizaciones. | |
PUT | update_[object] |
Actualiza un registro de objeto existente con las entradas requeridas. |
BORRAR | delete_[object] |
Elimina un registro de objeto existente de la base de datos según el ID del objeto. |
Los detalles de las nueve API son los siguientes:
- /usuario – Un usuario es la identidad de alguien autorizado para enviar trabajos a esta aplicación. La creación de un usuario requiere un nombre de usuario, correo electrónico de usuario e ID de grupo al que pertenece el usuario.
- /grupo de usuario – Un grupo de usuarios es una colección de usuarios. Cada grupo de usuarios se asigna a un proyecto y un conjunto de parámetros de canalización. Para tener diferentes niveles (en términos de recursos de infraestructura y parámetros de canalización), los usuarios se dividen en grupos de usuarios. Cada usuario puede pertenecer a un solo grupo de usuarios. La creación de un grupo de usuarios requiere un ID de proyecto, un ID de conjunto de parámetros de canalización, un nombre de grupo de usuarios y una descripción del grupo de usuarios. Tenga en cuenta que los grupos de usuarios son diferentes de los roles de usuario definidos en la cuenta de AWS. Este último se utiliza para proporcionar diferentes niveles de acceso en función de sus roles de acceso (por ejemplo, administrador).
- /proyecto – Un proyecto se utiliza para agrupar diferentes conjuntos de recursos de infraestructura. Un proyecto está asociado a un único
project_cluster_url
(Aurora cluster) para registrar usuarios, trabajos y otros metadatos, unproject_queue_arn
(ARN de Kinesis Data Streams) y un entorno de tiempo de ejecución de cómputo (actualmente controlado a través de Cortex) que se usa para ejecutar inferencias en los lotes de fotogramas o posprocesamiento en los videos. Cada grupo de usuarios está asociado a un proyecto, y este mecanismo es cómo se habilitan diferentes niveles en términos de latencia y poder de cómputo para diferentes grupos de usuarios. La creación de un proyecto requiere un nombre de proyecto, una URL de clúster de proyecto y un ARN de cola de proyecto. - /tubería – Una canalización está asociada con una única configuración para una secuencia de contenedores de procesamiento que realizan procesamiento de video en el clúster de generación de inferencias de Amazon EKS coordinado por Cortex (consulte la sección sobre generación de inferencias de procesamiento de video para obtener más detalles). Por lo general, consta de tres contenedores: preprocesamiento y decodificación, detección de objetos y estimación de pose. Por ejemplo, el paso de decodificación y detección de objetos es el mismo para las canalizaciones 2D y 3D, pero el intercambio del último contenedor mediante HRNet o 3DMPPE da como resultado el conjunto de parámetros para canalizaciones de procesamiento 2D frente a 3D. Puede crear nuevas configuraciones para definir posibles canalizaciones que se pueden usar para el procesamiento, y requiere como entrada un nuevo archivo de Python en el repositorio de Cortex que detalla la secuencia de llamadas de puntos finales del modelo que definen esa canalización (consulte la sección sobre generación de inferencias de procesamiento de video ). El punto final de canalización es el punto final de Cortex que se llama para procesar un solo marco. La creación de una canalización requiere un nombre de canalización, una descripción de canalización y un punto final de canalización.
- /pipeline_parameter_set – Un conjunto de parámetros de canalización es una colección JSON flexible de varios parámetros (un tiempo de ejecución de configuración de canalización) para una canalización en particular, y se agrega para proporcionar flexibilidad para la personalización futura cuando se requieren varios tiempos de ejecución de configuración de canalización. Los grupos de usuarios se pueden asociar con un conjunto de parámetros de canalización en particular, y su propósito es tener diferentes grupos de parámetros por grupo de usuarios y por canalización. Esta fue una adición importante con miras al futuro para que Intel OTG incorpore personalización que admita la portabilidad a medida que diferentes clientes, en particular los ISV, comiencen a usar la aplicación.
- /parámetros_canalización – Una sola colección de parámetros de canalización es una instanciación de un conjunto de parámetros de canalización. Esto lo convierte en un mapeo 1:muchos de un conjunto de parámetros de canalización a parámetros de canalización. Esta API requiere un ID de canalización para asociarlo con el conjunto de parámetros de canalización que permite la creación de una canalización para una asignación 1:1 de parámetros de canalización a la canalización. Las otras entradas requeridas por esta API son un ID de conjunto de parámetros de canalización, un valor de parámetros de canalización y un nombre de parámetros de canalización.
- /video – Un objeto de video se usa para definir videos individuales que conforman un paquete .zip enviado durante un trabajo. Este archivo se divide en varios videos después del envío. Un video está relacionado con el
job_id
para el trabajo donde se envía el paquete .zip, y Servicio de almacenamiento simple de Amazon (Amazon S3) rutas para la ubicación de los videos separados sin procesar y los resultados del posprocesamiento de cada video. El objeto de video también contiene un porcentaje de progreso de video, que se actualiza constantemente durante el procesamiento de lotes de fotogramas individuales de ese video, así como un indicador de estado de video para completar o no completar. La creación de un video requiere una identificación de trabajo, una ruta de video, una ruta de resultados de video, un porcentaje de progreso de video y un estado de video. - /frame_batch - Un
frame_batch
El objeto es un mini lote de cuadros creados al muestrear un solo video. La separación de un video en lotes de cuadros de tamaño regular proporciona una palanca para ajustar la latencia y aumenta la paralelización y el rendimiento. Esta es la unidad granular que se ejecuta a través de Kinesis Data Streams para la inferencia. La creación de un lote de fotogramas requiere una identificación de video, un número de inicio del lote de fotogramas, un número de finalización del lote de fotogramas, una ruta de entrada del lote de fotogramas, una ruta de resultados del lote de fotogramas y un estado del lote de fotogramas. - /trabajo – Esta API de interacción se utiliza para el envío de archivos para iniciar un trabajo de procesamiento. Esta API tiene una función diferente de otras API de objetos porque es la ruta directa para interactuar con la coordinación del flujo de trabajo de Step Functions del backend de procesamiento de video y el clúster de Amazon EKS. Esta API requiere un ID de usuario, ID de proyecto, ID de canalización, ID de conjunto de parámetros de canalización, parámetros de trabajo y estado del trabajo. En los parámetros del trabajo, se especifica una ruta de archivo de entrada, que es la ubicación en Amazon S3 donde se encuentra el paquete .zip de videos que se procesarán. La carga de archivos se maneja con el
upload_handler
método, que genera una URL de S3 prefirmada para que el usuario coloque un archivo. WORKFLOW_STATEMACHINE_ARN es una variable de entorno que se pasa alcreate_job
API para especificar dónde se envía un paquete .zip de video con una ruta de archivo de entrada para iniciar un trabajo.
La siguiente tabla resume las funciones de la API.
Tipo de método | Función | Descripción |
list_jobs |
Selecciona todos los trabajos de la base de datos y muestra. | |
PUBLICAR | create_ job |
Inserta un nuevo registro de trabajo con ID de usuario, ID de proyecto, ID de canalización, ID de conjunto de parámetros de canalización, ruta de resultados del trabajo, parámetros del trabajo y estado del trabajo. |
get_ job |
Selecciona los atributos del trabajo en función del ID del trabajo de la base de datos y las visualizaciones. | |
upload_handler |
Genera una URL de S3 prefirmada como ubicación para la carga del archivo .zip. Requiere un nombre de depósito S3 y espera un tipo de archivo de aplicación/zip. |
Capa SDK de Python
Sobre la base de las API, el equipo creó una biblioteca cliente SDK de Python como contenedor para facilitar a los desarrolladores el acceso a los métodos de la API. Usaron el código abierto Poetry, que maneja el empaquetado de Python y la gestión de dependencias. Ellos crearon un client.py
archivo que contiene funciones que envuelven cada una de las API usando Python requests
biblioteca para manejar las solicitudes y excepciones de la API.
Para que los desarrolladores lancen Intel 3DAT SDK, deben instalar y compilar el paquete Poetry. Luego, pueden agregar una importación de Python simple de intel_3dat_sdk
a cualquier código de Python.
Para usar el cliente, puede crear una instancia del cliente, especificando el punto final de la API:
A continuación, puede utilizar el cliente para llamar a los métodos individuales, como el create_pipeline
(consulte el siguiente código), teniendo en cuenta los argumentos adecuados, como el nombre de la canalización y la descripción de la canalización.
capa CLI
De manera similar, el equipo se basó en las API para crear una interfaz de línea de comandos para los usuarios que desean acceder a los métodos de la API con una interfaz sencilla sin necesidad de escribir código Python. Usaron el paquete Python de código abierto Haga Clic en (Kit de creación de interfaz de línea de comandos). Los beneficios de este marco son el anidamiento arbitrario de comandos, la generación automática de páginas de ayuda y la compatibilidad con la carga diferida de subcomandos en tiempo de ejecución. En el mismo client.py
como en el SDK, cada método de cliente SDK se empaquetó con Click y los argumentos de método requeridos se convirtieron en indicadores de línea de comando. Las entradas de marca se utilizan luego al llamar al comando SDK.
Para iniciar la CLI, puede utilizar el CLI configure
dominio. Se le solicita la URL del punto final:
Ahora puede usar la CLI para llamar a diferentes comandos relacionados con los métodos de la API, por ejemplo:
Base de datos
Como base de datos, esta aplicación utiliza Aurora Serverless para almacenar metadatos asociados a cada una de las API con MYSQL como motor de base de datos. La elección del servicio de base de datos de Aurora Serverless se adhiere al principio de diseño para minimizar la sobrecarga de infraestructura mediante el uso de servicios de AWS sin servidor cuando sea posible. El siguiente diagrama ilustra esta arquitectura.
El modo de motor sin servidor cumple con el patrón de uso intermitente porque esta aplicación se amplía a nuevos clientes y las cargas de trabajo aún son inciertas. Al lanzar un punto de enlace de base de datos, no se requiere un tamaño de instancia de base de datos específico, solo un rango mínimo y máximo para la capacidad del clúster. Aurora Serverless maneja el aprovisionamiento adecuado de una flota de enrutadores y distribuye la carga de trabajo entre los recursos. Aurora Serverless realiza automáticamente la retención de copias de seguridad durante un mínimo de 1 día hasta 35 días. El equipo optimizó la seguridad estableciendo el valor predeterminado en el valor máximo de 35.
Además, el equipo utilizó el API de datos para manejar el acceso al clúster de Aurora Serverless, que no requiere una conexión persistente y, en su lugar, proporciona un punto de enlace HTTP seguro y la integración con los SDK de AWS. Esta función utiliza Director de secretos de AWS para almacenar las credenciales de la base de datos, por lo que no es necesario pasarlas explícitamente. Los scripts CREATE TABLE se escribieron en archivos .sql para cada una de las nueve tablas que corresponden a las nueve API. Debido a que esta base de datos contenía todos los metadatos y el estado de los objetos en el sistema, los métodos de la API se ejecutaron utilizando los comandos SQL apropiados (por ejemplo select * from Job
para list_jobs
API) y se pasa a la execute_statement
del cliente de Amazon RDS en la API de datos.
Orquestación del flujo de trabajo
La columna vertebral funcional de la aplicación se manejó utilizando Step Functions para coordinar el flujo de trabajo, como se muestra en el siguiente diagrama.
La máquina de estado constaba de una secuencia de cuatro funciones Lambda, que se inicia cuando se envía un trabajo mediante el create_job
método del job
API. El ID de usuario, el ID del proyecto, el ID de la canalización, el ID del conjunto de parámetros de la canalización, la ruta de los resultados del trabajo, los parámetros del trabajo y el estado del trabajo son necesarios para la creación del trabajo. Primero puede cargar un paquete .zip de archivos de video usando el upload_handler
método de la API de trabajo para generar una URL de S3 prefirmada. Durante el envío del trabajo, la ruta del archivo de entrada se pasa a través de los parámetros del trabajo para especificar la ubicación del archivo. Esto inicia la ejecución de la máquina de estado del flujo de trabajo, desencadenando cuatro pasos principales:
- Inicializar la función Lambda
- Función Lambda del remitente
- Compleción de la función Lambda de verificación
- Función de colector Lambda
Inicializar la función Lambda
La función principal del Inicializador es separar el paquete .zip en archivos de video individuales y prepararlos para el Remitente. Primero, se descarga el archivo .zip y luego se descomprime y extrae cada archivo individual, incluidos los archivos de video. Los videos, preferiblemente en formato .mp4, se vuelven a cargar en un depósito S3. Utilizando el create_video
método en el video
API, se crea un objeto de video con la ruta de video como entrada. Esto inserta datos de cada video en la base de datos de Aurora. Cualquier otro tipo de archivo, como los archivos JSON, se consideran metadatos y se cargan de manera similar, pero no se crea ningún objeto de video. Una lista de los nombres de los archivos y archivos de video extraídos se pasa al siguiente paso.
Función Lambda del remitente
La función de remitente toma los archivos de video que fueron extraídos por el inicializador y crea mini lotes de cuadros de video como imágenes. La mayoría de los modelos de visión por computadora actuales en producción se han entrenado en imágenes, por lo que incluso cuando se procesa el video, primero se separan en cuadros de imagen antes de la inferencia del modelo. Esta solución actual que utiliza un modelo de estimación de pose de última generación no es diferente: los lotes de fotogramas del remitente se pasan a Kinesis Data Streams para iniciar el paso de generación de inferencia.
Primero, la función Lambda descarga el archivo de video. La velocidad de fotogramas y el número de fotogramas se calcula utilizando el FileVideoStream
módulo de la imutils.video
biblioteca de procesamiento. Los marcos se extraen y agrupan según un tamaño de minilote específico, que es uno de los parámetros ajustables clave de esta canalización. Con la biblioteca pickle de Python, los datos se serializan y cargan en Amazon S3. Posteriormente, se crea un objeto de lote de cuadros y se crea la entrada de metadatos en la base de datos de Aurora. Esta función Lambda se creó utilizando un Dockerfile con dependencias en opencv-python
, numpy
y imutils
bibliotecas
Compleción de la función Lambda de verificación
La función Verificación de finalización continúa consultando la base de datos de Aurora para ver, para cada video en el paquete .zip para este trabajo actual, cuántos lotes de fotogramas están en el estado COMPLETADO. Cuando se completan todos los lotes de fotogramas de todos los videos, se completa este proceso de verificación.
Función de colector Lambda
La función Collector toma los resultados de las inferencias que se realizaron en cada cuadro durante la etapa del Consumidor y los combina en un lote de cuadros y en un video. Luego, los datos combinados combinados se cargan en un depósito S3. Luego, la función invoca la API de posprocesamiento de Cortex para una canalización de ML en particular a fin de realizar cualquier cálculo de posprocesamiento y agrega los resultados agregados por video al depósito de salida. Muchas de estas métricas se calculan en marcos, como la velocidad, la aceleración y el ángulo de articulación, por lo que este cálculo debe realizarse en los datos agregados. Los resultados principales incluyen datos de puntos clave del cuerpo (agregados en formato CSV), cálculos BMA (como aceleración) y superposición visual de puntos clave agregados a cada cuadro en un archivo de imagen.
Generación de inferencia de estimación de pose escalable
El motor de procesamiento que impulsa la escala de la inferencia de ML ocurre en esta etapa. Se trata de tres piezas principales, cada una con sus propias palancas de simultaneidad que se pueden ajustar para las compensaciones de latencia (consulte el siguiente diagrama).
Esta arquitectura permite la experimentación en la prueba de ganancias de latencia, así como flexibilidad para el futuro cuando las cargas de trabajo pueden cambiar con diferentes combinaciones de segmentos de usuarios finales que acceden a la aplicación.
Flujos de datos de Kinesis
El equipo eligió Kinesis Data Streams porque normalmente se usa para manejar datos de transmisión y, en este caso, es una buena opción porque puede manejar lotes de cuadros de manera similar para proporcionar escalabilidad y paralelización. En la función Submitter Lambda se utiliza el cliente Kinesis Boto3, con el put_record
método que pasa los metadatos asociados con un solo lote de fotogramas, como la ID del lote de fotogramas, el fotograma inicial del lote de fotogramas, el fotograma final del lote de fotogramas, la forma de la imagen, la velocidad de fotogramas y la ID del video.
Definimos varias colas de trabajos y configuraciones de flujo de datos de Kinesis para establecer niveles de rendimiento que se relacionan con el nivel de prioridad de diferentes grupos de usuarios. El acceso a diferentes niveles de potencia de procesamiento está vinculado al pasar un ARN de cola de proyecto al crear un nuevo proyecto usando el project
API. Luego, cada grupo de usuarios se vincula a un proyecto en particular durante la creación del grupo de usuarios. Tres configuraciones de flujo predeterminadas se definen en el Modelo de aplicación sin servidor de AWS (AWS SAM) plantilla de infraestructura:
- Estándar –
JobStreamShardCount
- Prioridad –
PriorityJobStreamShardCount
- Alta prioridad –
HighPriorityJobStreamShardCount
El equipo usó algunas palancas diferentes para diferenciar la potencia de procesamiento de cada transmisión o ajustar la latencia del sistema, como se resume en la siguiente tabla.
Palanca | Descripción | Valor por defecto |
Casco | Un fragmento es nativo de Kinesis Data Streams; es la unidad base de rendimiento para la ingesta. El valor predeterminado es 1 MB/s, lo que equivale a 1,000 registros de datos por segundo. | 2 |
KinesisBatchSize |
La cantidad máxima de registros que Kinesis Data Streams recupera en un solo lote antes de invocar la función Lambda del consumidor. | 1 |
KinesisParallelizationFactor |
El número de lotes para procesar de cada fragmento simultáneamente. | 1 |
Fan-out mejorado | Los consumidores de datos que tienen activada la distribución ramificada mejorada tienen un rendimiento de ingesta dedicado por consumidor (como el predeterminado de 1 MB/s) en lugar de compartir el rendimiento entre los consumidores. | DESC |
Función Lambda del consumidor
Desde la perspectiva de Kinesis Data Streams, un consumidor de datos es un servicio de AWS que recupera datos de un fragmento de flujo de datos a medida que se generan datos en un flujo. Esta aplicación utiliza una función Consumer Lambda, que se invoca cuando se pasan mensajes desde las colas de flujo de datos. Cada función de consumidor procesa un lote de marcos realizando los siguientes pasos. En primer lugar, se realiza una llamada a la API del procesador Cortex de forma síncrona, que es el punto final que aloja la canalización de inferencia del modelo (consulte la siguiente sección sobre Amazon EKS con Cortex para obtener más detalles). Los resultados se almacenan en Amazon S3 y se actualiza la base de datos cambiando el estado del lote de marcos procesados a Complete
. El manejo de errores está integrado para administrar la llamada a la API de Cortex con un bucle de reintento para manejar cualquier error 504 del clúster de Cortex, con una cantidad de reintentos establecida en 5.
Amazon EKS con Cortex para inferencia de ML
El equipo usó Amazon EKS, un servicio de Kubernetes administrado en AWS, como motor de cómputo para la inferencia de ML. Se tomó una decisión de diseño para usar Amazon EKS para alojar puntos de enlace de ML, lo que brinda la flexibilidad de ejecutar Kubernetes aguas arriba con la opción de clústeres, ambos totalmente administrados en AWS a través de AWS Fargate, o hardware local a través de Amazon EKS en cualquier lugar. Esta era una pieza crítica de funcionalidad deseada por Intel OTG, que brindaba la opción de conectar esta aplicación a hardware local especializado, por ejemplo.
Los tres modelos de ML que fueron los componentes básicos para construir las canalizaciones de inferencia fueron un modelo Yolo personalizado (para la detección de objetos), un modelo HRNet personalizado (para la estimación de poses en 2D) y un modelo 3DMPPE (para la estimación de poses en 3D) (consulte el artículo anterior). sección ML para más detalles). Usaron el código abierto Corteza biblioteca para manejar la implementación y la administración de los puntos de enlace de canalización de inferencia de ML, y el lanzamiento y la implementación de los clústeres de Amazon EKS. Cada uno de estos modelos se empaquetó en contenedores Docker: los archivos del modelo se almacenaron en Amazon S3 y las imágenes del modelo se almacenaron en Registro de contenedores elásticos de Amazon (Amazon ECR), e implementadas como API de Cortex Realtime. Se crearon versiones de los contenedores modelo que se ejecutan en CPU y GPU para brindar flexibilidad para el tipo de hardware de cómputo. En el futuro, si es necesario agregar modelos adicionales o canalizaciones de modelos, simplemente pueden crear API Cortex Realtime adicionales.
Luego construyeron canalizaciones de inferencia componiendo las API del modelo de Cortex Realtime en las API de canalización de Cortex Realtime. Una única API de canalización en tiempo real consistía en llamar a una secuencia de API de modelos en tiempo real. Las funciones Consumer Lambda trataron un pipeline
API como una caja negra, usando una sola llamada API para recuperar la salida de inferencia final para una imagen. Se crearon dos canalizaciones: una canalización 2D y una canalización 3D.
La tubería 2D combina un paso de preprocesamiento de decodificación, detección de objetos utilizando un modelo Yolo personalizado para ubicar al atleta y producir cuadros delimitadores y, finalmente, un modelo HRNet personalizado para crear puntos clave 2D para la estimación de poses.
La canalización 3D combina un paso de preprocesamiento de decodificación, detección de objetos utilizando un modelo Yolo personalizado para ubicar al atleta y producir cuadros delimitadores y, finalmente, un modelo 3DMPPE para crear puntos clave 3D para la estimación de poses.
Después de generar inferencias en un lote de marcos, cada tubería también incluye un punto final de Realtime Cortex de posprocesamiento independiente que genera tres salidas principales:
- Datos agregados de puntos clave del cuerpo en un solo archivo CSV
- Cálculos de BMA (como la aceleración)
- Superposición visual de puntos clave agregados a cada cuadro en un archivo de imagen
La función Collector Lambda envía los metadatos apropiados asociados con un video en particular, como los ID de fotogramas y las ubicaciones S3 de las salidas de inferencia de estimación de pose, al punto final para generar estas salidas de posprocesamiento.
Cortex está diseñado para integrarse con Amazon EKS y solo requiere un archivo de configuración de clúster y un comando simple para iniciar un clúster de Kubernetes:
Otra palanca para el ajuste del rendimiento fue la configuración de instancias para los clústeres de cómputo. Se crearon tres niveles con diversas combinaciones de instancias M5 y G4dn, codificados como archivos .yaml con especificaciones como nombre de clúster, región y configuración y combinación de instancias. Las instancias M5 están basadas en CPU de bajo costo y G4dn están basadas en GPU de mayor costo para proporcionar algunas compensaciones de costo/rendimiento.
Monitoreo operativo
Para mantener los estándares de registro operativos, todas las funciones de Lambda incluyen código para registrar e ingerir registros a través de Manguera de bomberos de datos de Amazon Kinesis. Por ejemplo, cada lote de fotogramas procesado desde la función Lambda del remitente se registra con la marca de tiempo, el nombre de la acción y el JSON de respuesta de la función Lambda y se guarda en Amazon S3. El siguiente diagrama ilustra este paso en la arquitectura.
Despliegue
La implementación se maneja mediante AWS SAM, un marco de código abierto para crear aplicaciones sin servidor en AWS. AWS SAM permite que el diseño de la infraestructura, incluidas las funciones, las API, las bases de datos y las asignaciones de fuentes de eventos, se codifiquen y se implementen fácilmente en nuevos entornos de AWS. Durante la implementación, la sintaxis de AWS SAM se traduce a Formación en la nube de AWS para manejar el aprovisionamiento de la infraestructura.
A template.yaml
El archivo contiene las especificaciones de la infraestructura junto con los parámetros ajustables, como los niveles de latencia de Kinesis Data Streams detallados en las secciones anteriores. UN samconfig.toml
El archivo contiene parámetros de implementación, como el nombre de la pila, el nombre del depósito de S3 donde se almacenan los archivos de la aplicación, como el código de función de Lambda, y las etiquetas de recursos para el seguimiento de los costos. Un script de shell deployment.sh con los comandos simples es todo lo que se requiere para construir e implementar la plantilla completa:
Flujo de trabajo del usuario
En resumen, una vez implementada la infraestructura, puede seguir este flujo de trabajo para comenzar:
- Cree un cliente Intel 3DAT utilizando la biblioteca del cliente.
- Utilice la API para crear una nueva instancia de una canalización correspondiente al tipo de procesamiento que se requiere, como una para la estimación de poses en 3D.
- Cree una nueva instancia de un proyecto, pasando el ARN del clúster y el ARN de la cola de Kinesis.
- Cree una nueva instancia de un conjunto de parámetros de canalización.
- Cree una nueva instancia de parámetros de canalización que se asignen al conjunto de parámetros de canalización.
- Cree un nuevo grupo de usuarios que esté asociado con un ID de proyecto y un ID de conjunto de parámetros de canalización.
- Cree un nuevo usuario que esté asociado con el grupo de usuarios.
- Cargue un archivo .zip de videos en Amazon S3 utilizando una URL de S3 prefirmada generada por la función de carga en la API de trabajo.
- Enviar una
create_job
Llamada API, con parámetros de trabajo que especifican la ubicación de los archivos de video. Esto inicia el trabajo de procesamiento.
Conclusión
La aplicación ya está disponible y lista para ser probada con atletas y entrenadores por igual. Intel OTG se complace en hacer que la innovadora tecnología de estimación de poses mediante visión por computadora sea accesible para una variedad de usuarios, desde desarrolladores hasta atletas y socios proveedores de software.
Al equipo de AWS le apasiona ayudar a clientes como Intel OTG a acelerar su viaje de ML, desde la etapa de ideación y descubrimiento con ML Solutions Lab hasta la etapa de fortalecimiento e implementación con AWS ML ProServe. Todos estaremos atentos a los Juegos Olímpicos de Tokio 2021 este verano para visualizar todo el progreso que ML puede desbloquear en los deportes.
¡Empiece hoy! Explore su caso de uso con los servicios mencionados en esta publicación y muchos otros en el Consola de administración de AWS.
Acerca de los autores
hombre han es gerente sénior de aprendizaje automático e IA en AWS con sede en San Diego, CA. Tiene un doctorado en ingeniería de la Universidad Northwestern y varios años de experiencia como consultor de gestión asesorando a clientes en manufactura, servicios financieros y energía. En la actualidad, trabaja apasionadamente con clientes de una variedad de industrias para desarrollar e implementar soluciones de inteligencia artificial y aprendizaje automático en AWS. Le gusta seguir la NBA y jugar baloncesto en su tiempo libre.
Iman Kamyabi es un ingeniero de ML con los servicios profesionales de AWS. Ha trabajado con una amplia gama de clientes de AWS para defender las mejores prácticas en la configuración de canalizaciones de ML confiables y repetibles.
Jonathan Lee es el Director de Tecnología de Rendimiento Deportivo, Olympic Technology Group en Intel. Estudió la aplicación del aprendizaje automático a la salud mientras estudiaba en UCLA y durante su trabajo de posgrado en la Universidad de Oxford. Su carrera se ha centrado en el desarrollo de algoritmos y sensores para la salud y el desempeño humano. Ahora dirige el proyecto de seguimiento de atletas en 3D en Intel.
nelson leung es el arquitecto de plataforma en el CoE de rendimiento deportivo en Intel, donde define la arquitectura de extremo a extremo para productos de vanguardia que mejoran el rendimiento de los atletas. También lidera la implementación, implementación y producción de estas soluciones de aprendizaje automático a escala para diferentes socios de Intel.
Troy Squillaci es ingeniero de DecSecOps en Intel, donde ofrece soluciones de software profesionales a los clientes a través de las mejores prácticas de DevOps. Disfruta integrando soluciones de IA en plataformas escalables en una variedad de dominios.
Pablo min es pasante de Associate Solutions Architect en Amazon Web Services (AWS), donde ayuda a los clientes de diferentes verticales de la industria a avanzar en su misión y acelerar su adopción de la nube. Anteriormente en Intel, trabajó como pasante de ingeniería de software para ayudar a desarrollar el SDK 3D Athlete Tracking Cloud. Fuera del trabajo, a Paul le gusta jugar al golf y se le puede escuchar cantar.
- Coinsmart. El mejor intercambio de Bitcoin y criptografía de Europa.
- Platoblockchain. Inteligencia del Metaverso Web3. Conocimiento amplificado. ACCESO LIBRE.
- CriptoHawk. Radar de altcoins. Prueba gratis.
- Fuente: https://aws.amazon.com/blogs/machine-learning/the-intel3d-athlete-tracking-3dat-scalable-architecture-deploys-pose-estimation-models-using-amazon-kinesis-data-streams- y-amazon-eks/
- "
- &
- 000
- 100
- 2021
- 3d
- Nuestra Empresa
- acelerar
- de la máquina
- accesible
- Conforme
- Mi Cuenta
- a través de
- la columna Acción
- acciones
- adición
- Adicionales
- Admin
- Adopción
- AI
- algoritmo
- Todos
- Amazon
- Amazon Web Services
- entre
- abejas
- API
- Aplicación
- aplicaciones
- adecuado
- arquitectura
- argumentos
- asigna
- Consejos
- los atletas
- atributos
- Automático
- AWS
- Backup
- Baloncesto
- antes
- beneficios
- MEJOR
- y las mejores prácticas
- Negro
- Blog
- cuerpo
- Box
- build
- Construir la
- llamar al
- Capacidad
- servicios sociales
- Propósito
- cases
- central
- campeón
- el cambio
- opciones
- clientes
- Soluciones
- código
- --
- coleccionista
- combinado
- componente
- Calcular
- computadora
- Configuración
- conexión
- consultor
- consumidor
- Clientes
- Envase
- Contenedores
- contiene
- continúa
- control
- coordinar
- Core
- Correspondiente
- Para crear
- creado
- crea
- Creamos
- creación
- Referencias
- crítico
- crucial
- Current
- En la actualidad
- personalizado
- cliente
- Clientes
- innovador
- datos
- Base de datos
- bases de datos
- día
- a dedicados
- más profundo
- entrega
- desplegar
- desplegado
- despliegue
- despliega
- Diseño
- diseñado
- detalle
- detallado
- detalles
- Detección
- desarrollar
- Developer
- desarrolladores
- Desarrollo
- una experiencia diferente
- diferenciar
- de reservas
- Director
- descubrimiento
- Docker
- No
- dominios
- DE INSCRIPCIÓN
- durante
- pasan fácilmente
- Punto final
- energía
- Motor
- ingeniero
- Ingeniería
- Entorno
- Evento
- ejemplo
- excitado
- existente
- espera
- experience
- explorar
- Feature
- Finalmente
- financiero
- servicios financieros
- Nombre
- cómodo
- FLOTA
- Flexibilidad
- flexible
- centrado
- seguir
- siguiendo
- siguiente
- formato
- Mirando hacia adelante
- FRAME
- Marco conceptual
- función
- funcional
- a la fatiga
- funciones
- futuras
- generar
- la generación de
- generación de AHSS
- Diezmos y Ofrendas
- objetivo
- candidato
- GPU
- graduados
- Grupo procesos
- Grupo
- encargarse de
- Manejo
- Materiales
- Salud
- oído
- ayuda
- ayudando
- ayuda
- esta página
- más alto
- Cómo
- HTTPS
- humana
- Identidad
- imagen
- implementar
- implementación
- importante
- incluir
- incluye
- Incluye
- INSTRUMENTO individual
- industrias
- energético
- EN LA MINA
- originales
- Las opciones de entrada
- Insertos
- instalar
- COMPLETAMENTE
- integración
- Intel
- Intelligence
- interacción
- Interfaz
- IT
- Trabajos
- Empleo
- Clave
- el lab
- lanzamiento
- lanzamiento
- Prospectos
- aprendizaje
- Nivel
- Biblioteca
- línea
- Lista
- carga
- Ubicación
- encontrar una oficina
- máquina
- máquina de aprendizaje
- hecho
- mantener
- gran
- HACE
- hombre
- gestionan
- gestionado
- Management
- Fabricación
- mapa
- cartografía
- mencionado
- métodos
- Métrica
- mínimo
- misión
- ML
- Móvil
- Aplicaciones para móviles
- modelo
- modelos
- modulares
- más,
- MEJOR DE TU
- múltiples
- nombres
- NBA
- necesario
- número
- Juegos Olímpicos
- abre
- funcionar
- optimizado
- Optión
- solicite
- Otro
- EL DESARROLLADOR
- Oxford
- paquete
- parte
- particular
- particularmente
- socios
- Pasando (Paso)
- apasionado
- Patrón de Costura
- porcentaje
- actuación
- realizar
- la perspectiva
- pieza
- plataforma
- Plataformas
- jugando
- Poetry
- puntos
- posible
- industria
- poderoso
- Preparar
- anterior
- primario
- principio
- lista de prioridades
- en costes
- tratamiento
- Procesador
- producir
- Producción
- Productos
- Profesional
- proyecto
- proporcionar
- proporciona un
- propósito
- distancia
- Crudo
- en tiempo real
- reconocer
- grabar
- archivos
- con respecto a
- confianza
- solicitudes
- exigir
- Requisitos
- Requisitos
- requiere
- Recurso
- Recursos
- respuesta
- Resultados
- Ejecutar
- correr
- Safety
- San
- Escalabilidad
- escalable
- Escala
- la ampliación
- Sdk
- seguro
- segmentos
- Sin servidor
- de coches
- Servicios
- set
- pólipo
- Forma
- compartir
- Cáscara
- mostrado
- similares
- Del mismo modo
- sencillos
- Tamaño
- So
- Software
- software como servicio
- Ingeniería de software
- a medida
- Soluciones
- algo
- Alguien
- especializado
- Especificaciones
- velocidad
- Deportes
- montón
- Etapa
- estándar
- estándares de salud
- comienzo
- fundó
- comienza
- Estado
- el estado de la técnica
- Estado
- STORAGE
- tienda
- stream
- en streaming
- Subido
- Después
- verano
- SOPORTE
- soportes
- te
- toma
- equipo
- Tecnología
- Pruebas
- por lo tanto
- A través de esta formación, el personal docente y administrativo de escuelas y universidades estará preparado para manejar los recursos disponibles que derivan de la diversidad cultural de sus estudiantes. Además, un mejor y mayor entendimiento sobre estas diferencias y similitudes culturales permitirá alcanzar los objetivos de inclusión previstos.
- CORBATA
- equipo
- hoy
- juntos
- Tokio
- seguir
- Seguimiento
- tipos
- típicamente
- UCLA
- universidad
- Universidad de Oxford
- desbloquear
- Actualizar
- utilizan el
- usuarios
- Utilizando
- propuesta de
- variedad
- diversos
- verticales
- Video
- Videos
- visión
- web
- servicios web
- QUIENES
- sin
- Actividades:
- trabajado
- trabajando
- años