Animation faciale en temps réel pour les avatars

Animation faciale en temps réel pour les avatars


L’expression faciale est une étape critique dans la marche de Roblox vers l’intégration du métaverse dans la vie quotidienne des gens grâce à des interactions d’avatar naturelles et crédibles. Cependant, animer des visages de personnages 3D virtuels en temps réel est un énorme défi technique. Malgré de nombreuses percées dans la recherche, il existe peu d’exemples commerciaux d’applications d’animation faciale en temps réel. C’est particulièrement difficile chez Roblox, où nous prenons en charge une gamme vertigineuse d’appareils utilisateur, des conditions réelles et des cas d’utilisation extrêmement créatifs de nos développeurs.

Animation faciale en temps réel pour les avatars

Dans cet article, nous décrirons un cadre d’apprentissage en profondeur pour faire régresser les commandes d’animation faciale à partir d’une vidéo qui répond à la fois à ces défis et nous ouvre à un certain nombre d’opportunités futures. Le cadre décrit dans ce billet de blog a également été présenté comme un parler à SIGGRAPH 2021.

Animation faciale

Il existe différentes options pour contrôler et animer un face-rig 3D. Celui que nous utilisons s’appelle le système de codage d’action faciale ou FAC, qui définit un ensemble de contrôles (basés sur le placement des muscles faciaux) pour déformer le maillage 3D du visage. Bien qu’ils aient plus de 40 ans, les FACS sont toujours la norme de facto car les commandes FACS sont intuitives et facilement transférables entre les plates-formes. Un exemple d’une plate-forme FACS en cours d’exercice peut être vu ci-dessous.

Animation faciale en temps réel pour les avatars

Méthode

L’idée est que notre méthode basée sur l’apprentissage en profondeur prenne une vidéo en entrée et produise un ensemble de FACS pour chaque image. Pour ce faire, nous utilisons une architecture en deux étapes : détection de visage et régression FACS.

Animation faciale en temps réel pour les avatars

Détection facial

Pour obtenir les meilleures performances, nous implémentons une variante rapide de l’algorithme de détection de visage MTCNN relativement bien connu. L’algorithme MTCNN d’origine est assez précis et rapide mais pas assez rapide pour prendre en charge la détection de visage en temps réel sur de nombreux appareils utilisés par nos utilisateurs. Ainsi, pour résoudre ce problème, nous avons modifié l’algorithme pour notre cas d’utilisation spécifique où une fois qu’un visage est détecté, notre implémentation MTCNN n’exécute que la dernière étape O-Net dans les trames successives, ce qui entraîne une accélération moyenne de 10x. Nous utilisons également les repères faciaux (emplacement des coins des yeux, du nez et de la bouche) prédits par MTCNN pour aligner la boîte englobante du visage avant l’étape de régression suivante. Cet alignement permet un recadrage serré des images d’entrée, réduisant le calcul du réseau de régression FACS.

Animation faciale en temps réel pour les avatars

Régression FACS

Notre architecture de régression FACS utilise une configuration multitâche qui co-entraîne les points de repère et les poids FACS à l’aide d’une colonne vertébrale partagée (appelée encodeur) comme extracteur de caractéristiques.

Cette configuration nous permet d’augmenter les poids FACS appris à partir de séquences d’animation synthétiques avec des images réelles qui capturent les subtilités de l’expression faciale. Le sous-réseau de régression FACS qui est formé parallèlement aux utilisations du régresseur de points de repère circonvolutions causales; ces convolutions opèrent sur des caractéristiques au fil du temps par opposition aux convolutions qui n’opèrent que sur des caractéristiques spatiales comme on peut le trouver dans l’encodeur. Cela permet au modèle d’apprendre les aspects temporels des animations faciales et le rend moins sensible aux incohérences telles que la gigue.

Animation faciale en temps réel pour les avatars

Formation

Nous entraînons initialement le modèle pour une régression de point de repère uniquement en utilisant à la fois des images réelles et synthétiques. Après un certain nombre d’étapes, nous commençons à ajouter des séquences synthétiques pour apprendre les poids du sous-réseau de régression temporelle FACS. Les séquences d’animation synthétiques ont été créées par notre équipe interdisciplinaire d’artistes et d’ingénieurs. Un rig normalisé utilisé pour toutes les différentes identités (maillages de visage) a été mis en place par notre artiste qui a été exercé et rendu automatiquement à l’aide de fichiers d’animation contenant des poids FACS. Ces fichiers d’animation ont été générés à l’aide d’algorithmes de vision par ordinateur classiques exécutés sur des séquences vidéo de gymnastique faciale et complétés par des séquences animées à la main pour des expressions faciales extrêmes qui manquaient dans les vidéos de gymnastique suédoise.

