3D-Rekonstruktion von Personen auf den Fotos und deren Animation mittels Video. Vortrag in Yandex

    In dem Film Mission Impossible 3 wurde der Prozess der Herstellung berühmter Spionagemasken gezeigt, dank dessen einige Charaktere von anderen nicht mehr unterschieden werden können. In der Geschichte war es zunächst erforderlich, die Person, in die sich der Held verwandeln wollte, aus mehreren Blickwinkeln zu fotografieren. Im Jahr 2018 kann ein einfaches 3D-Modell einer Person erstellt werden, wenn es nicht gedruckt, aber zumindest in digitaler Form erstellt wird - und außerdem auf einem einzigen Foto basieren. Der Forscher VisionLabs beschrieb ausführlich den Prozess bei der Yandex-Veranstaltung "Die Welt durch die Augen der Roboter " aus der Data & Science-Serie - mit Details zu spezifischen Methoden und Formeln.


    - Guten Tag. Ich heiße Nikolai und arbeite in der Firma VisionLabs, die sich mit Computer Vision befasst. Unser Hauptprofil ist die Gesichtserkennung, aber wir verfügen auch über Technologien, die in erweiterter und virtueller Realität anwendbar sind. Insbesondere haben wir die Technologie, um ein 3D-Gesicht in einem Foto zu erstellen, und heute werde ich darüber sprechen.



    Beginnen wir mit einer Geschichte darüber, was es ist. Auf der Folie sehen Sie das Originalfoto von Jack Ma und das 3D-Modell, das auf diesem Foto in zwei Variationen erstellt wurde: mit Textur und ohne Textur, nur mit Geometrie. Dies ist eine Aufgabe, die wir lösen.



    Wir möchten dieses Modell auch animieren, die Blickrichtung ändern, den Gesichtsausdruck ändern, Gesichtsausdrücke hinzufügen, usw. Die

    Anwendung befindet sich in verschiedenen Bereichen. Das offensichtlichste ist Spiele, einschließlich VR. Sie können auch virtuelle Umkleideräume einrichten - Gläser, Bärte und Frisuren ausprobieren. Sie können 3D-Druck ausführen, da sich manche Menschen für personalisiertes Zubehör unter ihrem Gesicht interessieren. Und Sie können Gesichter für Roboter erstellen: Auf jedem Display des Roboters können Sie drucken und anzeigen.



    Ich beginne mit einer Geschichte, wie Sie generell 3D-Gesichter generieren können, und dann gehen wir zur 3D-Rekonstruktionsaufgabe als inverse Generierungsaufgabe über. Danach konzentrieren wir uns auf die Animation und fahren mit den Schulungen fort, die in diesem Bereich entstehen.



    Was ist die Aufgabe, Gesichter zu erzeugen? Wir möchten eine Möglichkeit haben, dreidimensionale Gesichter zu erzeugen, die sich in Form und Ausdruck unterscheiden. Hier sind zwei Zeilen mit Beispielen. Die erste Reihe zeigt Personen, die sich in ihrer Form unterscheiden, als gehörten sie zu verschiedenen Personen. Und unten ist dieselbe Person mit einem anderen Ausdruck.



    Eine Möglichkeit, das Generierungsproblem zu lösen, sind verformbare Modelle. Die äußerste linke Seite des Schiebers ist eine Art gemitteltes Modell, auf das durch Verstellen der Schieberegler Verformungen angewendet werden können. Hier sind drei Schieberegler. In der oberen Reihe befinden sich die Flächen in Richtung der Erhöhung der Intensität des Schiebereglers, in der unteren Reihe - in Richtung der Abnahme. Daher haben wir mehrere anpassbare Parameter. Durch die Installation können Sie den Leuten verschiedene Formulare geben.



    Ein Beispiel für ein deformierbares Modell ist das bekannte Basler Gesichtsmodell, das aus Gesichtsabtastungen erstellt wurde. Um ein verformbares Modell zu erstellen, müssen Sie zunächst einige Personen mitnehmen, sie in ein spezielles Labor bringen und ihre Gesichter mit speziellen Geräten abschießen, um sie in 3D zu übertragen. Auf dieser Grundlage können Sie dann neue Gesichter erstellen.



    Wie funktioniert das mathematisch? Wir können uns ein dreidimensionales Modell eines Gesichts als einen Vektor in einem 3n-dimensionalen Raum vorstellen. Hier ist n die Anzahl der Scheitelpunkte im Modell, jeder Scheitelpunkt entspricht drei Koordinaten in 3D, und somit erhalten wir 3n Koordinaten.



    Wenn wir einen Satz von Scans haben, wird jeder Scan durch einen solchen Vektor dargestellt, und wir haben einen Satz von n solchen Vektoren.

    Als nächstes können wir neue Flächen als lineare Kombinationen von Vektoren von unserer Basis aus erstellen. In diesem Fall möchten wir, dass die Koeffizienten von Bedeutung sind. Natürlich können sie nicht völlig willkürlich sein, und ich werde bald zeigen, warum. Eine der Einschränkungen kann so eingestellt werden, dass alle Koeffizienten im Intervall von 0 bis 1 liegen. Dies muss geschehen, denn wenn die Koeffizienten völlig willkürlich sind, sind die Personen unplausibel.



    Hier möchte ich den Parametern eine probabilistische Bedeutung geben. Das heißt, wir wollen uns die Parameter ansehen und verstehen, ob eine Person wahrscheinlich herauskommt oder nicht. Damit wollen wir sicherstellen, dass verzerrte Personen niedrige Wahrscheinlichkeiten treffen.



    Hier ist, wie es geht. Wir können die Hauptkomponentenmethode auf eine Reihe von Scans anwenden. Am Ausgang erhalten wir die Durchschnittsfläche S0, die Matrix V und die Menge der Hauptkomponenten sowie die Variation der Daten entlang der Hauptkomponenten. Dann können wir einen neuen Blick auf die Erzeugung von Gesichtern werfen, wir werden Gesichter als durchschnittliches Gesicht sehen, plus die Matrix der Hauptkomponenten, multipliziert mit dem Parametervektor.

    Der Wert der Parameter ist die Intensität der Schieberegler, über die ich auf einer der frühen Folien gesprochen habe. Und wir können dem Parametervektor auch einen Wahrscheinlichkeitswert zuweisen. Insbesondere können wir uns darauf einigen, dass dieser Vektor Gaußschem ist.



    Daher haben wir eine Methode, mit der wir 3D-Gesichter erzeugen können. Diese Erzeugung wird durch die folgenden Parameter gesteuert. Wie in der vorherigen Folie haben wir zwei Parametersätze, zwei Vektoren α id und α exp. Diese sind die gleichen wie in der vorherigen Folie. Α id ist jedoch für die Form des Gesichts verantwortlich, und α exp ist für die Emotion verantwortlich.

    Außerdem gibt es eine neue Vektor-T-Vektortextur. Es hat die gleiche Abmessung wie der Formvektor, und jeder Scheitelpunkt in diesem Vektor hat drei RGB-Werte. In ähnlicher Weise wird ein Texturvektor unter Verwendung des Parametervektors β erzeugt. Es gibt keine formalisierten Parameter, die für die Beleuchtung des Gesichts und für seine Position verantwortlich sind, sie existieren jedoch auch.



    Hier sind Beispiele für Individuen, die mit einem deformierten Modell generiert werden können. Bitte beachten Sie, dass sie sich in Form, Hautfarbe unterscheiden und auch bei unterschiedlichen Lichtverhältnissen verfolgt werden.



    Jetzt können wir zur 3D-Rekonstruktion gehen. Dies wird als inverses Problem bezeichnet, da wir solche Parameter für das verformbare Modell so wählen möchten, dass das von uns gezeichnete Gesicht dem Original möglichst nahe kommt. Diese Folie unterscheidet sich von der ersten darin, dass das rechte Gesicht vollständig synthetisch ist. Wenn auf der ersten Folie unsere Textur von einem Foto aufgenommen wurde, wurde die Textur von einem verformbaren Modell übernommen.

    Am Ausgang haben wir alle Parameter, die Folie zeigt α id und α exp und wir haben auch Beleuchtung, Texturparameter usw.



    Wir haben gesagt, dass wir sicherstellen möchten, dass das generierte Modell dem Foto ähnelt. Diese Ähnlichkeit wird durch die Energiefunktion bestimmt. Hier nehmen wir nur die pixelweise Differenz der Bilder in jenen Pixeln, bei denen wir annehmen, dass das Gesicht sichtbar ist. Wenn das Gesicht beispielsweise gedreht wird, treten Überlappungen auf. Zum Beispiel wird ein Teil der Wangenknochen eine geschlossene Nase sein. Und die Sichtbarkeitsmatrix M sollte eine solche Überlappung aufweisen.

    Im Wesentlichen ist die 3D-Rekonstruktion die Minimierung dieser Energiefunktion. Um dieses Minimierungsproblem zu lösen, wäre jedoch eine Initialisierung und Regularisierung sinnvoll. Die Regularisierung ist aus einem verständlichen Grund notwendig, da wir sagten, dass, wenn wir die Parameter nicht regulieren und sie sehr willkürlich machen, verzerrte Gesichter ausfallen können. Die Initialisierung ist notwendig, weil die Aufgabe als Ganzes komplex ist, lokale Minima hat und ich nicht darauf eingehen möchte.



    Wie kann ich die Initialisierung durchführen? Dafür können Sie 68 Schlüsselpunkte des Gesichts verwenden. Seit 2013-2014 sind viele Algorithmen aufgetaucht, die es erlauben, 68 Punkte mit ziemlich guter Genauigkeit zu erkennen, und nun nähern sie sich der Sättigung ihrer Genauigkeit. Daher haben wir eine Möglichkeit, 68 Punkte des Gesichts zuverlässig zu erkennen.

    Wir können unserer Energiefunktion einen neuen Zusatz hinzufügen, der besagt, dass die Projektionen der gleichen 68 Punkte des Modells mit den wichtigsten Punkten des Gesichts übereinstimmen sollen. Wir markieren diese Punkte auf dem Modell, dann verformen wir das Modell irgendwie, verdrehen, projizieren Punkte und sorgen dafür, dass die Positionen der Punkte übereinstimmen. Im linken Foto der Punkt der zwei Farben, violett und gelb. Einige Punkte wurden vom Algorithmus erkannt, während andere aus dem Modell projiziert wurden. Auf der rechten Seite befinden sich Punkte auf dem Modell, aber für Punkte am Gesichtsrand wird nicht ein Punkt markiert, sondern eine ganze Linie. Dies geschieht, weil sich die Markierung dieser Punkte ändern muss, wenn sich die Fläche dreht, und der Punkt mit einer Linie ausgewählt wird.



    Hier ist der Begriff, über den ich gesprochen habe, es ist der koordinative Unterschied zweier Vektoren, der die Schlüsselpunkte des Gesichts und die aus dem Modell projizierten Schlüsselpunkte beschreibt.



    Kehren wir zur Regularisierung zurück und betrachten wir das gesamte Problem aus der Perspektive des Bayes'schen Rückschlusses. Die Wahrscheinlichkeit, dass der Vektor α bei einem bekannten Bild gleich ist, ist proportional zum Produkt der Wahrscheinlichkeit, ein Bild für ein gegebenes α zu beobachten, multipliziert mit der Wahrscheinlichkeit α. Wenn wir den negativen Logarithmus dieses Ausdrucks nehmen, den wir minimieren müssen, werden wir feststellen, dass der für die Regularisierung verantwortliche Begriff hier eine bestimmte Form hat. Dies ist insbesondere der zweite Begriff. Wenn wir uns erinnern, dass wir früher angenommen haben, dass der α-Vektor Gauß'sch ist, werden wir sehen, dass der für die Regularisierung verantwortliche Ausdruck die Summe der Quadrate der Parameter ist, die auf Variationen entlang der Hauptkomponenten reduziert sind.



    Wir können also die volle Funktion der Energie mit drei Begriffen ausschreiben. Der erste Begriff ist für die Textur, den Pixelunterschied zwischen dem erzeugten Bild und dem Zielbild, verantwortlich. Der zweite Begriff ist für die Schlüsselpunkte zuständig, der dritte für die Regularisierung.

    Die Koeffizienten der Terme im Minimierungsprozess werden nicht optimiert, sie werden einfach angegeben.
    Hier wird die Energiefunktion in Abhängigkeit von allen Parametern dargestellt. α id - Gesichtsformparameter, α exp - Ausdrucksparameter, β - Texturparameter, p - andere Parameter, über die wir gesprochen haben, die aber nicht formalisiert wurden, sind dies Positions - und Beleuchtungsparameter.



    Lassen Sie uns bei einer solchen Bemerkung aufhören. Diese Energiefunktion kann vereinfacht werden. Von dort können Sie den Nachtrag, der für die Textur verantwortlich ist, wegwerfen und nur die von 68 Punkten übermittelten Informationen verwenden. Dadurch können Sie eine Art 3D-Modell erstellen. Beachten Sie jedoch das Modellprofil. Auf der linken Seite befindet sich ein Modell, das nur an Schlüsselpunkten aufgebaut ist. Auf der rechten Seite befindet sich ein Modell, das beim Erstellen eine Textur verwendet. Bitte beachten Sie, dass das Profil rechts ein relevanteres zentrales Foto erzeugt, das die Frontalansicht des Gesichts darstellt.



    Die Animation mit dem vorhandenen Algorithmus zum Erstellen eines 3D-Gesichtsmodells funktioniert ganz einfach. Denken Sie daran, dass wir beim Erstellen eines 3D-Modells zwei Parametervektoren erhalten, von denen einer für das Formular und der andere für den Ausdruck verantwortlich ist. Diese Benutzerparametervektoren des Benutzers und des Avatars sind immer ihre eigenen. Der Benutzer hat einen Vektor von Formularparametern, der Avatar hat einen anderen. Wir können sie jedoch so gestalten, dass die für den Ausdruck verantwortlichen Vektoren gleich werden. Wir nehmen die Parameter, die für den Gesichtsausdruck des Benutzers verantwortlich sind, und fügen sie einfach in das Avatar-Modell ein. So werden wir den Gesichtsausdruck des Benutzers auf den Avatar übertragen.

    Sprechen wir über zwei Schichten in diesem Bereich: die Arbeitsgeschwindigkeit und die Grenzen des verformbaren Modells.



    Die Arbeitsgeschwindigkeit ist wirklich ein Problem. Die Minimierung der Gesamtenergiefunktion ist eine sehr rechenintensive Aufgabe. Insbesondere kann es zwischen 20 und 40 Sekunden dauern, im Durchschnitt 30 Sekunden. Es ist lang genug. Wenn wir ein dreidimensionales Modell nur an Schlüsselpunkten erstellen, wird es viel schneller ausfallen, aber die Qualität wird darunter leiden.



    Wie gehe ich mit diesem Problem um? Sie können mehr Ressourcen verwenden, einige Leute lösen dieses Problem auf der GPU. Nur Schlüsselpunkte können verwendet werden, aber die Qualität wird leiden. Und Sie können maschinelle Lernmethoden verwenden.



    Wir werden in Ordnung sehen. Hier ist die Arbeit von 2016, in der der Ausdruck des Benutzers auf ein bestimmtes Video übertragen wird. Sie können das Video mit Hilfe Ihres Gesichts verwalten. Hier wird der Aufbau eines 3D-Modells in Echtzeit mit einer GPU durchgeführt.



    Hier sind die Methoden, die maschinelles Lernen verwenden. Die Idee ist, dass wir zuerst eine große Datenbank von Einzelpersonen verwenden können, ein 3D-Modell für jede Person mit einem langen, aber genauen Algorithmus erstellen, jedes Modell als eine Reihe von Parametern darstellen und das Raster weiterhin lehren, um diese Parameter vorherzusagen. In dieser Arbeit wird 2016 insbesondere ResNet verwendet, das das Bild als Eingabe übernimmt und die Modellparameter als Ausgabe ausgibt.



    Das dreidimensionale Modell kann auf andere Weise dargestellt werden. In diesem Papier von 2017 wird das 3D-Modell nicht als Parametersatz dargestellt, sondern als Voxel. Das Netzwerk sagt Voxel voraus und wandelt das Bild in eine dreidimensionale Darstellung um. Es ist erwähnenswert, dass Netzwerklernoptionen möglich sind, für die 3D-Modelle überhaupt nicht erforderlich sind.



    Es funktioniert wie folgt. Hier ist der wichtigste Teil der Layer, der die Parameter des verformbaren Modells als Eingabe übernehmen und das Bild rendern kann. Es hat eine so wunderbare Eigenschaft, dass Sie damit die umgekehrte Ausbreitung eines Fehlers durchführen können. Das Netzwerk akzeptiert ein Bild als Eingabe, prognostiziert die Parameter, leitet diese Parameter an die Ebene weiter, die das Bild rendert, vergleicht dieses Bild mit dem Eingabebild, ruft einen Fehler auf, gibt den Fehler zurück und lernt weiter. Somit lernt das Netzwerk, die Parameter eines dreidimensionalen Modells vorherzusagen, wobei nur Bilder als Trainingsdaten vorhanden sind. Und es ist sehr interessant.



    Wir haben viel über Genauigkeit gesprochen - insbesondere, dass es darunter leidet, wenn wir einige der Komponenten der Energiefunktion wegwerfen. Lassen Sie uns formalisieren, was dies bedeutet, wie Sie die Genauigkeit der 3D-Gesichtsrekonstruktion bewerten können. Dies erfordert Grunduntersuchungen der Bodenuntersuchung, die mit speziellen Geräten und unter Verwendung von Methoden erhalten werden, für die einige Garantien für die Genauigkeit gegeben sind. Wenn es eine solche Basis gibt, können wir unsere rekonstruierten Modelle mit der Grundwahrheit vergleichen. Dies geschieht einfach: Wir betrachten die durchschnittliche Entfernung von den Scheitelpunkten unseres Modells, die wir erstellt haben, bis zu den Scheitelpunkten in der Bodenwahrheit und normalisieren uns auf die Größe des Scans. Dies muss gemacht werden, da es verschiedene Gesichter gibt, einige mehr, einige weniger, und auf einem kleinen Gesicht wäre der Fehler geringer, einfach weil das Gesicht selbst kleiner ist. Deshalb brauchen wir eine Normalisierung.



    Ich möchte über unsere Arbeit berichten, es wird in Workshops sein, es gibt eine ECCV. Wir machen ähnliche Dinge, wir lehren MobileNet, die Parameter eines verformbaren Modells vorherzusagen. Als Trainingsdaten verwenden wir 3D-Modelle, die für Fotos aus 300-W-Datensätzen erstellt wurden. Wir schätzen die Genauigkeit anhand von BU4DFE-Scans.



    Das ist was passiert. Wir vergleichen unsere beiden Algorithmen mit dem Stand der Technik. Die gelbe Kurve in diesem Diagramm ist ein Algorithmus, der 30 Sekunden dauert und aus der Minimierung der Gesamtenergiefunktion besteht. Hier auf der x-Achse ist der Fehler, über den wir gerade gesprochen haben, der durchschnittliche Abstand zwischen den Scheitelpunkten. Auf der Y-Achse ist der Anteil der Bilder, bei denen dieser Fehler geringer ist als auf der X-Achse, je höher die Kurve, desto besser. Die nächste Kurve ist unser Netzwerk, das auf der MobileNet-Architektur basiert. Dann drei Werke, über die wir gesprochen haben. Ein Netzwerk, das Parameter vorhersagt, und ein Netzwerk, das Voxel vorhersagt.



    Wir verglichen unser Netzwerk außerdem mit Analoga hinsichtlich Modellgröße und Betriebsgeschwindigkeit. Es ist ein Gewinn hier, weil wir MobileNet verwenden, leicht genug.

    Die zweite Herausforderung ist die Begrenztheit des verformbaren Modells.



    Achten Sie auf das linke Gesicht, schauen Sie auf die Flügel der Nase. Hier sind die Schatten auf den Nasenflügeln. Die Ränder der Schatten stimmen nicht mit den Rändern der Nase in der Fotografie überein, was zu einem Defekt führt. Der Grund dafür kann darin liegen, dass das verformbare Modell im Prinzip nicht in der Lage ist, die Nase mit der erforderlichen Form zu bilden, da dieses verformbare Modell mit Scans von nur 200 Personen erhalten wurde. Wir möchten, dass die Nase immer noch korrekt ist, wie auf dem richtigen Foto. Daher müssen wir irgendwie über das verformbare Modell hinausgehen.



    Dies kann mit einer nichtparametrischen Verformung des Netzes erfolgen. Hier sind drei Aufgaben, die wir gerne lösen würden: Ändern Sie den lokalen Teil des Gesichts, z. B. die Nase, und binden Sie ihn in das ursprüngliche Gesichtsmodell ein. Lassen Sie alles andere unverändert.



    Dies kann wie folgt durchgeführt werden. Kehren wir zur Bezeichnung des Netzes als Vektor im 3n-dimensionalen Raum zurück und betrachten wir den Operator für die Mittelwertbildung. Dies ist ein Operator, der in S mit einer Kappe jeden Scheitelpunkt durch den Durchschnitt seiner Nachbarn ersetzt. Nachbarn der Oberseite sind diejenigen, die durch eine Kante mit ihr verbunden sind.

    Wir definieren eine Energiefunktion, die die Position des Scheitelpunkts relativ zu seinen Nachbarn beschreibt. Wir möchten, dass die Position des Scheitelpunkts relativ zu seinen Nachbarn unverändert bleibt oder sich zumindest nicht sehr ändert. Gleichzeitig werden wir jedoch irgendwie S modifizieren. Diese Energiefunktion wird als intern bezeichnet, da es auch eine externe Komponente gibt, die besagt, dass beispielsweise die Nase eine bestimmte Form annehmen sollte.



    Solche Techniken wurden beispielsweise in der Arbeit von 2015 eingesetzt. Sie machten 3D-Rekonstruktionen von Gesichtern in mehreren Fotos. Sie nahmen mehrere Fotos vom Telefon auf, erhielten eine Punktewolke und passten dann das Gesichtsmodell mit nichtparametrischen Änderungen an diese Wolke an.



    Über das verformbare Modell hinaus können Sie einen anderen Weg gehen. Lassen Sie uns auf die Aktion des Glättungsoperators eingehen. Zur Vereinfachung wird hier ein zweidimensionales Netz dargestellt, auf das dieser Operator angewendet wurde. Auf dem linken Modell gibt es viele Details, auf dem rechten Modell wurden diese Details geglättet. Und können wir etwas tun, um Details hinzuzufügen und nicht zu entfernen?



    Für die Antwort können wir uns die Basis der Vektoren des Glättungsoperators ansehen. Der Glättungsoperator ändert auf dieser Basis die Koeffizienten des Netzes in der Erweiterung.

    Ist es notwendig, das Problem auf diese Weise zu lösen? Sie können es auch anders machen: Ändern Sie diese Koeffizienten einfach auf eine externe Art und Weise. Nehmen wir einfach die ersten Vektoren des Glättungsoperators und fügen sie unserem verformbaren Modell als neuen Schieberegler hinzu. Diese Technik ermöglicht es Ihnen wirklich, Verbesserungen zu erhalten, also wird es in der Arbeit von 2016 gemacht. Damit ist mein Bericht abgeschlossen, ich danke Ihnen allen.

    Jetzt auch beliebt: