Roblox anima avatares en tiempo real para el metaverso

Roblox anima avatares en tiempo real para el metaverso. Uno de los pasos importantes para el metaverso es la apariencia de los avatares 3D. Y por supuesto cualquier avatar tiene que tener una animación convincente y lo más realista posible. La compañía Roblox lo sabe y se ha puesto manos a la obra.

Animar las caras de los personajes virtuales en 3D en tiempo real es un enorme desafío técnico. A pesar de los numerosos avances de la investigación, hay ejemplos comerciales limitados de aplicaciones de animación facial en tiempo real.

Esto es particularmente desafiante en Roblox. Donde admitimos una vertiginosa variedad de dispositivos de usuario, condiciones del mundo real y casos de uso tremendamente 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. Lo hacemos a partir del video que aborda estos desafíos. Nos abre a una serie de oportunidades futuras. El marco descrito en esta publicación de blog también se presentó como una charla en SIGGRAPH 2021.

Roblox anima avatares en tiempo real para el metaverso

Animación facial en los avatares animados con Roblox

Hay varias opciones para controlar y animar un equipo facial 3D. El que utilizamos se llama Facial Action Coding System o FACS; que define un conjunto de controles (basados en la colocación del músculo facial) para deformar la malla facial 3D.

A pesar de tener más de 40 años, los FACS siguen siendo el estándar de facto. Esto es debido a que los controles FACS son intuitivos y fácilmente transferibles entre plataformas. Un ejemplo de una plataforma FACS que se está ejerciendo se puede ver a continuación.

Método de Roblox

El método se basa en el aprendizaje profundo tome un video como entrada y salida de un conjunto de FACS para cada fotograma. Para lograr esto, utilizamos una arquitectura de dos etapas: detección de rostros y regresión FACS.

Detección de rostros

Para lograr 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 de los dispositivos utilizados por nuestros usuarios.

Por lo tanto, para resolver esto, ajustamos el algoritmo para nuestro caso de uso específico donde una vez que se detecta una cara. Nuestra implementación MTCNN solo ejecuta la etapa final de O-Net en los fotogramas sucesivos, lo que resulta en una aceleración promedio de 10x.

También utilizamos 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 etapa de regresión posterior. Esta alineación permite un recorte ajustado de las imágenes de entrada, reduciendo el cálculo de la red de regresión FACS.

Roblox anima avatares en tiempo real para el metaverso

Regresión FACS

Nuestra arquitectura de regresión FACS utiliza una configuración multitarea que co-entrena puntos de referencia y pesos FACS. Lo hace utilizando una columna vertebral 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 el regresor de puntos de referencia utiliza circunvoluciones causales.

Estas circunvoluciones operan en características a lo largo del tiempo; en lugar de circunvoluciones que solo operan en características espaciales como se puede encontrar en el codificador. Esto permite que el modelo aprenda aspectos temporales de las animaciones faciales y lo hace menos sensible a inconsistencias como el jitter.

Panel de configuración para animar avatares 3D

Adiestramiento del sistema Roblox

Inicialmente entrenamos el modelo solo para la regresión de puntos de referencia utilizando imágenes reales y sintéticas. Después de un cierto número de pasos, comenzamos a agregar secuencias sintéticas para aprender los pesos de la subred de regresión FACS temporal.

Las secuencias de animación sintética fueron creadas por nuestro equipo interdisciplinario de artistas e ingenieros. Nuestro artista configuró un equipo normalizado utilizado para todas las diferentes identidades (mallas faciales); que se ejercitó y renderizó automáticamente utilizando archivos de animación que contienen pesos FACS.

Estos archivos de animación se generaron utilizando algoritmos clásicos de visión por ordenador que se ejecutan en secuencias de video de calistenia facial; y se complementaron con secuencias animadas a mano para expresiones faciales extremas que faltaban en los videos calistenos.

Pérdidas posicionales de los píxeles

Para entrenar nuestra red de aprendizaje profundo, combinamos linealmente varios términos de pérdida diferentes para retroceder puntos de referencia y pesos FACS:

Pérdidas posicionales: Para los puntos de referencia, el RMSE de las posiciones regresivas (Llmks), y para los pesos FACS, el MSE (Lfacs).

Pérdidas temporales: Para los pesos FACS, reducimos el jitter utilizando pérdidas temporales sobre secuencias de animación sintéticas. Una pérdida de velocidad (Lv) inspirada en el MSE entre el objetivo y las velocidades predichas. Fomenta la suavidad general de las expresiones dinámicas. Además, se agrega un término de regularización en la aceleración (Lacc) para reducir el jitter de los pesos FACS. Donde 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 consistencia no supervisada. Esto fomenta que las predicciones de puntos de referencia sean equivariantes bajo diferentes transformaciones de imagen. Mejorando la consistencia de la ubicación de puntos de referencia entre marcos; sin requerir etiquetas de puntos de referencia para un subconjunto de las imágenes de entrenamiento.

Pérdidas posicionales de los píxeles en los avatares 3D

