Redes neuronales en tiempo real para el seguimiento manual

Recientemente, los investigadores de GoogleAI mostraron su enfoque a la tarea de rastrear las manos y determinar los gestos en tiempo real. Estaba involucrado en una tarea similar y, por lo tanto, decidí averiguar cómo abordaron la decisión, qué tecnologías usaron y cómo lograron una buena precisión durante el trabajo en tiempo real en un dispositivo móvil. También lanzó el modelo en Android y lo probé en condiciones reales.


¿Por qué es esto importante?


El reconocimiento de manos es una tarea bastante no trivial, que al mismo tiempo tiene una gran demanda. Esta tecnología se puede utilizar en aplicaciones de realidad adicional para la interacción con objetos virtuales. También puede ser la base para comprender el lenguaje de señas o para crear interfaces de control basadas en gestos.

imagen

Cual es la dificultad?


La percepción natural de las manos en tiempo real es un verdadero desafío para la visión por computadora, las manos a menudo se superponen o se cruzan (dedos cruzados o manos temblorosas). Mientras que las caras tienen patrones de alto contraste, por ejemplo, en el área de los ojos y la boca, la ausencia de tales signos en las manos hace que la detección sea confiable solo por sus signos visuales.

Las manos están constantemente en movimiento, cambian los ángulos de inclinación y se superponen. Para una experiencia de usuario aceptable, el reconocimiento debe funcionar con FPS alto (25+). Además, todo esto debería funcionar en dispositivos móviles, lo que se suma a los requisitos de velocidad, así como a los límites de recursos.

¿Qué hizo GoogleAI?


Implementaron tecnología para el seguimiento preciso de manos y dedos mediante el aprendizaje automático (ML). El programa determina 21 puntos clave de la mano en el espacio 3D (altura, longitud y profundidad) y, sobre la base de estos datos, clasifica los gestos que muestra la mano. Todo esto sobre la base de un solo cuadro de video, funciona en tiempo real en dispositivos móviles y se escala por varias manos.

¿Cómo lo hicieron?


El enfoque se implementa utilizando MediaPipe , un marco multiplataforma de código abierto para construir canales de procesamiento de datos (video, audio, series de tiempo). Algo así como Deepstream de Nvidia, pero con un montón de características y multiplataforma.

La solución consta de 3 modelos principales que trabajan juntos:

Detector de palma (BlazePalm)

  • toma la imagen completa del video
  • devuelve el cuadro delimitador orientado (cuadro delimitador)

Modelo para determinar puntos clave en la mano

  • toma una foto recortada de una mano
  • devuelve 21 puntos clave de una mano en espacio 3D + indicador de confianza (más detalles más adelante en el artículo)

Algoritmo de reconocimiento de gestos

  • toma puntos clave de la mano
  • devuelve el nombre del gesto que muestra la mano

La arquitectura es similar a la utilizada en la tarea de estimación de pose . Al proporcionar una imagen manual recortada y alineada con precisión, la necesidad de aumentar los datos (rotaciones, traslaciones y escalado) se reduce significativamente, y en su lugar el modelo puede concentrarse en la precisión de la predicción de coordenadas.

Detector de palma


Para encontrar la palma, se usa un modelo llamado BlazePalm: un modelo de detector de disparo único (SSD) optimizado para trabajar en un dispositivo móvil en tiempo real.

Un estudio de GoogleAI entrenó un detector de palma en lugar de un detector de brazo completo (la palma es la base de una palma sin dedos). La ventaja de este enfoque es que es más fácil reconocer una palma o un puño que toda la mano con los dedos gesticulantes, y la palma también se puede seleccionar utilizando cuadros de delimitación cuadrados (anclas), ignorando las relaciones de aspecto y, por lo tanto, reduciendo la cantidad de anclas requeridas por 3-5 veces

El extractor de características de las redes de pirámides de características para la detección de objetos (FPN) también se utilizó para comprender mejor el contexto de la imagen incluso para objetos pequeños.

Como una función de pérdida, se tomó la pérdida focal, que se adapta bien al desequilibrio de clases que se produce al generar una gran cantidad de anclajes.

Entropía cruzada clásica: CE (pt) = -log (pt)
Pérdida focal: FL (pt) = - (1-pt) log (pt)

Puede encontrar más información sobre la pérdida de Focall en el excelente localizador de Facebook AI Research (lectura recomendada)

Usando las técnicas anteriores, se logró una precisión promedio de 95.7%. Cuando se usa entropía cruzada simple y sin FPN - 86.22%.

Definición de puntos clave


Después de que el detector de palma ha determinado la posición de la palma a lo largo de la imagen, la región cambia un cierto factor hacia arriba y se expande para cubrir toda la mano. Más adelante en la imagen recortada, se resuelve el problema de regresión: se determina la posición exacta de 21 puntos en el espacio 3D.

Para el entrenamiento, se marcaron manualmente 30,000 imágenes reales. También se hizo un modelo 3D realista de la mano con la ayuda de la cual se generaron más ejemplos artificiales en diferentes fondos.


Arriba: Imágenes de manos reales con puntos clave marcados. Abajo: imágenes artificiales de la mano hechas con un modelo 3D

Reconocimiento de gestos


Para el reconocimiento de gestos, se utilizó un algoritmo simple que determina el estado de cada dedo (por ejemplo, curvo o recto) por los puntos clave de la mano. Luego, todas estas condiciones se comparan con el conjunto de gestos existente. Este método simple pero efectivo le permite reconocer gestos básicos con buena calidad.

Optimizaciones


El secreto principal de la inferencia rápida en tiempo real está oculto en una optimización importante. El detector de palma, que lleva más tiempo, se inicia solo cuando es necesario (muy raramente). Esto se logra calculando la posición de la mano en el siguiente cuadro en función de los puntos clave anteriores de la mano.

Para la sostenibilidad de este enfoque, se agregó otra salida al modelo para determinar los puntos clave: un escalar, que muestra qué tan seguro es el modelo de que la mano está presente en la imagen recortada y que está desplegada correctamente. Cuando el valor de confianza cae por debajo de cierto umbral, el detector de palma se inicia y se aplica a todo el marco.


Prueba de realidad


Lancé esta solución en un dispositivo Android (Xiaomi Redmi Note 5) para una prueba en condiciones reales. El modelo se comporta bien, mapea correctamente el esqueleto de la mano y calcula la profundidad con un número decente de cuadros por segundo.


De los inconvenientes, es posible observar cómo la precisión y la velocidad comienzan a hundirse con un movimiento constante de la mano a lo largo del marco. Esto se debe al hecho de que el modelo constantemente tiene que reiniciar el detector, ya que pierde la posición de la mano cuando se mueve. Si la velocidad de encontrar una mano en movimiento es más importante para usted que la definición de gestos, debe buscar otros enfoques.


Algunos problemas también ocurren cuando la mano se cruza con la cara o fondos complejos similares. De lo contrario, gran trabajo de GoogleAI, esta es una gran contribución al desarrollo futuro de la tecnología.

Artículo del blog de GoogleAI
Seguimiento manual de Github mediapipe

Source: https://habr.com/ru/post/466781/


All Articles