[PYTHON] Eine andere Stilkonvertierungsmethode unter Verwendung des Convolutional Neural Network

Stilkonvertierungsmethode mit Convolutional Neural Network

"Ein neuronaler Algorithmus des künstlerischen Stils" (im Folgenden "Neuronaler Stil") ist als Stilkonvertierungsmethode unter Verwendung des Convolutional Neural Network (CNN) und der folgenden Implementierung bekannt es gibt.

Eine andere Methode zur Stilkonvertierung ist "Kombinieren von Markov-Zufallsfeldern und Faltungs-Neuronalen Netzen für die Bildsynthese" (im Folgenden "Stilkonvertierung mit MRF"). Ich werde dies vorstellen.

Ich habe diese Technik in Chainer implementiert. Den Quellcode finden Sie unter https://github.com/dsanno/chainer-neural-style.

Was ist Stilkonvertierung?

Beispiel für eine Stilkonvertierung

Probe vom Autor des Papiers

https://github.com/chuanli11/CNNMRF

Beispiel durch Chainer-Implementierung

Generiertes Bild Inhaltsbild Stilbild
Ölgemälde
Aquarell Chihiro Iwasakis "Hanaguruma
Stiftzeichnung

Bildquelle:

Überblick

Die Stilkonvertierung mit MRF generiert das folgende Bild.

Der Unterschied besteht darin, dass der neuronale Stil den Gesamtstil des Bildes näher an das Stilbild heranführt, während MRF den lokalen Stil näher an das Stilbild heranführt.

Bestehende Implementierung

Algorithmus

Der Titel enthält "Markov-Zufallsfeld (MRF, Markov-Zufallsfeld)", aber da MRF nicht das Herzstück des Algorithmus ist, werde ich die Erklärung weglassen.

Ein- und Ausgabe

Geben Sie das Inhaltsbild und das Stilbild ein. Inhaltsbilder werden durch $ x_c $ und Stilbilder durch $ x_s $ dargestellt. Das erzeugte generierte Bild wird durch $ x $ dargestellt.

CNN

Diese Methode verwendet ein CNN zur Bilderkennung wie VGG wie im neuronalen Stil.

Ebenenausgabe

Die Ausgabe einer bestimmten Ebene, wenn das Bild $ x $ in das CNN eingegeben wird, wird durch $ \ Phi (x) $ dargestellt. Die Ebenenausgabe bei Eingabe eines Inhaltsbilds ist $ \ Phi (x_c) $, und die Ebenenausgabe bei Eingabe eines Stilbilds ist $ \ Phi (x_s) $.

Patch

Generieren Sie einen Patch aus der Ausgabe der CNN-Ebene. Ein Patch ist eine Sammlung von $ k \ mal k $ Bereichen der Ebenenausgabe in einem und ist ein Vektor der Länge $ k \ mal k \ mal C $ ($ C $ ist die Anzahl der Kanäle in der Ebenenausgabe). Sie können mehrere Patches aus einer Ebene generieren, und der $ i $ -te Patch wird durch $ \ Psi_i (\ Phi (x)) $ dargestellt.

Definition von Energie

Dieser Algorithmus definiert Energie als Funktion von $ x $. Berechnen Sie dann $ x $, um die Energie zu minimieren. Die Definition der Energiefunktion ist wie folgt. Die Erklärung der einzelnen Abschnitte wird unten erläutert.

E(x) = E_s(\Phi(x), \Phi(x_s)) + \alpha_1 E_c(\Phi(x), \Phi(x_c)) + \alpha_2 \Upsilon(x) 

MRFs loss function

Ein Element $ E_s $ heißt MRFs-Verlustfunktion und hat folgende Definition.

E_s(\Phi(x), \Phi(x_s)) = \sum^{m}_{i=1}||\Psi_i(\Phi(x)) - \Psi_{NN(i)}(\Phi(x_s))||^2

$ NN (i) $ wird jedoch durch die folgende Formel definiert.

NN(i) := \mathop{\rm arg\,max}\limits_{j=1,...,m_s} \frac{\Psi_i(\Phi(x)) \cdot \Psi_j(\Phi(x_s))}{|\Psi_i(\Phi(x))| \cdot |\Psi_j(\Phi(x_s))|}