Rendimiento de Roblox

Para mejorar el rendimiento del codificador sin reducir la precisión o aumentar la fluctuación; utilizamos selectivamente circunvoluciones sin acolchar para disminuir el tamaño del mapa de entidades. Esto nos dio más control sobre los tamaños de los mapas de entidades que las circunvoluciones escalonadas. Para mantener el residual, cortamos el mapa de entidades antes de agregarlo a la salida de una convolución sin acolchar.

Además, establecemos la profundidad de los mapas de características en un múltiplo de 8. Esto proporciona un uso eficiente de la memoria con conjuntos de instrucciones vectoriales como AVX y Neon FP16; y lo que resulta en un aumento de rendimiento de 1.5x.

Nuestro modelo final tiene 1,1 millones de parámetros y requiere 28,1 millones de multiplicaciones para ejecutarse. Como referencia, vanilla Mobilenet V2 (en el que se basa nuestra arquitectura) requiere 300 millones de multiplicadores-acumulados para ejecutarse.

Utilizamos el marco NCNN para la inferencia de modelos en el dispositivo y el tiempo de ejecución de un solo subproceso. Incluida la detección de rostros para un fotograma de video. Tenga en cuenta que un tiempo de ejecución de 16 ms admitiría el procesamiento de 60 fotogramas por segundo (FPS).

Rendimiento para crear avatares 3D

¿Qué sigue en Roblox?

Nuestra canalización de datos sintéticos nos permitió mejorar iterativamente la expresividad y robustez del modelo entrenado. Agregamos secuencias sintéticas para mejorar la capacidad de respuesta a las expresiones perdidas, y también un entrenamiento equilibrado en identidades faciales variadas.

Logramos una animación de alta calidad con un cálculo mínimo debido a la formulación temporal de nuestra arquitectura y pérdidas. Una columna vertebral cuidadosamente optimizada y una verdad de tierra libre de errores a partir de los datos sintéticos. El filtrado temporal llevado a cabo en la subred de pesos FACS nos permite reducir el número y el tamaño de las capas en la columna vertebral sin aumentar el jitter.

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 nerviosismo y robustos.

Si estás interesado en trabajar en desafíos similares a la vanguardia del seguimiento facial en tiempo real y el aprendizaje automático; consulta algunas de las plazas vacantes en nuestro equipo.

En el siguiente video puedes ver cómo Roblox anima avatares en tiempo real

Roblox anima avatares en tiempo real para el metaverso – video YouTube

Qué son las equivariantes aplicadas a la geometría

En matemáticas, la equivarianza es una forma de simetría para funciones de un espacio con simetría a otro (como espacios simétricos). Se dice que una función es un mapa equivariante cuando su dominio y codominio son actuados por el mismo grupo de simetría, y cuando la función conmuta con la acción del grupo. Es decir, aplicar una transformación de simetría y luego calcular la función produce el mismo resultado que calcular la función y luego aplicar la transformación.

Los mapas equivariantes generalizan el concepto de invariantes, funciones cuyo valor no cambia por una transformación de simetría de su argumento. El valor de un mapa equivariante a menudo (imprecisamente) se denomina invariante.

En la inferencia estadística, la equivarianza bajo transformaciones estadísticas de datos es una propiedad importante de varios métodos de estimación. En matemáticas puras, la equivarianza es un objeto central de estudio en topología equivariante y sus subtemas cohomología equivariante y teoría de homotopía estable equivariante.

Triángulos variables e invariables

En la geometría de triángulos, el área y el perímetro de un triángulo son invariables: traducir o rotar un triángulo no cambia su área o perímetro. Sin embargo, los centros triangulares como el centroide, el circuncentro, el centro y el ortocentro no son invariables, porque mover un triángulo también hará que sus centros se muevan. En cambio, estos centros son equivariantes: aplicando cualquier congruencia euclidiana (una combinación de traslación y rotación) a un triángulo, y luego construyendo su centro, produce el mismo punto que construir el centro primero, y luego aplicar la misma congruencia al centro. En términos más generales, todos los centros triangulares también son equivariantes bajo transformaciones de similitud (combinaciones de traslación, rotación y escala), y el centroide es equivariante bajo transformaciones afines.

La misma función puede ser un invariante para un grupo de simetrías y equivariante para un grupo diferente de simetrías. Por ejemplo, bajo transformaciones de similitud en lugar de congruencias, el área y el perímetro ya no son invariables: escalar un triángulo también cambia su área y perímetro. Sin embargo, estos cambios ocurren de una manera predecible: si un triángulo se escala por un factor de s, el perímetro también escala por s y el área escala por s2. De esta manera, la función que mapea cada triángulo a su área o perímetro puede verse como equivariante para una acción de grupo multiplicativo de las transformaciones de escala sobre los números reales positivos.

Más información sobre Roblox

Puedes consultar su página web aquí. Tienes más artículos en este mismo blog y también dispones de más información y comentarios en el foro. Sigue leyendo…