Du hast Fragen? Wir haben Antworten! - Bald findet unser nächster Tag der offenen Tür statt!

Logo site

Style Transfer & Deep Learning

-
4
 Minuten Lesezeit
-
style transfer

Style Transfer: Hast Du Dir jemals gewünscht, wie Van Gogh malen zu können? Die Ästhetik von Monet in modernen Landschaften wiederzugeben?
In diesem Artikel stellen wir Dir eine Technik vor, die Deep Learning nutzt, um den Stil eines anderen Bildes auf ein Originalbild anzuwenden. Diese Optimierungstechnik ist als Neural Style Transfer bekannt und wurde erstmals in Leon A. Gatys Artikel „Neural Algorithmus“ beschrieben: Gatys, A Neural Algorithm of Artistic Style.

Style Transfer, was ist das eigentlich ?

Style Transfer ist eine der kreativsten Anwendungen von Convolutive Neuronal Networks (Du willst mehr über CNNs erfahren? Wir haben kürzlich einen Artikel zu diesem Thema veröffentlicht)

Sie ermöglicht es, den Stil eines Bildes abzurufen und ihn in einem beliebigen anderen Bild wiederzugeben. Dies ist eine interessante Technik, die die internen Fähigkeiten und Darstellungen neuronaler Netze aufzeigt. Sie kann sich auch in einigen wissenschaftlichen Bereichen als nützlich erweisen, wenn es um die Augmentation oder Simulation von Bilddaten geht.

Die fast unendlichen Kombinationen von möglichen Inhalten und Stilen bringen unter den Anhängern neuronaler Netze einzigartige und immer kreativere Ergebnisse hervor, manchmal sogar echte Meisterwerke.

Um zu funktionieren, muss ein Referenzbild für den Inhalt und ein Referenzbild für den Stil ausgewählt werden (z. B. das Kunstwerk eines berühmten Malers). Ein drittes Bild, das mit dem Inhaltsbild initialisiert wird, wird dann nach und nach optimiert, bis es dem Inhaltsbild ähnelt, aber im Stil des zweiten Bildes „gemalt“ ist.

Das Prinzip der Stilübertragung besteht hauptsächlich darin, zwei Abstandsfunktionen zu definieren:

Die eine beschreibt den Unterschied zwischen den Inhalten zweier Bilder.
Die andere beschreibt den Unterschied zwischen zwei Bildern in Bezug auf ihre Stile.

Diese beiden Abstände müssen dann mithilfe einer Backpropagation-Technik minimiert werden, um nach der Optimierung ein Bild zu erhalten, das dem Inhalt des Inhaltsbildes und dem Stil des Stilbildes entspricht.

Die Abstände, die wir verwenden, werden weiter unten beschrieben und aus den Bildern berechnet, die aus den Zwischenschichten des neuronalen Netzes extrahiert werden. 

Ein beeindruckender Aspekt dieser Technik ist, dass kein neues Training von neuronalen Netzen erforderlich ist – die Verwendung von vortrainierten Netzen wie VGG19 ist ausreichend und funktioniert bestens. Wenn du dich fragst, wie das funktioniert, kannst du dir gerne unseren Artikel über Transfer Learning ansehen.

In diesem Artikel stelle ich Dir ein konkretes Beispiel für die Anwendung von Stilübertragung vor, indem ich die Bibliothek Tensorflow verwende.

Der hier verwendete Ansatz ahmt die Methoden des Originalpapiers so genau wie möglich nach. Der vollständige Code dieses Artikels ist unter dieser Adresse verfügbar 

Indem wir jeweils nur zwei Basisbilder verwenden, können wir Meisterwerke wie diese Darstellung von Botticellis „Die Geburt der Venus“ schaffen, wenn sie vier Jahrhunderte später von Marc Chagall gemalt worden wäre.

Für unser Beispiel brauchen wir zwei Grundbilder, die wir zusammen „mischen“ wollen. Das erste steht für den Inhalt, den wir behalten möchten. In meinem Fall werde ich das bekannte Gemälde „Die Geburt der Venus“ von Sandro Botticelli verwenden :

Das zweite Bild wird den Stil enthalten, den wir beibehalten und auf das erste Bild anwenden wollen.

Nehmen wir als Beispiel ich den unvergleichlichen Stil des ikonischen Malers des 20. Jahrhunderts, Marc Chagall, durch eines seiner Werke mit dem Titel La vie.

 

Hochladen und Vorverarbeitung von Bildern

Zunächst werden wir die Daten laden und vorbereiten, um sie demselben Vorverarbeitungsprozess zu unterziehen, der auch beim Training der VGG-Netze verwendet wird. Dann werden wir auch eine Funktion erstellen, die den umgekehrten Prozess durchführt, damit wir unser endgültiges Bild anzeigen können.

[]

Wie kann man den Stil und den Inhalt eines Bildes unterscheiden?

Wenn ein konvolutives neuronales Netz (wie VGG19) trainiert wird, um eine Bildklassifizierung durchzuführen, muss es das Bild kennen und verstehen.

