15 September 2023

21 mins de lecture

ZeroEGGS: génération de gestes sans capture vidéo à partir de la parole et d’un exemple

Link to the paper : https://onlinelibrary.wiley.com/doi/10.1111/cgf.14734

Les cartes des jeux à monde ouvert s’accroissent sans cesse, tout comme le nombre d’êtres numériques qui y existent. Maintenir le réalisme et la crédibilité de ces populations contribue à maintenir l’engagement de nos joueurs et de nos joueuses. Toutefois, nos équipes d’animation doivent faire preuve de créativité pour assurer que chaque être de cette multiplicité de personnages, d’animaux et de personnages non jouables demeure réaliste et unique.

Ubisoft La Forge se penche donc sur ce problème, travaillant avec notre studio de capture interne et nos équipes d’animation. Ils recherchent en ce moment différents systèmes d’animation et réalisent des prototypes qui se basent sur les dernières découvertes académiques.

Notre mission est de fournir aux équipes d’animation des méthodes alternatives d’animation qui peuvent augmenter la vitesse de production tout en favorisant l’unicité de chaque être numérique dans nos jeux.

Dans cet article, nous présentons ZeroEGGS, la génération de gestes sans capture vidéo à partir de la parole et d’un exemple.

De courts extraits vidéo d’un type de mouvement sont sélectionnés par des artistes, puis des gestes sont synthétisés à partir de ces exemples, et ce, même si le style n’avait pas été utilisé lors de l’entraînement du modèle.

ZeroEGGS peut également générer une variété de résultats pour une même entrée: les équipes de la scénarisation et de l’animation peuvent davantage contrôler les caractéristiques des gestes en les combinant ou en les ajustant selon le résultat requis.

Puisque ZeroEGGS est aussi peu gourmand sur le plan de la mémoire comparativement aux outils actuels, il offre une extensibilité pour les données et un potentiel d’utilisation en temps réel.

Outils actuels

Une méthode commune pour automatiser l’animation de gestes est de déclencher des animations préenregistrées à partir d’une base de données. Celle-ci est organisée par un ensemble prédéfini d’étiquettes caractérisant les émotions qui sont programmées et annotées à la main. Cela se fait généralement en recueillant d’abord une base de données de capture de mouvement (mocap) de gestes animés accompagnés d'enregistrements audio et des transcriptions correspondantes. Ensuite, pendant l’exécution, les mots-clés sont extraits des transcriptions avec leurs moments précis. Puis une liste d’animations qui correspondent au mot-clé (ainsi qu’à des mots similaires) et à l’émotion définie par l’utilisateur ou l’utilisatrice est regroupée à partir de cette base de données. Chaque candidat est évalué en fonction de plusieurs facteurs, tels que la durée de l’animation, ou l’énergie du geste. Enfin, le candidat avec le score le plus élevé est sélectionné. Les candidats ayant obtenu les scores les plus élevés sont ensuite regroupés pour former une séquence de segments fondus ensemble afin d’éliminer les discontinuités.

