Animación facial en tiempo real para avatares

La expresión facial es un paso crítico en la marcha de Roblox hacia la integración del metaverso en 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 muchos avances en la investigación, existen pocos ejemplos comerciales de aplicaciones de animación facial en tiempo real. Es especialmente desafiante en Roblox, donde admitimos una variedad vertiginosa de dispositivos de usuario, condiciones del mundo real y casos de uso tremendamente creativos de nuestros desarrolladores.
En este artículo, describiremos un marco de aprendizaje profundo para la regresión de comandos 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 hablar à SIGGRAPH 2021.
animacion facial
Hay diferentes opciones para controlar y animar un equipo de cara 3D. El que usamos se llama Sistema de Codificación de Acción Facial o FAC, que define un conjunto de controles (basados en la ubicación de los músculos faciales) para deformar la malla 3D de la cara. Aunque tiene más de 40 años, FACS sigue siendo el estándar de facto porque los comandos de FACS son intuitivos y fáciles de transferir entre plataformas. A continuación se puede ver un ejemplo de una plataforma FACS en ejercicio.
Método
La idea es que nuestro método basado en el aprendizaje profundo tome un video de entrada y genere un conjunto de FACS para cada cuadro. Para hacer esto, usamos una arquitectura de dos pasos: 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 admitir la detección de rostros en tiempo real en muchos dispositivos utilizados por nuestros usuarios. Entonces, para resolver este problema, modificamos el algoritmo para nuestro caso de uso específico donde, una vez que se detecta una cara, nuestra implementación de MTCNN solo ejecuta el último paso de O-Net en cuadros sucesivos, lo que da como resultado una aceleración promedio de 10x. También usamos los puntos de referencia faciales (ubicación de las esquinas de los ojos, la nariz y la boca) predichos por MTCNN para alinear el cuadro delimitador de la cara antes del siguiente paso de regresión. Esta alineación permite un recorte ajustado 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 FACS utiliza una configuración multitarea que co-entrena puntos de referencia y ponderaciones de FACS utilizando una red troncal compartida (llamada 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 complejidades de la expresión facial. La subred de regresión FACS que se entrena junto con los usos del regresor histórico 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 susceptible a inconsistencias como el jitter.
Formación
Inicialmente, entrenamos el modelo para la regresión de solo puntos de referencia utilizando imágenes reales y sintéticas. Después de una serie de pasos, comenzamos a agregar secuencias sintéticas para conocer los pesos del subarreglo de regresión temporal FACS. Las secuencias de animación sintéticas fueron creadas por nuestro equipo interdisciplinario de artistas e ingenieros. Nuestro artista armó una plataforma estandarizada utilizada para todas las diferentes identidades (mallas faciales), que fue entrenada y renderizada automáticamente usando archivos de animación que contienen pesos FACS. Estos archivos de animación se generaron utilizando algoritmos de visión por computadora clásicos que se ejecutan en secuencias de video de gimnasia 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 los puntos de referencia y pesos de FACS:
- Pérdidas de posición. Para los puntos de referencia, el RMSE de las posiciones retrocedidas (Lpelículas ), y para los pesos FACS, el MSE (Lcolegios ).
- Pérdidas temporales. Para los pesos FACS, reducimos el jitter usando pérdidas de tiempo en secuencias de animación sintética. Una pérdida de velocidad (Lv ) inspirado por [Cudeiro et al. 2019] es el MSE entre las velocidades objetivo y predicha. Fomenta la suavidad general de las expresiones dinámicas. Además, un término de regularización de la aceleración (Lselon ) se agrega para reducir la fluctuación de los pesos FACS (su peso se mantiene bajo para preservar la capacidad de respuesta).
- Pérdida de consistencia. Utilizamos imágenes reales sin anotaciones en una pérdida de coherencia no supervisada (Lc ), similar a [Honari et al. 2018]. Esto fomenta que las predicciones de puntos de referencia sean equivariantes bajo diferentes transformaciones de imágenes, lo que mejora la consistencia de la ubicación de puntos de referencia entre fotogramas sin requerir etiquetas de puntos de referencia para un subconjunto de las imágenes en el aprendizaje.
Desempeno
Para mejorar el rendimiento del codificador sin reducir la precisión ni aumentar la fluctuación, utilizamos selectivamente circunvoluciones sin relleno 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 las convoluciones con ritmo. Para mantener el residuo, recortamos el mapa de características antes de agregarlo a la salida de una convolución sin relleno. Además, hemos establecido la profundidad del mapa de funciones 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 acumulación múltiple para ejecutarse. Para referencia, vainilla red móvil V2 (en el que se basa nuestra arquitectura) requiere 300 millones de acumulación múltiple 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 un procesamiento de 60 fotogramas por segundo (FPS).
Y después de
Nuestra canalización de datos sintéticos nos permitió mejorar iterativamente la expresividad y la solidez del modelo entrenado. Agregamos secuencias sintéticas para mejorar la capacidad de respuesta a las expresiones perdidas, así como un entrenamiento equilibrado en varias identidades faciales. Logramos animaciones de alta calidad con un cálculo mínimo debido a la sincronización de nuestra arquitectura y la formulación con pérdida, la columna vertebral cuidadosamente optimizada y la verdad básica sin errores de los datos sintéticos. El filtrado temporal realizado en el subarreglo de ponderación 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 nuestros modelos, con el fin de lograr resultados aún más expresivos, sin fluctuaciones y robustos.
Si desea 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.