Kunst mit neuronalen Netzen in Python

Neuronale Netze sind heute unter anderem bekannt dafür, mit hoher Präzision Objekte auf Bildern zu erkennen und diese zu klassifizieren. Jedoch kann so ein großer Haufen linearer Algebra nicht nur Objekte erkennen, sondern auch Bilder erschaffen. Deshalb heißen diese Modelle auch “generative” (erzeugende) neuronale Netze. Dies hier soll aber keine ausführliche Erklärung von neuronalen Netzen sein, deshalb mache ich es kurz.

Den hier genutzten und ausführlich dokumentierten Code findest du auf der GitHub-Seite des Youtubers Siraj Raval, der Videos zu allen Themen rund um Machine Learning macht. Kopiere den Code einfach in deine Programmierumgebung und lies dir dazu die Kurzanleitung unten durch. Viel Spaß beim künsteln!

Das Grundprinzip

Die Idee ist es, ein Originalbild mit Hilfe eines anderen “Stil”-Bildes so zu verändern, dass sich das Original an das zweite Bild anpasst. Zum Beispiel kannst du ein Foto von dir an den Stil eines berühmten Malers anpassen. Das einzige, was du dafür brauchst, ist Python, ein Bild von dir und ein Bild eines Malers. Im Prinzip kannst du natürlich zwei komplett beliebige Bilder nehmen.

Der Code in Python

Um den oben genannten Code ausführen zu können brauchst du die Module time, PIL, numpy, kerasscipy und tensorflow.

Zuerst werden Original- und Stilbild importiert. Dafür musst du den jeweiligen Dateipfad als String an die Variablen content_image_path und style_image_path weiter geben. Diese Bilder werden eingelesen und transformiert. Anschließend wird ein vortrainiertes neuronales Netz geladen. Nicht wundern,  das Modell ist 52MB groß und muss erst herunter geladen werden. Das passiert jedoch bei der erstmaligen Definition des Modells automatisch. Die Variablen content_weight und style_weight sind die Gewichtungen, mit denen deine gewählten Bilder in das Modell eingehen. Sie dienen also als Stellschrauben, an denen du drehen kannst. Dann werden die Fehlerfunktionen definiert, welche im Modell minimiert werden. Diese Minimierung verursacht den sogenannten “Style-Transfer”, der Stil des einen Bildes wird somit auf das Originalbild transferiert.

Im vorletzten Schritt wird das Modell in 10 Iterationen optimiert. Die Anzahl der Iteration ist eine weitere Stellschraube, mit der du das Ergebnis beeinflussen kannst. Hier solltest du jedoch vorsichtig sein, was hohe Werte angeht. Viele Iterationen brauchen auch viel Rechenleistung. Auf meinem Rechner dauert eine Iteration ca. 8 Sekunden, wobei die GPU (GeForce GTX 1060 6GB) diese Arbeit übernimmt. Ohne dedizierte Grafikkarte mit ausreichend Speicher kann der Prozess entsprechend länger dauern. 

Ergebnisse

Hier siehst du ein paar Beispielbilder, welche der oben beschriebenen Code generiert hat.

1. Ein Bergsee plus Kandinsky

2. Rihanna plus Picasso

3. Picasso und Köln

4. Rosamunde Pike und ein Fresko aus dem Kölner Dom

Und so einfach kann Kunst sein!

Schreibe einen Kommentar

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

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.