Voilà ce qui explique le cœur de telles approches, toutefois certaines étapes de prétraitement et de post-traitement manuels s’avèrent généralement aussi nécessaires. Pour une explication détaillée d’une telle façon de procéder, visionnez cette conférence par François Paradis sur la génération procédurale de dialogues dans les cinématiques d’Assassin’s Creed Odyssey (offert en anglais seulement.

Bien qu’efficace, cette méthode requiert des quantités de temps et de main-d’œuvre considérables pour produire une variété d’animations captivantes et réalistes. Un autre désavantage est que de telles approches dépendent fortement sur les données, où la quantité nécessaire de données dépend de la conception, et de la qualité et de la flexibilité demandées. Par exemple, le type d’émotion qui devrait être pris en charge, ou à quelle mesure il doit correspondre aux mots-clés donnés. Cette dépendance aux données entraînera une grande quantité de données pour la production d’un jeu AAA. En revanche, les séances de mocap sont très gourmandes en ressources et conserver toutes ces données d’animation en mémoire ainsi qu’en faire la recherche mène à une moins bonne performance d’exécution. Cela pose un dilemme intéressant entre la diversité des animations et le budget de production. Une problématique semblable existe également dans d’autres approches qui se basent directement sur les données, par exemple la sélection par recherche de mouvement (« motion matching » en anglais) qui s’échelonne mal en ce qui a trait aux données (vous pouvez lire notre article sur la sélection apprise de mouvement et comment nous avons abordé le problème d’extensibilité). Enfin, il convient de mentionner que de telles approches ne combinent (mélangent) pas les données pour vous, les animations préenregistrées pourraient ne pas être synchronisées avec le rythme de la parole, et il n’est pas facile de contrôler les caractéristiques de bas niveau du mouvement, par exemple la hauteur d’une main ou le mouvement du corps.

Approches à base d’apprentissage automatique

Ces problèmes d’extensibilité et de synchronisation ont incité la recherche sur des méthodes de génération automatique de gestes à l’aide de techniques d’apprentissage automatique. Les modèles basés sur l’apprentissage automatique sont typiquement entraînés sur un ensemble de paroles et/ou de transcriptions associées à des animations correspondantes lors d’une phase d’entraînement afin d’apprendre ces correspondances. Ensuite, pendant l’exécution, le modèle peut générer des gestes sans avoir à accéder à la base de données. Voilà ce qui résout le problème d’extensibilité, puisque tout ce qui doit être stocké est le modèle, dont la taille est indépendante de la taille de l’ensemble des données d’entraînement. Néanmoins, malgré des efforts de recherche récents1,2, la génération de mouvements de gestes réalistes à l’aide de l’apprentissage automatique demeure un problème difficile. Et encore plus complexe: aborder l’expressivité de l’état et l’identité du personnage qui parle en offrant un contrôle sur le style.

ZeroEGGS: génération de gestes sans capture vidéo à partir de la parole et d’un exemple

Notre objectif avec cette recherche était de concevoir un cadre à base d’apprentissage automatique qui:

  1. génère des gestes de haute qualité à partir de la parole, 2) est efficace et évolutif lors de l’exécution et 3) code le style des gestes avec un certain contrôle supplémentaire sur des caractéristiques de bas niveau telles que le mouvement des mains ou du corps.

Aperçu du système

Commençons avec un scénario simple où l’on a un réseau neuronal nommé « Speech Encoder » (l’encodeur de parole). Ce Speech Encoder prend la parole brute en entrée et génère une séquence qu’on appelle « Speech Embedding » (l’intégration de la parole). La séquence Speech Embedding contient les informations de l’audio pour générer des gestes. S’ensuit un autre réseau nommé « Gesture Generator » (le générateur de gestes) qui utilise la séquence Speech Embedding et génère les gestes qui devraient correspondre à la parole donnée.

Maintenant, on pourrait être en mesure de générer des gestes à partir d’une simple parole. Toutefois, il n’y a pas de contrôle supplémentaire sur les caractéristiques stylistiques des gestes générés. De plus, si l’on entraîne un tel modèle sur un ensemble de données qui contient différents styles, notre réseau devient désorienté lors de l’entraînement et génère généralement la moyenne de ces caractéristiques, ce qu’on appelle un effondrement par la moyenne (« mean collapse » en anglais).

Figure 2 : Génération d'un geste uniquement à partir de la parole

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Speech Encoder and Gesture Generator IMG

Une manière d’ajouter un contrôle sur les styles est de moduler les gestes générés en soumettant le réseau Gesture Generator à une étiquette de style.

Figure 3 : Génération de gestes à partir d'étiquettes

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Speech Encoder and Gesture Generator - Labels IMG

