"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.
https://github.com/chuanli11/CNNMRF
Generiertes Bild | Inhaltsbild | Stilbild | |
---|---|---|---|
Ölgemälde | |||
Aquarell | Chihiro Iwasakis "Hanaguruma」 | ||
Stiftzeichnung |
Bildquelle:
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.
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.
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.
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) $.
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.
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)
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.
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.
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.
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.
Recommended Posts