Echtzeit-Gesichtsanimation für Avatare
Der Gesichtsausdruck ist ein entscheidender Schritt auf dem Weg von Roblox zur Integration des Metaversums in das tägliche Leben der Menschen durch natürliche und glaubwürdige Avatar-Interaktionen. Die Animation virtueller 3D-Charaktergesichter in Echtzeit ist jedoch eine große technische Herausforderung. Trotz vieler Durchbrüche in der Forschung gibt es nur wenige kommerzielle Beispiele für Echtzeit-Gesichtsanimationsanwendungen. Bei Roblox ist es besonders herausfordernd, wo wir eine schwindelerregende Auswahl an Benutzergeräten, realen Bedingungen und wild kreativen Anwendungsfällen von unseren Entwicklern unterstützen.
In diesem Artikel beschreiben wir ein Deep-Learning-Framework für die Regression von Gesichtsanimationsbefehlen aus Videos, das sowohl diese Herausforderungen angeht als auch uns eine Reihe zukünftiger Möglichkeiten eröffnet. Das in diesem Blogbeitrag beschriebene Framework wurde auch als vorgestellt Vortrag à SIGGRAPH 2021.
Gesichtsanimation
Es gibt verschiedene Möglichkeiten, ein 3D-Face-Rig zu steuern und zu animieren. Das, das wir verwenden, heißt das Facial Action Coding System oder FAC, die eine Reihe von Steuerelementen (basierend auf der Platzierung der Gesichtsmuskeln) definiert, um das 3D-Netz des Gesichts zu verformen. Obwohl FACS über 40 Jahre alt ist, ist es immer noch der De-facto-Standard, da FACS-Befehle intuitiv und leicht zwischen Plattformen übertragbar sind. Ein Beispiel für ein FACS-Rig, das ausgeübt wird, ist unten zu sehen.
Verfahren
Die Idee ist, dass unsere auf Deep Learning basierende Methode ein Eingabevideo nimmt und einen Satz von FACS für jeden Frame ausgibt. Dazu verwenden wir eine zweistufige Architektur: Gesichtserkennung und FACS-Regression.
Gesichtserkennung
Um die beste Leistung zu erzielen, implementieren wir eine schnelle Variante des relativ bekannten MTCNN-Gesichtserkennungsalgorithmus. Der ursprüngliche MTCNN-Algorithmus ist ziemlich genau und schnell, aber nicht schnell genug, um die Echtzeit-Gesichtserkennung auf vielen von unseren Benutzern verwendeten Geräten zu unterstützen. Um dieses Problem zu lösen, haben wir den Algorithmus für unseren speziellen Anwendungsfall modifiziert, bei dem unsere MTCNN-Implementierung, sobald ein Gesicht erkannt wurde, nur den letzten O-Net-Schritt in aufeinanderfolgenden Frames ausführt, was zu einer durchschnittlichen Beschleunigung von 10x führt. Wir verwenden auch die von MTCNN vorhergesagten Gesichtsmarkierungen (Lage der Augenwinkel, Nase und Mund), um den Gesichtsbegrenzungsrahmen vor dem nächsten Regressionsschritt auszurichten. Diese Ausrichtung ermöglicht ein enges Zuschneiden der Eingabebilder, wodurch die Berechnung des FACS-Regressionsnetzwerks reduziert wird.
FACS-Regression
Unsere FACS-Regressionsarchitektur verwendet ein Multitasking-Setup, das FACS-Orientierungspunkte und -Gewichte unter Verwendung eines gemeinsam genutzten Backbones (als Encoder bezeichnet) als Merkmalsextraktor gemeinsam trainiert.
Dieses Setup ermöglicht es uns, FACS-Gewichte, die aus synthetischen Animationssequenzen gelernt wurden, mit echten Bildern zu erweitern, die die Feinheiten des Gesichtsausdrucks erfassen. Das FACS-Regressionssubnetz, das zusammen mit der Verwendung des Landmark-Regressors trainiert wird kausale Faltungen; Diese Faltungen arbeiten mit Merkmalen im Laufe der Zeit im Gegensatz zu Faltungen, die nur mit räumlichen Merkmalen arbeiten, wie sie im Codierer gefunden werden können. Dadurch lernt das Modell die zeitlichen Aspekte von Gesichtsanimationen und macht es weniger anfällig für Inkonsistenzen wie Jitter.
Ausbildung
Wir trainieren zunächst das Modell für die Landmark-only-Regression, indem wir sowohl reale als auch synthetische Bilder verwenden. Nach einer Reihe von Schritten fangen wir an, synthetische Sequenzen hinzuzufügen, um die Gewichte des zeitlichen Regressions-Subarrays von FACS zu lernen. Synthetische Animationssequenzen wurden von unserem interdisziplinären Team aus Künstlern und Ingenieuren erstellt. Ein standardisiertes Rig, das für all die verschiedenen Identitäten (Face Meshes) verwendet wird, wurde von unserem Künstler zusammengestellt, der trainiert und automatisch mit Animationsdateien gerendert wurde, die FACS-Gewichte enthalten. Diese Animationsdateien wurden mit klassischen Computer-Vision-Algorithmen erstellt, die auf Videoaufnahmen von Gesichtsgymnastik ausgeführt und mit handanimiertem Filmmaterial für extreme Gesichtsausdrücke ergänzt wurden, die in Calisthenics-Videos fehlten.
Verluste
Um unser Deep-Learning-Netzwerk zu trainieren, kombinieren wir mehrere verschiedene Verlustterme linear, um die FACS-Markierungen und -Gewichte zu regressieren:
- Positionsverluste. Für Benchmarks ist der RMSE der regressierten Positionen (Llmks ) und für die FACS-Gewichte die MSE (Lfacs ).
- Zeitliche Verluste. Für FACS-Gewichte reduzieren wir Jitter durch Zeitverluste bei synthetischen Animationssequenzen. Ein Geschwindigkeitsverlust (Lv ) inspiriert von [Cudeiroet al. 2019] ist der MSE zwischen der Zielgeschwindigkeit und der vorhergesagten Geschwindigkeit. Es fördert die allgemeine Geschmeidigkeit dynamischer Ausdrücke. Außerdem ist ein Regularisierungsterm zur Beschleunigung (Lselon ) wird hinzugefügt, um den Jitter von FACS-Gewichten zu reduzieren (sein Gewicht wird niedrig gehalten, um die Reaktionsfähigkeit zu erhalten).
- Verlust der Konsistenz. Wir verwenden reale Bilder ohne Annotationen in einem unüberwachten Kohärenzverlust (Lc ), ähnlich zu [Honariet al. 2018]. Dies ermutigt Landmarkenvorhersagen, unter verschiedenen Bildtransformationen äquivariant zu sein, wodurch die Konsistenz der Landmarkenposition zwischen Frames verbessert wird, ohne dass Landmarkenkennzeichnungen für eine Teilmenge der Bilder beim Lernen erforderlich sind.
Kennzahlen
Um die Encoderleistung zu verbessern, ohne die Genauigkeit zu verringern oder den Jitter zu erhöhen, haben wir selektiv ungepolsterte Faltungen verwendet, um die Größe der Feature-Map zu reduzieren. Dies gab uns mehr Kontrolle über die Feature-Map-Größen als dies bei Paced Convolutions der Fall wäre. Um das Residuum beizubehalten, beschneiden wir die Feature-Map, bevor wir sie der Ausgabe einer ungepolsterten Faltung hinzufügen. Darüber hinaus haben wir die Feature-Map-Tiefe auf ein Vielfaches von 8 eingestellt, um eine effiziente Speichernutzung mit Vektorbefehlssätzen wie AVX und Neon FP16 zu erreichen und zu einer 1,5-fachen Leistungssteigerung zu führen.
Unser endgültiges Modell hat 1,1 Millionen Parameter und erfordert 28,1 Millionen Multiplizieren-Akkumulieren, um ausgeführt zu werden. Als Referenz, Vanille Mobilfunk V2 (auf dem unsere Architektur basiert) erfordert 300 Millionen multiplizieren-akkumulieren, um ausgeführt zu werden. Wir nehmen das NCNN Das Framework für die Modellinferenz auf dem Gerät und die Single-Thread-Ausführungszeit (einschließlich Gesichtserkennung) für einen Videoframe sind in der folgenden Tabelle aufgeführt. Bitte beachten Sie, dass eine Laufzeit von 16 ms eine Verarbeitung von 60 Bildern pro Sekunde (FPS) unterstützen würde.
Und nach
Unsere synthetische Datenpipeline ermöglichte es uns, die Ausdruckskraft und Robustheit des trainierten Modells iterativ zu verbessern. Wir haben synthetische Sequenzen hinzugefügt, um die Reaktionsfähigkeit auf fehlende Gesichtsausdrücke zu verbessern, sowie ein ausgewogenes Training für verschiedene Gesichtsidentitäten. Aufgrund des Timings und der verlustbehafteten Formulierung unserer Architektur, des sorgfältig optimierten Rückgrats und der fehlerfreien Grundwahrheit aus den synthetischen Daten erreichen wir qualitativ hochwertige Animationen mit minimalem Rechenaufwand. Die im FACS-Gewichtungs-Subarray durchgeführte zeitliche Filterung ermöglicht es, die Anzahl und Größe der Schichten im Backbone zu reduzieren, ohne den Jitter zu erhöhen. Der unüberwachte Konsistenzverlust ermöglicht es uns, mit einer großen Menge realer Daten zu trainieren, was die Verallgemeinerung und Robustheit unseres Modells verbessert. Wir arbeiten weiter an der Verfeinerung und Verbesserung unserer Modelle, um noch ausdrucksstärkere, jitterfreie und robuste Ergebnisse zu erzielen.
Wenn Sie an ähnlichen Herausforderungen an der Spitze der Echtzeit-Gesichtsverfolgung und des maschinellen Lernens arbeiten möchten, sehen Sie sich bitte einige unserer an offene Positionen mit unserem Team.