Im Gegensatz zum klassischen Machine Learning werden beim Deep Learning die Features während des Backpropagation-Lernens vom Netzwerk selbst generiert.

Beim Training verwendet das neuronale Netz die Pixel der gelieferten Bilder, um durch verschiedene Transformationen eine interne Repräsentation des Bildes zu erstellen.  Nachdem das Netz trainiert wurde, wird das eingegebene Rohbild in eine Folge von komplexen Merkmalen umgewandelt, die im Bild vorhanden sind, um die Klasse, zu der das Bild gehört, vorherzusagen.

So können in den mittleren Schichten des Netzwerks einige der Merkmale eines Bildes extrahiert werden, um seinen Inhalt und seinen Stil zu beschreiben.

Um sowohl den Inhalt als auch den Stil unserer Bilder zu erhalten, werden wir daher einige Zwischenschichten aus unserem Modell extrahieren.  Ausgehend von der Eingangsschicht des Netzwerks repräsentieren die ersten Schichtaktivierungen Merkmale auf niedrigerer Ebene wie Kanten und Texturen. Die letzten Schichten repräsentieren Merkmale auf höherer Ebene, wie Ohren oder Augen.

Wir werden also eine der letzten Ebenen verwenden, um den Inhalt darzustellen, und einen Satz von 5 Ebenen (die ersten in jedem Block), um den Stil der Bilder darzustellen.

Wir laden die vorab trainierte Vorlage mit ihren Gewichten und erstellen eine neue Vorlage, die als Eingabe ein Bild nimmt und die Zwischenschichten zurückgibt, die dem Inhalt und dem Stil des Bildes entsprechen.intermédiaires correspondant au contenu et au style de l’image.

Style Transfer: Definition und Erstellung von Verlustfunktionen

Unsere Definition der Verlustfunktion für Inhalte ist recht einfach. Wir übertragen sowohl das Bild des gewünschten Inhalts als auch unser grundlegendes Eingangsbild an das Netzwerk. Damit können wir die Ausgaben der mittleren Schichten unseres Modells zurückgeben. Dann nehmen wir einfach den mittleren quadratischen Fehler zwischen den beiden Zwischendarstellungen dieser Bilder.

Der Zweck dieser Verlustfunktion ist es, sicherzustellen, dass das erzeugte Bild einige der „globalen“ Eigenschaften des Inhaltsbildes beibehält. 

In unserem Beispiel wollen wir sicherstellen, dass das erzeugte Bild die Pose der Göttin, die in einer Muschelschale steht, sowie die Figuren um sie herum wiedergibt. Das bedeutet, dass Formen wie Körper, Haare und die Muschel erkennbar sein müssen.

Wir führen die Backpropagation auf die übliche Weise durch, um diesen Inhaltsverlust zu minimieren. Wir verändern also das Ausgangsbild so lange, bis es am Ausgang der gewählten Zwischenebene eine ähnliche Antwort erzeugt wie das Bild mit dem ursprünglichen Inhalt.

Für den Stil wird aufgrund der Anzahl der Ebenen die Verlustfunktion anders aussehen.

Anstatt die Ausgaben der rohen Zwischenebenen des Basis-Eingabebildes und des Stilbildes zu vergleichen, verwenden die Autoren des Originalpapiers die Differenz zwischen den Gram-Matrizen der ausgewählten Ebenen.

Die Gram-Matrix ist eine quadratische Matrix, die die Produkte der Punkte zwischen jedem vektorisierten Filter der Ebene enthält. Die Gram-Matrix kann daher als eine nicht-normalisierte Korrelationsmatrix für die Filter einer Ebene betrachtet werden.

Um einen Stil für unser Eingabebild zu erzeugen, führen wir einen Gram-Abstieg vom Inhaltsbild aus, um es in ein Bild umzuwandeln, das den Stil des Stilbildes kopiert.

Jetzt müssen wir nur noch eine Funktion erstellen, um unsere verschiedenen Bilder zu laden, sie durch unsere Vorlage laufen zu lassen, um die Inhalts- und Stildarstellungen zurückzugeben, dann die Verlustfunktionen und den Gradienten zu berechnen, um mit der Optimierung fortzufahren.

Und das war’s!

Wir können die Methode dann auf eine Reihe von Bildern anwenden, um unseren Style Transfer zu testen. Hier sind einige Beispiele:

Du möchtest gerne mehr über Deep Learning lernen? Starte bald einen unserer Data Scientist-Kurse! 

DataScientest News

Melde Dich jetzt für unseren Newsletter an, um unsere Guides, Tutorials und die neuesten Entwicklungen im Bereich Data Science direkt per E-Mail zu erhalten.

Möchtest Du informiert bleiben?

Schreib uns Deine E-Mail-Adresse, damit wir Dir die neuesten Artikel zum Zeitpunkt der Veröffentlichung zusenden können!
icon newsletter

DataNews

Starte Deine Karriere im Bereich Data: Erhalte regelmäßig Insiderwissen und wertvolle Karrieretipps in Deinem Posteingang.