Néanmoins, ces approches manquent de flexibilité, car elles sont limitées par le contenu de l’ensemble des données d’entraînement. Elles requièrent des exemples de chaque style avant l’entraînement du modèle et ne peuvent pas généraliser au-delà de cette gamme. Cela signifie qu’un ensemble de données précis doit être saisi pour chaque style, ce qui entraîne une charge de travail prohibitive dans les applications à plus grande échelle. Deuxièmement, puisqu’il peut être difficile de saisir le style d’un mouvement par des mots, il pourrait être plus facile de décrire un style en fournissant un exemple du style de mouvement souhaité. On pourrait ne pas avoir une définition exacte du style « joyeux », qui pourrait varier d’une personne à l’autre. Par conséquent, afin d’augmenter l’échelle, une méthode de génération de gestes doit pouvoir capturer le style individuel à partir d’une quantité très limitée de données, idéalement à l’aide d’un seul exemple.

Pour remédier à cette situation, on peut ajouter à notre modèle un autre réseau appelé « Style Encoder » (l’encodeur de style), lequel prend une entrée et produit un vecteur de longueur fixe qui résume les caractéristiques de l’exemple. Ensuite, au lieu de fournir au Gesture Generator un style avec une étiquette, on fournit cette représentation vectorielle. Le Style Encoder apprendre à fournir les meilleures caractéristiques requises pour exprimer différents styles en vecteur de longueur fixe à partir d’un espace latent de basse dimension.

Figure 4 : Génération de gestes à partir d'exemples

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Style Encoder IMG

Implementation

Mise en œuvre

Voici une brève description de la conception de chaque bloc.

Speech Encoder est composé de deux blocs principaux: le « Speech Feature Extractor » (l’extracteur des caractéristiques de la parole) extrait des caractéristiques utiles des données audios brutes, par exemple leur spectrogramme et leur énergie, qui sont ensuite converties par un réseau neuronal à la séquence Speech Embedding.

Figure 5 : Encodeur de parole

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Speech Encoder IMG

Figure 6 : Extracteur de caractéristiques de la parole

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Audio Feature IMG

Le Style Encoder est aussi composé de deux blocs. Le premier bloc est l’« Animation Feature Extractor » (l’extracteur des caractéristiques de l’animation), lequel extrait les caractéristiques des poses représentées par les transformations locales des articulations, les vitesses de translation et de rotation locales des articulations, ainsi que les vitesses de translation et de rotation locales par rapport à la transformation par rapport au point d’origine sur le personnage. Ensuite, les caractéristiques extraites image par image sont fournies à un réseau neuronal pour obtenir les paramètres de la distribution postérieure de l’auto-encodeur variationnel (VAE, de l’anglais « variational auto encoder »). Enfin, la représentation vectorielle de style est échantillonnée de la distribution postérieure. Au cours de la phase d’entraînement, la séquence de l’exemple est échantillonnée du même extrait d’animation que la séquence cible. Cela peut par conséquent être interprété comme étant un modèle de séquence à séquence soumis à une représentation compressée du style, ou un auto-encodeur soumis à des caractéristiques de parole à chaque image. Un désavantage des auto-encodeurs (AE) pour une telle application est que leur espace latent n’est pas régularisé et, par conséquent, n’est pas organisé de manière dense et structurée. Ce manque de régularisation mène à un surajustement qui peut à son tour conduire à un contenu insignifiant si l’on échantillonne cet espace latent. En revanche, on veut que notre modèle apprenne un espace latent dense et désentrelacé. De cette manière, on peut échantillonner des sous-espaces qui représentent des styles similaires et on a aussi la capacité d’aller au-delà des styles existants ou d’interpoler entre différents styles.

Une option claire est de convertir l’architecture d’auto-encodage en un cadre de VAE qui est connu pour sa capacité à apprendre des espaces latents désentrelacés et interpolés. Au lieu d’émettre un seul vecteur, l’encodeur VAE produit les paramètres d’une distribution prédéfinie (distribution postérieure). Les modèles VAE abordent alors le problème de l’espace latent non régularisé en incluant un terme de régularisation qui impose des contraintes sur la distribution latente, les forçant à adopter une distribution simple, par exemple une distribution normale (distribution a priori). Maintenant, on peut explorer et échantillonner cet espace latent dense et générer de nouveaux styles pour notre geste. C’est pourquoi nous appelons ce modèle « génération de gestes sans capture vidéo à partir de la parole et d’un exemple » (« Zero-shot Example-based Gesture Generation from Speech, ZeroEGGS » en anglais), car il peut générer de nouveaux styles en temps réel à partir d’exemples avec des styles qui n’ont pas été vus durant l’entraînement.

Une dernière observation : l’échantillonnage aléatoire de la distribution postérieure ajoute un autre avantage à notre modèle, lui permettant de générer une variété d’interprétations à partir d’une seule parole et du même style tout en conservant la même énergie et les mêmes intonations, ce qui répond à la nature stochastique de mouvement gestuel.

Figure 7 : Encodeur de style

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Style Embedding Vector IMG

Le cœur du Gesture Generator est le « Recurrent Decoder » (décodeur récursif), un réseau neuronal autorégressif construit à partir de deux couches d’unités récursives à portes (GRU de l’anglais « Gated Recurrent Units »). Il produit la représentation vectorielle de la pose à chaque nouvelle trame à partir de l’image correspondante à la parole, de la représentation vectorielle du style de référence et du vecteur de l’état de la pose précédente. L’« Update Character State » (la mise à jour de l’état du personnage) formate la sortie du Recurrent Decoder, calcule l’état de la pose et met à jour l’orientation du personnage. En plus du codage de la dernière posture, nous soumettons le Recurrent Decoder à une orientation cible fixe afin d’éviter des dérives rotationnelles au fil du temps. Le « Hidden State Initializer » (l’initialisation de l’état caché) est un réseau neuronal distinct qui fournit les états cachés des couches GRU en fonction de la pose initiale, de l’orientation du personnage et de la représentation vectorielle du style. Nous avons constaté que l’utilisation d’un réseau d’initialisation améliore la qualité de nos résultats.

Figure 8 : Décodeur récurrent

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Flow State IMG

Ensemble de données

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Dataset GIF

Afin de construire un espace latent dense bien structuré, on a besoin d’un ensemble de données d’entraînement qui couvre différentes caractéristiques de style gestuel. Certaines de ces caractéristiques sont la posture générale (par exemple, une colonne vertébrale neutre ou courbe) ou les caractéristiques dynamiques telles que les mouvements des mains et des hanches. Celles-ci sont parmi les plus évidentes et l’on s’attend à ce que le Style Encoder apprenne d’autres subtilités des caractéristiques de style. À cette fin, nous avons recueilli un ensemble de données de paroles et de gestes avec 19 différents styles qui couvrent des caractéristiques variées. L’ensemble de données ZEGGS contient 67 séquences de monologues interprétés par une actrice qui parle anglais. Voici les styles et leur durée qui forment notre ensemble de données :

StyleDurée (min)StyleDurée (min)
Allocution3,98Immobile5,33
Craintif5,58Menaçant5,84
D’accord5,25Neutre11,13
Détendu10,81Riant3,85
Distrait5,29Sarcastique6,52
En désaccord5,33Songeur6,21
Fâché7,95Sournois6,27
Fatigué7,13Triste11,8
Dragueur3,27Vieux11,37
Heureux10,08Total134,65

Voici quelques statistiques concernant certaines des principales caractéristiques de style extraites des données recueillies.

Figure 9 : Moyenne de la bosse

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Hump Velocity IMG

Figure 10 : Moyenne de la vitesse de la main

[La Forge] ZeroEGGS : Zero-Shot example-based gesture generation from speech - Hand Velocity IMG

Résultats

Maintenant, voyons à quoi ressemblent les résultats. Pour les tests, nous avons conservé une séquence enregistrée de chaque style, ainsi que tous les échantillons de style « allocution » comme ensemble de test afin d’étudier si notre modèle peut généraliser des styles entièrement nouveaux. Tous les échantillons vidéo sont générés à partir de cet ensemble de données de test inédit (audio et animations).

Différents styles

