GANmojis: Deep Learning meets Emojis

Keine Kommentare

Die Generierung künstlicher Bilder mittels Deep Learning schlägt seit einigen Jahren immer wieder hohe Wellen in den Medien. Im Rahmen von codecentric.ai beschäftigen auch wir uns seit Kurzem mit diesem Thema. In diesem Blogartikel zeigen wir euch, wie wir uns mithilfe von Generative Adversarial Networks eigene, neue Emojis erstellen.

Neue Bilder mit Deep Learning generieren

Der Nutzen künstlicher neuronaler Netze zur Klassifikation von Daten, wie etwa Krankheiten, Autos oder Weinsorten, ist schon seit Jahrzehnten bekannt. Der Einsatz von Netzen zur Generierung von Daten hingegen ist ein recht neuer Forschungszweig im Bereich Deep Learning. Hier liegen aktuell insbesondere die sogenannten Generative Adversarial Networks im Fokus.

Bei einem Generative Adversarial Network (GAN) handelt es sich um eine besondere Architektur von neuronalen Netzen, in der zwei Netzwerke miteinander interagieren und so voneinander lernen. Das erste Netzwerk – der Generator – erzeugt neue Inhalte, meist Bilder. Das zweite Netzwerk – der Diskriminator – hingegen versucht zu erkennen, ob ein Inhalt vom Generator stammt oder von einem separaten Trainingsdatensatz. Nach erfolgreichen Training kann dann der Generator verwendet werden, um neue, glaubwürdige Inhalte zu erzeugen. GANs wurden erstmals 2014 vorgestellt und werden seit kurzer Zeit auch im Unternehmenskontext verprobt. Eine generelle Einführung in das Thema findet ihr in unserem Blogartikel:

Seit der ursprünglichen Architektur wurden zahlreiche Varianten und Modifikationen entwickelt. So wird in Wasserstein-GAN der Wasserstein-Loss als Fehlerfunktion eingeführt, was zu einem intuitiveren Fehlergradienten führt und dadurch die Konvergenzrate erhöht.

Progressive Growing of GANS

Ein wichtiger Meilenstein in der letzten Zeit war die Beschreibung und Umsetzung von Progressive GANs (PGANs) durch NVIDIA Research, die im Paper Progressive Growing of GANs for Improved Quality, Stability, and Variation (Tero Karras, Timo Aila, Samuli Laine (alle NVIDIA) und Jaakko Lehtinen (NVIDIA und Aalto University)) veröffentlicht wurden. PGANs führen eine fundamentale Neuerung beim Trainieren der beteiligten neuronalen Netze ein: Das Training startet bei groben Auflösungen und wird dann schrittweise feiner. Zuerst werden also nur wenig pixel-große Repräsentationen der Bilder antrainiert und diskriminiert. Die Auflösung wird dann im Laufe des Trainingsprozesses schrittweise gesteigert. Dies führt dazu, dass der Trainingsprozess stabiler ist und schneller konvergiert.

Ein Showcase für PGANs ist die Generierung künstlicher ‘Promis’. Die Ergebnisse sind fotorealistisch und von echten Hollywood-Stars im Stil kaum zu unterscheiden.

Angespornt von der herausragenden Qualität dieser Ergebnisse haben wir versucht, uns mit PGAN neue Mitarbeiter zu generieren. Leider ist unser Datensatz mit etwa 500 Bildern sehr klein. Der CelebA-Datensatz, den NVIDIA für das obige Video verwendet, enthält 200.000 Bilder. Unsere neuen Kollegen sehen uns daher noch ziemlich ähnlich:


Unsere Kollegen Jonas und Olga, sowie ihre nächsten Nachbarn unter den generierten Mitarbeitern. Overfitting ist klar erkennbar.

Generierung von neuen Emojis

An dieser Stelle möchten wir euch zeigen, wie wir PGAN so trainieren können, dass es neuartige Emojis generiert. Emojis eignen sich für unser Experiment einigermaßen gut, da sie eine geringe Auflösung haben. Die geringe Auflösung ist für uns wichtig, da wir die Kosten für das Experiment erst einmal gering halten möchten. Außerdem erhoffen wir uns interessante und amüsante Ergebnisse.

Als Trainingsset verwenden wir die Emojis von EmojiOne in der 32×32-Auflösung, nachdem uns Apple eine Absage für die Nutzung ihrer Emojis für diesen Blogartikel untersagt hat. Der Datensatz enthält 893 Emojis, was für ein Trainingsset relativ klein ist.


Auszug aus dem verwendeten Datensatz

Setup und Trainingsprozess

Für die Generierung der neuen Emojis nutzen wir die originale PGAN-Implementierung von NVIDIA, die auf GitHub verfügbar ist. NVIDIA Research hat alle wichtigen Informationen rund um das Paper auf einer eigenen Seite zum Nachlesen zusammengefasst.

