AI erzeugt gezielt künstliche Portraitfotos

Aufbauend auf dem Code von NVIDIA (wir berichteten) haben die die Entwickler von Insight ein neues Modell trainiert mit dem man ein - zunächst zufällig - generiertes Bild gezielt verändern kann, z.B. von männlich hin zu weiblich. Dieses tl-GAN Modell beschreiben sie in einem Blogpost und auch der Source Code ist auf Github verfügbar. Nur für eine live Demo muss man sich bei der Data Science Community Kaggle anmelden (Details im README auf Github).

Künstliche Portraits mit lt-GAN

Das Ganze erinnert oberflächlich an die schon in die Jahre gekommenen Morphing Bilder, ist aber leistungsfähiger. Hier zum Beispiel das Einblenden einer Brille. Warum der attraktiven Frau mit Brille auch ein Bart wächst wird später noch Thema.

Eine Brille erscheint

Warum ist das wichtig; TLDR

Bevor wir in die Details eintauchen, wollen wir kurz verstehen warum dieses Modell interessant ist und wie es aus der Vogelperspektive funktioniert.

  • Der erste Punkt ist, dass dieses Modell nicht sonderlich kompliziert ist (siehe dazu auch New schemes teach the masses to build AI). Wenn man sich ein paar Wochen mit AI beschäftigt und einen technisch/mathematischen Hintergrund hat kann man den Quellcode einigermaßen lesen und für eigene Bedürfnisse anpassen. Oder Sie können diese Dienstleistung z.B. bei Insight einkaufen, ohne dass es gleich Millionen kostet.

  • Der zweite Punkt ist wie das Modell konstruiert wurde. Es baut auf einem veröffentlichten Modell auf, das zufällige Gesichter erzeugt. Dazu wird ein 16x32 Byte großes Rauschbild verwendet, also einfach 512 Zufallszahlen zwischen 0-255. Es stellt sich heraus, dass die Bilder recht stetig von dem Rauschbild abhängen: Ändert man das Rauschbild nur ein wenig, so ändert sich auch das Portraitfoto nur wenig. Jetzt wird ein zweites, ebenfalls existierendes Modell verwendet um in dem erzeugten Bild Features zu identifizieren, z.B. wenig/viel Bart. Damit identifizieren die Autoren welche Änderungen am Rauschbild dieses Feature im Portraitfoto beeinflussen. Ist diese Arbeit getan müssen sie nur noch die GUI bauen, die erst ein Rauschbild erzeugt und dann die entsprechenden Bytes die zum Feature gehören manipuliert.

  • Und drittens, der Vollständigkeit halber, was könnte man an dem Modell aussetzen? Ist es ein echter Fortschritt zu klassischen Methoden? Viele erzeugte Bilder sind wirklich gut, aber sind sie auch wirklich “generiert”? Oder waren sie genau so im Training Set enthalten? Wir haben das nicht geprüft. Es ist aber möglich, dass die obige Frau fast genau so aus dem Training Set kommt und in ihrer Nähe gibt es einen Mann mit Brille. Wenn man jetzt eine Brille hinzufügt, dann wird sie eben zu diesem Mann gemorpht. Der ganze Trick bestünde dann darin, die Bilder des Training Sets so anzuordnen, dass ähnliche Personen nahe beieinander liegen und die entsprechenden Feature immer in der gleichen “Richtung” liegen. Es gibt ein weiteres Experiment, was man machen könnte: Angenommen die 512 Bytes des Rauschbilds reichen aus, ein beliebiges Gesicht so zu beschreiben, dass wir es wiederkennen. Dann könnte man pg-GAN zu einem neuen Modell erweitern, das einem zu einem gegebenen Portraitfoto (z.B. aus dem Internet) das naheliegende Rauschbild erzeugt, dass man dann mit dem lt-GAN Modell manipulieren kann. Genau das werden die Autoren offenbar auch versuchen.

  • Trotzdem wäre es unvergleichlich mehr Aufwand so ein Modell klassisch zu erzeugen.

Wie funktioniert lt-GAN

Wer die Slides oder den obigen Blogpost gelesen und verstanden hat, kann sich diesen Abschnitt vermutlich sparen. Für alle anderen hier die Funktionsweise des Modells in unseren Worten.

