La expresión facial es un paso crítico en la marcha de Roblox para hacer que el metaverso sea parte de la vida diaria de las personas a través de interacciones de avatar naturales y creíbles. Sin embargo, animar caras de personajes virtuales en 3D en tiempo real es un gran desafío técnico. A pesar de los numerosos hallazgos de la investigación, existen ejemplos comerciales limitados de aplicaciones de animación facial en tiempo real. Esto es particularmente desafiante en Roblox, donde admitimos una variedad vertiginosa de dispositivos de usuario, condiciones del mundo real y casos de uso altamente creativos de nuestros desarrolladores.
En esta publicación, describiremos un marco de aprendizaje profundo para la regresión de los controles de animación facial de video que aborda estos desafíos y nos abre a una serie de oportunidades futuras. El marco descrito en esta publicación de blog también se presentó como un conversación en el SIGGRAFÍA 2021🇧🇷
Animación Facial
Hay varias opciones para controlar y animar un equipo de cara 3D. Lo que usamos se llama Sistema de Codificación de Acción Facial o FACS, que define un conjunto de controles (basados en la ubicación de los músculos faciales) para deformar la malla facial 3D. A pesar de tener más de 40 años, el FACS sigue siendo el estándar de facto porque los controles del FACS son intuitivos y fáciles de transferir entre plataformas. A continuación se puede ver un ejemplo de equipo FACS que se está ejercitando.
Método
La idea es que nuestro método basado en el aprendizaje profundo tome un video como entrada y genere un conjunto de FACS para cada cuadro. Para lograr esto, utilizamos una arquitectura de dos etapas: detección de rostros y regresión FACS.
Detección de rostro
Para obtener el mejor rendimiento, implementamos una variante rápida del relativamente conocido algoritmo de detección de rostros MTCNN. El algoritmo MTCNN original es bastante preciso y rápido, pero no lo suficientemente rápido como para permitir la detección de rostros en tiempo real en muchos de los dispositivos que utilizan nuestros usuarios. Entonces, para abordar esto, ajustamos el algoritmo para nuestro caso de uso específico, donde una vez que se detecta una cara, nuestra implementación de MTCNN solo ejecuta la etapa final de O-Net en cuadros sucesivos, lo que resulta en una velocidad promedio de 10x. También usamos los puntos de referencia faciales (ubicación de los ojos, la nariz y las comisuras de la boca) predichos por MTCNN para alinear el cuadro delimitador de la cara antes de la siguiente etapa de regresión. Esta alineación permite un corte preciso de las imágenes de entrada, lo que reduce el cálculo de la red de regresión FACS.
Regresión FACS
Nuestra arquitectura de regresión de FACS utiliza una configuración de subprocesos múltiples que entrena conjuntamente los puntos de referencia y los pesos de FACS mediante una red troncal compartida (conocida como codificador) como extractor de características.
Esta configuración nos permite aumentar los pesos FACS aprendidos de secuencias de animación sintética con imágenes reales que capturan las sutilezas de la expresión facial. La subred de regresión FACS que se entrena junto con los usos de regresión de punto de referencia circunvoluciones causales🇧🇷 estas convoluciones operan en características a lo largo del tiempo, a diferencia de las convoluciones que solo operan en características espaciales como las que se pueden encontrar en el codificador. Esto permite que el modelo aprenda los aspectos temporales de las animaciones faciales y lo hace menos sensible a las inconsistencias como el jitter.
Capacitación
Inicialmente, entrenamos el modelo solo para la regresión de referencia utilizando imágenes reales y sintéticas. Después de una cierta cantidad de pasos, comenzamos a agregar secuencias sintéticas para aprender los pesos de subred de regresión FACS temporal. Las secuencias de animación sintéticas fueron creadas por nuestro equipo interdisciplinario de artistas e ingenieros. Nuestro artista creó una plataforma normalizada utilizada para todas las diferentes identidades (mallas faciales), que se ejercitó y renderizó automáticamente utilizando archivos de animación que contenían pesos FACS. Estos archivos de animación se generaron utilizando algoritmos clásicos de visión por computadora ejecutados en secuencias de video de calistenia facial y se complementaron con secuencias animadas a mano para expresiones faciales extremas que faltaban en los videos de calistenia.
Pérdidas
Para entrenar nuestra red de aprendizaje profundo, combinamos linealmente varios términos de pérdida diferentes para retroceder puntos de referencia y pesos de FACS:
Pérdidas posicionales. Para hitos, el RMSE de posiciones retrocedidas (Llmks) y para pesos FACS, el MSE (Lfacs). Pérdidas Temporales. Para los pesos FACS, reducimos el jitter mediante el uso de pérdida de tiempo en secuencias de animación sintética. Una pérdida de velocidad (Lv ) inspirada en [Cudeiro et al. 2019] es el MSE entre las velocidades objetivo y predicha. Fomenta la suavidad general de las expresiones dinámicas. Además, se agrega un término de regularización de aceleración (Lacc) para reducir la fluctuación de los pesos FACS (su peso se mantiene bajo para preservar la capacidad de respuesta). Pérdida de consistencia. Usamos imágenes reales sin anotaciones en una pérdida de consistencia (Lc) no supervisada, similar a [Honari et al. 2018]🇧🇷 Esto fomenta que las predicciones de referencia sean equivalentes bajo diferentes transformaciones de imágenes, lo que mejora la consistencia de la ubicación de referencia en los fotogramas sin requerir etiquetas de referencia para un subconjunto de las imágenes de entrenamiento.
interino
Para mejorar el rendimiento del codificador sin reducir la precisión ni aumentar la fluctuación, usamos circunvoluciones sin rellenar de forma selectiva para reducir el tamaño del mapa de características. Esto nos dio más control sobre los tamaños de los mapas de características que sobre las convoluciones. Para mantener el residuo, recortamos el mapa de características antes de agregarlo a la salida de una convolución sin rellenar. Además, hemos establecido la profundidad de los mapas de recursos en un múltiplo de 8 para un uso eficiente de la memoria con conjuntos de instrucciones vectoriales como AVX y Neon FP16, lo que da como resultado un aumento del rendimiento de 1,5 veces.
Nuestro modelo final tiene 1,1 millones de parámetros y requiere 28,1 millones de acumulaciones múltiples para ejecutarse. Para referencia, vainilla red móvil V2 (en el que se basa nuestra arquitectura) requiere 300 millones de pilas de multiplicación para ejecutarse. usamos el NCNN El marco para la inferencia del modelo en el dispositivo y el tiempo de ejecución de subproceso único (incluida la detección de rostros) para un cuadro de video se enumeran en la siguiente tabla. Tenga en cuenta que un tiempo de ejecución de 16 ms admitiría el procesamiento a 60 fotogramas por segundo (FPS).
cual es el siguiente
Nuestra canalización de datos sintéticos nos permitió mejorar iterativamente la expresividad y la solidez del modelo entrenado. Hemos agregado secuencias sintéticas para mejorar la capacidad de respuesta a las expresiones perdidas, así como un entrenamiento equilibrado en diversas identidades faciales. Logramos una animación de alta calidad con un cálculo mínimo debido a la formulación temporal y las pérdidas de nuestra arquitectura, una columna vertebral cuidadosamente optimizada y una base de datos sin errores a partir de los datos sintéticos. El filtrado temporal realizado en la subred de pesos FACS permite reducir el número y el tamaño de las capas en la red troncal sin aumentar la fluctuación. La pérdida de consistencia no supervisada nos permite entrenar con un gran conjunto de datos reales, mejorando la generalización y robustez de nuestro modelo. Continuamos trabajando para refinar y mejorar aún más nuestros modelos para obtener resultados aún más expresivos, sin fluctuaciones y sólidos.
Si está interesado en trabajar en desafíos similares a la vanguardia del seguimiento facial en tiempo real y el aprendizaje automático, consulte algunos de nuestros Posiciones abiertas con nuestro equipo.