Das Training führen wir auf einer p3.2xlarge Amazon-EC2-Cloudinstanz durch. Diese Instanz besitzt eine Tesla V100 GPU mit 16GB Speicher (Kosten aktuell bei ca 7.000€). Ein Trainingsdurchlauf hat ca. acht Stunden gedauert und uns somit 31$ gekostet (3,82$/h). Insgesamt haben wir zwei Durchläufe gebraucht, um unsere letztendlichen Ergebnisse zu erzielen.

Bevor wir das Training starten können, müssen wir zunächst unsere Emojis in das geeignete Format bringen. PGAN speichert die verwendeten Trainingsbilder in tfrecords-Dateien. Um eigene Datensätze verwenden zu können, bringt PGAN die Funktion create_from_images mit, welche wir mittels

python dataset_tools.py create_from_images

ausführen können. Da die Bilder nativ im Farbraum P vorliegen, konvertieren wir sie vorher in den RGB-Farbraum.

Als nächstes registrieren wir unseren neuen Datensatz in der config.py, indem wir die Zeile

desc += '-emojis'; dataset = EasyDict(tfrecord_dir='emojis'); train.mirror_augment = True

hinzufügen, und die übrigen Datensätze auskommentieren. In der config.py können wir auch weitere Einstellungen vornehmen, wie etwa die Anzahl an GPUs. Da wir auf einer p3.2xlarge trainieren, wählen wir hier die Einstellung -preset-v2-1gpu.

Jetzt können wir das Training starten, indem wir einfach python train.py ausführen. Aufgrund der signifikanten Kosten stoppen wir den Trainingsprozess, sobald wir eine Konvergenz auf den Ergebnissen sehen.


Zwischenergebnisse. Auflösung 4×4

Zwischenergebnisse. Auflösung 8×8

Zwischenergebnisse. Auflösung 16×16

Finale Ergebnisse. Auflösung 32×32

Hier ein paar ausgewählte GANmojis:

creepy hat

Alter Schnuller

Evilmoji

König der Baustelle

Rauchermoji

Zu viel Kaffee

Monobrow


Slomo Face Hit

Rorschach

Shampoomoji

Pizzamampf

Behind Windows

 

Lessons Learned

Bei der Generierung hatten wir einige Herausforderungen und Fehler, die uns nicht direkt aufgefallen und somit recht teuer geworden sind. Ein Beispiel ist der oben kurz erwähnte falsche Farbraum, der von Tensorflow nicht richtig erkannt wurde und deshalb unsere Emojis nur in Schwarz-Weiß erkannt hat. Dieser Fehler ist uns leider erst nach Abschluss des Trainings aufgefallen:

Lesson Learned: Den Import der Trainingsdaten unmittelbar checken, entweder direkt in den tfrecord-Dateien oder zu Beginn des Trainings in der reals.png.

Zusammenfassung und Fazit

Mit genügend Trainingsdaten ist es inzwischen möglich, künstliche Inhalte von neuronalen Netzen generieren zu lassen. Die Qualität hängt dabei sowohl stark vom Trainingsset (beispielsweise der Größe oder Varianz) als auch von den eingesetzten Ressourcen ab. Wir haben mit einem recht überschaubaren Set an Trainingsdaten ohne spezielle Optimierungen bereits interessante Ergebnisse erzielt. Die Ergebnisse sind den ursprünglichen Emojis teilweise noch sehr ähnlich, was durch den kleinen Datensatz zu erwarten war. Eine gutes Trainingsset wäre idealerweise erheblich größer.

Die Generierung neuer Inhalte könnte auch heute schon für Unternehmen interessant sein. Perspektivisch könnten sogar gänzlich neue Geschäftsmodelle auf GANs basieren, z. B. die Erstellung reiner GAN-Stockphoto-Archive, die entweder vermarktet oder besser noch unter Creative-Commons-Lizenz bereitgestellt werden. In Betracht ziehen muss man dabei jedoch die Kosten: Sowohl bei der Nutzung von Cloud-Instanzen als auch bei der Anschaffung eigener Hardware fallen nicht unerhebliche Gebühren an. Eigene Hardware ist zudem während des Trainings für recht lange Zeiten blockiert.

Abschließend möchten wir uns bei NVIDIA bedanken, die uns die Verwendung der Referenzimplementierung als Ausgangspunkt unserer Experimente erlaubt haben.

Tim Sabsch

Tim arbeitet seit 2018 als Data Scientist bei codecentric in Münster. Er interessiert sich insbesondere für die Interpretierbarkeit von Künstlicher Intelligenz sowie für Generative Modelle.

Kai Herings

Kai Herings leitet das Innovation Acceleration Team für codecentric. Dabei ist er direkt in Projekte und Themen in den Bereichen Deep-Learning & A.I, AR/VR, Industry 4.0, IoT, Blockchain involviert.

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.