Voici quelques exemples de gestes générés selon différents styles. Encore une fois, tous les exemples audios et de style proviennent de l’ensemble de données de test retenu. Veuillez noter que nous avons complètement exclu les données de style « allocution » des données d’entraînement et les avons placées dans l’ensemble de données de test afin d’évaluer la capacité du modèle à généraliser de nouveaux styles en temps réel.

Modélisation de la nature stochastique du mouvement humain

Comme nous l’avons mentionné, la nature probabiliste de notre Style Encoder permet la génération d’une variété de différentes sorties à partir d’une même entrée. Les deux exemples ci-dessous ont été générés à partir des mêmes paroles et du même exemple de style. Ainsi, l’équipe de conception narrative a davantage de pouvoir pour facilement itérer sur la même paire de parole et style jusqu’à ce qu’elle obtienne leur geste généré préféré.

Différentes personnes qui parlent différentes langues

Étant donné que ZeroEGGS repose uniquement sur l’amplitude du spectre vocal, il peut être utilisé avec des voix et des langues qui n’ont pas été incluses dans l’ensemble d’entraînement.

Mélanges de styles

Le cadre variationnel utilisé par notre Style Encoder fournit un espace vectoriel de style transformable et continu. Ceci permet de marier les styles de plusieurs échantillons par interpolation linéaire. La vidéo ci-dessous illustre les interpolations des styles « vieux » et « neutre ». Comme on peut le voir, la posture du personnage et la position de sa main changent progressivement à mesure que nous interpolons.

Contrôle par des composantes ACP

Nous pouvons contrôler certaines des caractéristiques de style de bas niveau en projetant le représentation vectorielle du style dans un espace d’analyse en composantes principales (ACP) et en manipulant les composantes. La figure ci-dessous montre un nuage de points des deux premières composantes principales pour des échantillons non superposés dans différents styles. On observe que la première composante principale correspond approximativement à l’inclinaison du corps. Les styles plus statiques tels que « immobile » et « triste » se trouvent du côté gauche du graphique, tandis que les styles plus dynamiques tels que « heureux » et « fâché » se trouvent du côté droit du graphique. De même, la deuxième composante principale est associée à la hauteur et au rayon des mouvements des mains. Par exemple, les échantillons « allocution », où les mains sont typiquement au-dessus des épaules, se trouvent dans les parties supérieures du graphique. En revanche, les styles tels que « fatigué », où l’actrice pose ses mains sur ses genoux, se trouvent dans les parties inférieures du graphique. Nous pouvons modifier ces caractéristiques de gestes dans l’espace ACP et les projeter à nouveau dans l’espace d’incorporation de style d’origine. La vidéo ci-dessous montre un exemple de style « neutre » et les deux versions obtenues en modifiant la première composante principale. On peut voir que la modification de la première composante principale affecte la vitesse de déplacement du personnage.

Voyons maintenant ce qui se produit lorsque nous changeons la deuxième composante principale. La vidéo ci-dessous montre comment les mouvements des mains peuvent être modifiés en manipulant la deuxième composante principale.

DERNIERS POINTS

Cet ouvrage représente une avancée considérable dans la génération automatique de gestes stylisés à partir de la parole seulement. Notre système peut être utilisé en complément aux outils actuels de design narratif et d’animation à un coût beaucoup plus faible en matière de données et d’efficacité en temps réel. En termes de production, notre objectif pour cette première version est de permettre aux équipes de conception narrative de rapidement effectuer du prototypage et des itérations sur différents styles ou résultats, afin de tester les possibilités avant de poursuivre notre travail avec les équipes d’animation pour déterminer des améliorations et les orientations à explorer.



  1. ALEXANDERSON S., HENTER G. E., KUCHERENKO T., BESKOW J.: Style-controllable speech-driven gesture synthesis using normalising flows. In Computer Graphics Forum (2020), vol. 39, Wiley Online Library, pp. 487–496. 1, 2, 7
  2. YOON Y., CHA B., LEE J.-H., JANG M., LEE J., KIM J., LEE G.: Speech gesture generation from the trimodal context of text, audio, and speaker identity. ACM Transactions on Graphics (TOG) 39, 6 (2020), 1–16. 1, 2