In der Zeitung ist es argmin, aber wenn ich mir die Implementierung anschaue, scheint argmax korrekt zu sein. Diese Formel hat folgende Bedeutung.

Content loss function

Die beiden Elemente $ E_c $ werden als Inhaltsverlustfunktion bezeichnet und haben folgende Definitionen.

E_c(\Phi(x), \Phi(x_c)) = ||\Phi(x) - \Phi(x_c)||^2

Dies bedeutet, dass die Energie umso kleiner ist, je näher die aus $ x $ erzeugte CNN-Schicht und die aus $ x_c $ erzeugte CNN-Schicht sind.

Regularizer

Die drei Elemente $ \ Upsilon $ sind Regularisierungsbegriffe zum Glätten des Bildes. Die Definition lautet wie folgt: $ x_ {i, j} $ ist der Wert des Pixels, dessen x-Koordinate $ i $ und dessen y-Koordinate $ j $ ist. Je kleiner der Unterschied zwischen benachbarten Pixeln ist, desto kleiner ist die Energie.


\Upsilon(x) = \sum_{i,j}((x_{i,j+1} - x_{i,j})^2 + (x_{i+1,j} - x_{i,j})^2)

Implementierung

Ich habe es mit Chainer implementiert. Das CNN verwendet das Modell VGG 16 Layer, das auch Chainer-Gogh bekannt ist. Den Quellcode finden Sie unter https://github.com/dsanno/chainer-neural-style.

Methodenvergleich

Ausführungszeit

Die Ausführungszeit ist kürzer als im neuronalen Stil. Der neuronale Stil erfordert Tausende von Iterationen, während die Stilkonvertierung mit MRF Hunderte von Iterationen erfordert.

Stilunterschied

Beim neuronalen Stil ändert sich die Farbnutzung drastisch, aber die Stilkonvertierung mit MRF ändert die Farbnutzung nicht wesentlich, und ich habe den Eindruck, dass sich die Berührung des Bildes ändert.

Anwendung

Es gibt neural-doodle als Anwendung der Stilkonvertierung mit MRF. Mit Neural-Doodle können Sie angeben, welcher Stil in welchem Bereich des Bildes angegeben werden soll. Wie Sie anhand des verknüpften Bildes sehen können, wird das Gesichtsfoto in Gochs Porträtstil konvertiert. Durch Angabe des Stils für jeden Bereich wird jedoch eine natürlichere Konvertierung erzielt.

In Neural-Doodle wird die Stilspezifikation realisiert, indem der Vektor, der die Stilnummer darstellt (ein heißer Vektor, der angibt, welchem Stil das Patch entspricht), mit dem von der CNN-Schicht ausgegebenen Patch-Vektor verkettet wird.

Verweise

Recommended Posts

Eine andere Stilkonvertierungsmethode unter Verwendung des Convolutional Neural Network
Versuchen Sie es mit TensorFlow-Part 2-Convolution Neural Network (MNIST).
Stilkonvertierung durch neuronalen Stil
Implementieren Sie das Convolutional Neural Network
Erfahrung mit faltbaren neuronalen Netzen
Modell unter Verwendung eines Faltungsnetzwerks in der Verarbeitung natürlicher Sprache
Implementierung eines Faltungs-Neuronalen Netzwerks mit nur Numpy
Einfache Implementierung eines neuronalen Netzwerks mit Chainer
Was ist das Convolutional Neural Network?
Überlebensvorhersage unter Verwendung des titanischen neuronalen Netzes von Kaggle [80,8%]
Implementierung von "verschwommenen" neuronalen Netzen mit Chainer
Einfache Implementierung eines neuronalen Netzwerks mithilfe der Chainer-Datenaufbereitung
Einfache Implementierung eines neuronalen Netzwerks mithilfe der Beschreibung des Chainer-Modells
Erstellt ein Bildunterscheidungsmodell (cifar10) unter Verwendung eines Faltungs-Neuronalen Netzwerks
[Chainer] Dokumentklassifizierung nach Faltungsnetzwerk
Einfache Implementierung eines neuronalen Netzwerks mit Chainer ~ Optimierungsalgorithmus einstellen ~
Verstärkungslernen 10 Versuchen Sie es mit einem trainierten neuronalen Netz.
Parametrisches neuronales Netzwerk
Autorenschätzung unter Verwendung von neuronalen Netzen und Doc2Vec (Aozora Bunko)