Veröffentlicht am 12-09-2019

Unterrichten von Computern, wie Van Gogh zu malen

Der Stanford Campus von AI Van Gogh

Einer der faszinierendsten Bereiche des Deep Learning ist ohne Zweifel die Kunstgeneration.

Warte was?

Ich erinnere mich, als ich das zum ersten Mal sah, war mein Verstand geblasen. Bei näherer Betrachtung hätte es nach meinen Maßstäben ein menschliches Meisterwerk sein können (nicht, dass ich viel über Kunst weiß). Aber es war nicht so.

Es stellt sich heraus, dass es sich bei dieser Art von Dingen um NST (Neural Style Transfer) handelt, das erstmals in einer Veröffentlichung aus dem Jahr 2015 veröffentlicht wurde. Also beschloss ich, selbst ein NST-Modell zu lernen und zu bauen.

Ein sternenklarer Nachttag in Toronto mit Alex 'Laptop

Es ist eigentlich nicht so schwer, wie Sie denken.

So können Sie es machen:

In einem normalen neuronalen Faltungsnetz (das wir zur Objekterkennung, zum Selbstfahren und zur Gesichtserkennung usw. verwenden) trainieren wir es, um den Fehler zu minimieren, den verschiedene Parameter jeder Ebene verursachen, wenn versucht wird, ein Objekt zu erkennen oder ein Bild zu klassifizieren . Wenn die Parameter die CNN-Vermutung falsch machen, ändern wir sie erneut, damit sie beim nächsten Mal der Richtigkeit ein Stückchen näher kommen.

Für NST initialisieren wir zuerst ein Bild, das zufällig RGB-Werte für jedes Pixel generiert hat:

Dann trainieren wir die CNN, um den Fehler, den Pixelwerte verursachen, basierend auf einem willkürlichen Ziel, das wir festlegen, zu minimieren. Anstatt also die Parameter nach jedem Backpropagation-Schritt zu ändern, um den Fehler zu minimieren, aktualisieren wir die tatsächlichen Pixel des Bildes.

Unsere Aufgabe ist also theoretisch einfach:

Wir müssen eine Kostenfunktion schreiben, die minimiert werden kann, wobei das Endergebnis nach einer bestimmten Anzahl von Trainingsiterationen das generierte Bild ist, das den Stil eines Van-Gogh-Gemäldes mit dem Inhalt des Eingabebildes kombiniert, wie oben gezeigt.

OK, aber dazu müssen wir noch Stil und Inhalt mathematisch darstellen. Teilen wir die Kostenfunktion zunächst in drei Teile auf:

  1. Schreiben Sie eine Kostenfunktion für den Inhalt des Bildes
  2. Schreiben Sie eine Kostenfunktion für den Stil des Bildes
  3. Kombinieren Sie die beiden vorherigen Kosten in einer gewichteten Gesamtkostenfunktion.

Lass uns anfangen.

1. Inhaltskosten

Wie stellen wir Inhalte mathematisch dar? Das heißt, wie stellen wir sicher, dass, wenn unser Inhaltsbild ein Objekt enthält, unser generiertes Bild auch eine erkennbare Form dieses Objekts enthält, in der wir leicht ihre Merkmale korrelieren und sagen können: „Hey, es ist genau das Gleiche anders lackiert '?

Dies hat damit zu tun, wie ein CNN tatsächlich lernt. Nehmen wir als Beispiel das leistungsstarke neuronale Netz VGG-19. Wir werden es am Ende auch verwenden, um NST anzuwenden.

VGG-19 gewann bei der ISLVRC-2014 Challenge

Ein CNN wie dieses erkennt zunächst sehr kleine Details aus Matrizen von R-, G- und B-Werten, die jedem Pixel entsprechen, wie z. B. die winzigen Kanten von Objekten, und erkennt dann größere, komplexere Formen, bis er erraten kann, was das ist Das Bild wird basierend auf seinen winzigen Komponenten dargestellt. Hier ist eine großartige Visualisierung:

Die obigen Bilder zeigen verschiedene Funktionen, mit denen die Aktivierungen der einzelnen Ebenen maximiert werden. Dies bedeutet, dass für jede Ebene jedes 3x3-Kästchen im Raster in gewisser Weise anzeigt, wonach ein Neuron sucht. daher "Aktivierungen").

Hier kommt speziell VGG-19 ins Spiel. Das CNN mit 19 Schichten wurde im ImageNet-Datensatz vorab trainiert, der tausend Bildklassen und viele Trainingsbilder in jeder Klasse enthält. Dies macht es für das Modell wahrscheinlicher, den Inhalt des Bildes beizubehalten, da der Inhalt wahrscheinlich in eine der tausend Klassen passt, und wenn nicht, ist es wahrscheinlich, dass eines der Neuronen nach etwas ähnlichem sucht die Komponenten des Inhaltsobjekts.

Jetzt müssen wir nur noch die Kostenfunktion auf allen Ebenen des CNN ausführen und sicherstellen, dass alle Darstellungen des Inhalts vorhanden sind. Wir können dies tun, weil wir bereits die Intuition entwickelt haben, dass, wenn alle Aktivierungen einer bestimmten Ebene ähnlich sind, die Bilder, die die Ebene durchlaufen, in ihrer gegebenen Granularität ebenfalls ähnlich sind.

Also, da hast du es. Wenn Sie in einer Ebene ähnliche Aktivierungen haben, haben Sie ähnliche Inhalte. Jetzt müssen wir für unsere Kostenfunktion nur sicherstellen, dass wir in jeder Ebene nach ähnlichen Inhalten suchen, wenn wir den Stil ändern.