Pertes

Pour former notre réseau d’apprentissage en profondeur, nous combinons linéairement plusieurs termes de perte différents pour régresser les points de repère et les poids FACS :

  • Pertes de position. Pour les repères, la RMSE des positions régressées (Llmks ), et pour les poids FACS, la MSE (Lfacs ).
  • Pertes temporelles. Pour les poids FACS, nous réduisons la gigue en utilisant des pertes temporelles sur des séquences d’animation synthétiques. Une perte de vitesse (Lv ) inspiré par [Cudeiro et al. 2019] est la MSE entre les vitesses cibles et prévues. Il encourage la douceur globale des expressions dynamiques. De plus, un terme de régularisation sur l’accélération (Lselon ) est ajouté pour réduire la gigue des poids FACS (son poids est maintenu bas pour préserver la réactivité).
  • Perte de cohérence. Nous utilisons des images réelles sans annotations dans une perte de cohérence non supervisée (Lc ), semblable à [Honari et al. 2018]. Cela encourage les prédictions de points de repère à être équivariantes sous différentes transformations d’image, améliorant la cohérence de l’emplacement des points de repère entre les images sans nécessiter d’étiquettes de point de repère pour un sous-ensemble des images d’apprentissage.

Performance

Pour améliorer les performances de l’encodeur sans réduire la précision ni augmenter la gigue, nous avons utilisé de manière sélective des convolutions non rembourrées pour réduire la taille de la carte de caractéristiques. Cela nous a donné plus de contrôle sur les tailles des cartes de caractéristiques que ne le feraient des convolutions rythmées. Pour conserver le résidu, nous découpons la carte de caractéristiques avant de l’ajouter à la sortie d’une convolution non rembourrée. De plus, nous avons défini la profondeur des cartes de fonctionnalités sur un multiple de 8, pour une utilisation efficace de la mémoire avec des jeux d’instructions vectorielles tels que AVX et Neon FP16, et résultant en une augmentation des performances de 1,5x.

Notre modèle final a 1,1 million de paramètres et nécessite 28,1 millions de multiplications-accumulations pour s’exécuter. Pour référence, la vanille Mobilenet V2 (sur lequel notre architecture est basée) nécessite 300 millions de multiplications-accumulations pour s’exécuter. Nous utilisons le NCNN framework pour l’inférence de modèle sur l’appareil et le temps d’exécution d’un seul thread (y compris la détection de visage) pour une image de vidéo sont répertoriés dans le tableau ci-dessous. Veuillez noter qu’un temps d’exécution de 16 ms prendrait en charge le traitement de 60 images par seconde (FPS).

Animation faciale en temps réel pour les avatars

Et après

Notre pipeline de données synthétiques nous a permis d’améliorer de manière itérative l’expressivité et la robustesse du modèle formé. Nous avons ajouté des séquences synthétiques pour améliorer la réactivité aux expressions manquées, ainsi qu’un entraînement équilibré sur diverses identités faciales. Nous obtenons une animation de haute qualité avec un minimum de calculs en raison de la formulation temporelle de notre architecture et des pertes, d’une colonne vertébrale soigneusement optimisée et d’une vérité au sol sans erreur à partir des données synthétiques. Le filtrage temporel effectué dans le sous-réseau de pondérations FACS permet de réduire le nombre et la taille des couches dans le backbone sans augmenter la gigue. La perte de cohérence non supervisée nous permet de nous entraîner avec un grand ensemble de données réelles, améliorant la généralisation et la robustesse de notre modèle. Nous continuons à travailler pour affiner et améliorer nos modèles, afin d’obtenir des résultats encore plus expressifs, sans gigue et robustes.

Si vous souhaitez travailler sur des défis similaires à la pointe du suivi facial en temps réel et de l’apprentissage automatique, veuillez consulter certains de nos postes ouverts avec notre équipe.



Source

Laisser un commentaire