Was sind Deep Neural Networks

Deep Neural Networks (DNN) setzen sich aus mehreren Schichten – daher deep – zusammen. Jede Schicht ist ein Feld von Werten. Das Feld kann dabei unterschiedliche Dimensionen haben (einzelner Punkt (ja/nein), eine Linie, ein Bild, ein Quader oder sogar noch höher-dimensional; für die abstrakte Vorstellung recht es erstmal, wenn man in zweidimensionalen Bildern denkt).

Zwischen jeder Schicht ist eine Abbildung . Die Abbildungen sind entweder linear (Drehungen, Streckungen, Stauchungen, Scheerungen, Projektionen) oder nichtlinear (z.B. max über alle Spalten). Zwei lineare Abbildungen müssen dabei jeweils durch eine nichtlineare getrennt sein, sonst könnte man beide Schichten gleich zu einer einzigen linearen Abbildung zusammenfassen (das Produkt von zwei Matrizen ist eine Matrix).

Erkennen einer Brezel

Wenn man jetzt mit einem DNN eine Brezel erkennen will, dann kann man sich vorstellen, die Brezel in zwei Teile zu schneiden und den linken und den rechten Teil aufzubiegen, so dass man eine lange Wurst erhält. Diese kann man dann nach rechts projizieren und die ganze Masse der Brezel landet in einem Punkt. Wenn wir also den Ergebnisvektor untersuchen wieviel Masse ein einem Punkt landet, dann wissen wir, wie sehr das Bild einer Brezel ähnelt (Aufgabe: wie macht man das Verfahren drehinvariant?). Andere Teilchen, zum Beispiel ein Donut wird durch das 360 Grad aufbiegen immer krumm und daher weniger als Brezel interpretiert.

Der Designer des DNN bestimmt nun welche Klassen von Abbildungen kombiniert werden (hier: Aufschneiden/Aufdrehen, Projektion, bestimmen ob die Masse in einem Punkt konzentriert ist; fairerweise müssen wir zugeben, dass andere Abbildungen die Brezel möglicherweise besser erkennen könnten). Das ist eine Kunst, in der man mit Erfahrung hoffentlich besser wird.

Die Parameter der Abbildungen muss er aber nicht mehr selbst bestimmen, sondern sie werden mit mit einem Training Set berechnet indem man Zunächst mit zufälligen Parametern (z.b. Einträge der Matrizen) beginnt und dann das Ergebnis des DDN mit dem Wunschzustand vergleicht und dann die Parameter Stück für Stück so manipuliert, dass das gewünschte Ergebnis herauskommt. Dazu braucht man ordentlich Rechenleistung (z.B. von NVIDIA).

lt-GAN

Mit dem Wissen über die Funktionsweise von DNN ist jetzt auch klar, warum die Abhängigkeit des Protraitfotos vom Rauschbild einigermaßen stetig ist, da die verwendeten Abbildungen in den meisten Punkten stetig sind. Von der Konstruktion her könnte man sogar hoffen, dass die Abbildung in den meisten Punkten sogar differenzierbar ist. Die Autoren von lt-GAN gehen sogar noch weiter und tun so, als ob sie linear sei. Dann bestimmen Sie wie in TLDR beschrieben mit einem weiteren Modell die Richtungen (eigentlich 512 Byte Vektoren; evtl. nehmen sie aber auch nur die signifikanten Bytes) in denen sich ein Feature ändert. Nun kann es sein, dass zwei Feature Korreliert sind, z.B. Geschlecht und Bartwuchs. Daher orthogonalisieren sie die Vektoren mit dem Gram-Schmidt-Verfahren. Das erklärt jetzt auch, warum der Frau mit der Brille ein Bart wächst: Entweder die Trennung der Features hat allgemein nicht gut funktioniert, oder, in der Umgebung der Frau ist die Abbildung nicht so linear, so dass der Brillen-Vektor dort auch in Richtung Mann Zeigt. Bei anderen Frauenportraits tritt der Effekt nicht so stark auf.

Call to Action: Sags weiter auf twitter!

Du findest die Newsletter gut? Dann erwähne das auf twitter! Wir freuen uns :-) oder Toot

Schreib uns an: info@achtungtechnik.de