Wenn Sie neugierig sind:

Wir versuchen, die normalisierte Summe über die Unterschiede aller verborgenen Aktivierungen im Inhalt zu reduzieren und Bilder zu generieren, die deren Merkmale darstellen

2. Style Kosten

Da wir nun die Inhaltskosten haben, möchten wir nicht, dass unser Modell immer wieder für denselben Inhalt geändert wird. Wenn dies der Fall wäre, würde es dasselbe Bild ausgeben, das wir ihm gegeben haben.

Wir wollen es mit dem Stil des künstlerischeren Bildes ausgleichen. Das Problem hierbei ist jedoch, wie wir den "Stil" mathematisch extrahieren.

Wenn Sie darüber nachdenken, ist der Stil tatsächlich die Korrelation zwischen bestimmten Inhalten hinsichtlich ihrer Position in einem Bild. Wenn zum Beispiel vertikale Striche an denselben Stellen wie orangefarbene Flecken vorhanden sind, würde dies einen charakteristischen Stil darstellen. Wenn weitere Funktionen korrelieren, können Sie sehen, wie wir etwas wie Van Goghs Stil nachbilden können.

Für unser Stilbild korrelieren wir also grundsätzlich jedes Feature mit jedem anderen Feature auf einer Ebene, indem wir sie alle miteinander multiplizieren, um eine Stilmatrix (oder Gram-Matrix, wie sie sonst bekannt ist) für das Bild zu erstellen. Etwas wie das:

Wenn wir das verwenden, was wir über Aktivierungen aus den Inhaltskosten wissen, würden die Stilkosten dann den Unterschied zwischen der Stilmatrix im Stilbild und der Stilmatrix im generierten Bild verringern und versuchen, sie enger zu machen.

Dies ist die Kostenfunktion für die Matrix auf einer Ebene:

Aber das ist nicht alles. Der Grund, warum ich eine Ebene immer wieder betone, ist der folgende. Angenommen, wir haben die Stilkostenfunktion auf Ebene 1 des CNN berechnet. Die von dieser Schicht erkannten Merkmale wären äußerst gering. wahrscheinlich nicht einmal groß genug, um von Menschen als "Stil" bezeichnet zu werden. Das hätte nicht das gewünschte Ergebnis, das wir uns erhofft hatten. Was wäre, wenn ein Künstler größere künstlerische Stile hätte, die sich auf die Symmetrie oder Geometrie bestimmter Formen im gesamten Bild beziehen? Dies könnten wir auch in unserem generierten Image nicht widerspiegeln.

Aus diesem Grund müssen wir eine Stilmatrix und Stilkosten für mehrere spezifische Ebenen im CNN berechnen. So was:

Addiert man die Kosten aller gewählten Schichten, multipliziert man sie mit dem Gewicht Lambda

Diese Formel ermöglicht es uns, den Stil des Künstlers viel umfassender zu reflektieren.

Das ist es für den Stil.

3. Gesamtkosten

Der Rest ist ziemlich einfach. Wir müssen nur diese beiden Funktionen übernehmen; den Stil und den Inhalt, und setzen Sie sie in eine große Funktion, die ein angemessenes Gleichgewicht zwischen ihnen findet:

Summe von Gewicht Alpha gegen Inhaltskosten und Gewicht Beta gegen Stilkosten. Alpha und Beta sind als Hyperparameter eingestellt

Alles einpacken

Mit diesen Algorithmen wird NST in den folgenden Schritten ausgeführt:

  1. Führen Sie das Inhaltsimage durch VGG-19 und sammeln Sie die Aktivierungen auf einer bestimmten Ebene
  2. Führen Sie das Stilbild durch VGG-19, sammeln Sie Aktivierungen und berechnen Sie Stilmatrizen auf mehreren Ebenen.
  3. Rauschbild erzeugen
  4. Führen Sie die Grafikberechnung aus, bei der das Rauschbild über VGG-19 ausgeführt wird, Aktivierungen erfasst, die Gesamtkosten berechnet werden und die Grafik eine Backpropagation durchführt, wobei das eingegebene Rauschbild geändert wird, das zur Eingabe für die nächste Iteration wird. Wiederholt für die gewünschte Anzahl von Iterationen

Sie können meine Implementierung auf Github hier ansehen.

Einen Schritt zurücktreten

Wenn wir uns nun ansehen, was wir getan haben und was die Autoren des NST-Papiers uns gezeigt haben, sollten wir dies wirklich wieder in die richtige Perspektive rücken.

Eine Maschine hat Kunst gemacht.

Auch wenn NST keine weltverändernden Anwendungen hat, zeigt es uns, dass die Grenzen dessen, was AI unserer Meinung nach kann, jeden Tag erweitert werden. Und das macht den Unterschied.

Dies ist das erste einer Reihe von Themen zum maschinellen Lernen, über die ich schreiben werde.

Wenn Sie Fragen haben, können Sie sich gerne auf Linkedin mit mir in Verbindung setzen oder mir eine E-Mail an zhual@utschools.ca senden.

Danke fürs Lesen!

Siehe auch

Kulturelle Künste definieren: Städte groß machen#Sketchbook_SamstagFarbe und Energie: Was unsere Vorlieben dem geschulten dritten Auge zeigenFRESCO heißt neuen Berater Ho Jae Kim willkommenWie können Sie die Belastungen in Ihrem Leben verringern?So fördern Sie Ihre Kunst effektiv, wenn Sie gerade erst anfangen