[PYTHON] Bringen Sie Menschen mit Deep Learning zum Lächeln

Deep Feature Interpolation for Image Content Changes

Deep Feature Interpolation (DFI) ist eine Technik, mit der einem Bild ein bestimmtes Attribut zugewiesen wird (z. B. "Lächeln", "Ältere", "Bart"). Als Methode zur Angabe eines bestimmten Attributs ist eine Methode bekannt, die ein generatives kontradiktorisches Netzwerk (GAN) verwendet, z. B. "Autoencoding über Pixel hinaus unter Verwendung einer erlernten Ähnlichkeitsmetrik". DFI verfolgt jedoch einen anderen Ansatz als GAN. Das Papier finden Sie unter https://arxiv.org//abs/1611.05507.

Überblick

Wie aus "Ein neuronaler Algorithmus des künstlerischen Stils" bekannt ist, aus der Feature-Map (Zwischenschichtausgabe), die durch Eingabe eines Bildes in CNN erhalten wurde. , Sie können das Image wiederherstellen. Es gibt eine Erklärung in Algorithmus zum Konvertieren des Stils, daher denke ich, dass das Lesen dieses Blogs Ihr Verständnis vertiefen wird. In DFI wird "Feature Map eines Bildes mit einem bestimmten Attribut" durch Hinzufügen eines Attributvektors zu "Feature Map aus einem Bild erhalten" erhalten. Anschließend wird das "Bild mit bestimmten Attributen" aus der erhaltenen Feature-Map wiederhergestellt.

Bildkonvertierungsverfahren

Gehen Sie wie folgt vor, um das Bild zu konvertieren.

  1. Bereiten Sie ein CNN für die Bilderkennung vor, z. B. VGG 19-Layer-Modell.
  2. Bereiten Sie das Konvertierungsquellbild vor (das als Originalbild bezeichnet wird).
  3. Entscheiden Sie, welche Attribute Sie dem Originalbild geben möchten (die gewünschten Attribute genannt).
  4. Sammeln Sie jeden der folgenden Bildsätze.
  1. Geben Sie die im Zielsatz enthaltenen Bilder in das CNN ein, um die Feature Map zu erhalten. Berechnen Sie den Durchschnitt von $ \ bar {\ phi} ^ {t} $.
  2. Berechnen Sie für die im Quellensatz enthaltenen Bilder in ähnlicher Weise den Durchschnitt von $ \ bar {\ phi} ^ {s} $ der CNN Feature Map.
  3. Berechnen Sie den Attributvektor $ w = \ bar {\ phi} ^ {t} - \ bar {\ phi} ^ {s} $.
  4. Geben Sie das Originalbild $ x $ in das CNN ein, um die Feature Map $ \ phi (x) $ zu erhalten.
  5. Berechnen Sie die gewichtete Summe $ \ phi (x) + \ alpha w $ der Feature-Map und des Attributvektors, die aus dem Originalbild erhalten wurden.
  6. Optimieren Sie das konvertierte Bild $ z $. Optimieren Sie die Feature-Map $ \ phi (z) $, die Sie erhalten, wenn Sie $ z $ in das CNN eingeben, so dass es sich $ \ phi (x) + \ alpha w $ nähert.

Hier ist ein Diagramm des in diesem Artikel verwendeten Algorithmus. Die Schrittnummer steht im Papier und unterscheidet sich von diesem Artikel.

dfi.jpg

Implementierung

Ich habe es mit Chainer implementiert. https://github.com/dsanno/chainer-dfi

Bringen Sie die Leute mit DFI zum Lächeln

Verwenden wir DFI, um dem Gesichtsbild ein Lächelnattribut zu verleihen.

Verwenden Sie beschriftete Gesichter im Wild-Dataset

In diesem Artikel wurde die Feature-Map anhand von Bildern aus dem LFW-Datensatz (Labeled Faces in the Wild) berechnet. LFW enthält mehr als 13.000 Gesichtsbilder und Vektoren, die die Attribute von Gesichtsbildern wie "Männlich" und "Lächeln" quantifizieren. In dem Papier wurde als ähnliches Bild, das als Quell- / Zielsatz verwendet werden soll, ein Bild mit vielen gemeinsamen Attributen mit dem Originalbild ausgewählt. Versuchen Sie, das in LFW enthaltene Bild auf die gleiche Weise zum Lächeln zu bringen. Das Ergebnis ist wie folgt.

Das Originalbild Lächeln Lächeln+Öffne deinen Mund
dfi01_org.jpg out9_04.jpg out20_04.jpg
dfi02_org.jpg out10_04.jpg out22_04.jpg
dfi03_org.jpg out7_04.jpg out21_04.jpg

Die Parameter usw. sind wie folgt.

Verwenden Sie Ihr eigenes Bild

Ich habe versucht, das in Pakutaso verteilte Bild zu konvertieren.

sample.png

Ich werde den Ausdruck machen, der mich ein wenig nervös lächeln lässt. Der Gewichtungsparameter $ \ alpha $ wurde im Bereich von 0,1 bis 0,5 geändert. Wenn das Gewicht zu groß ist, nimmt auch die Bildverzerrung zu.

Gewicht 0.1 Gewicht 0.2 Gewicht 0.3
sample_w01.png sample_w02.png sample_w03.png
Gewicht 0.4 Gewicht 0.5
sample_w04.png sample_w05.png

Hast du wirklich Attribute?

Ich habe oben gezeigt, dass Sie ein Gesichtsbild zum Lächeln bringen können, aber fügt diese Methode dem Bild wirklich Attribute hinzu? Ich denke nicht. Das verwendete CNN dient der Bilderkennung und die Feature Map enthält keine Informationen zu bestimmten Attributen. Daher kann unter Verwendung der Feature-Map-Differenz zwischen der Quelle und dem Zielsatz die "durchschnittliche Bilddifferenz zwischen der Quelle und dem Ziel" erzeugt werden. Wenn das Attribut "Lächeln" lautet, bedeutet dies, dass ein Lächelnbild erzeugt wird, indem dem Originalbild "Bildunterschied zwischen einem nicht lachenden Gesicht und einem Lächeln" hinzugefügt wird.

Da wir nur Bildunterschiede hinzufügen, muss die Anordnung der Gesichtsteile zwischen dem Originalbild und dem Quell- / Zielbild ausgerichtet werden. Wenn das Originalbild und das Quell- / Zielbild nicht dieselbe Gesichtsposition haben, erscheinen die Lippen möglicherweise an einer seltsamen Position. Der verwendete Gesichtsbilddatensatz enthält keine Informationen zur Platzierung von Teilen oder Gesichtsausrichtungsattribute, aber die Position und Größe des Gesichts im Bild sind ausgerichtet, sodass ich denke, dass es im Allgemeinen funktioniert. Um eine natürlichere Bildkonvertierung durchzuführen, ist es meines Erachtens erforderlich, das Quell- / Zielbild unter Berücksichtigung der Anordnung der Gesichtsteile auszuwählen.

Vergleich mit der GAN-basierten Methode

Das Papier vergleicht auch die erzeugten Bilder mit GAN-basierten Methoden. Die tatsächlich erzeugten Bilder finden Sie auf dem Papier. Hier werden wir die Eigenschaften der Methoden vergleichen.

DFI GAN-Basis
Benötigen Sie ein geschultes Modell? notwendig Nicht notwendig
Vorlernen Nicht notwendig Müssen Sie das Bilderzeugungsmodell trainieren
Eine Bilderzeugungszeit(Bei Verwendung der GPU) Dutzende Sekunden Es dauert weniger als eine Sekunde
Bild für die Bilderzeugung erforderlich Beim Generieren von Bildern sind Dutzende bis Hunderte ähnlicher Bilder erforderlich Keiner

Über die Implementierung

Ich werde über den Unterschied zwischen der Beschreibung des Papiers und der diesmal verwendeten Implementierung schreiben. Wenn Sie nicht an den Details der Implementierung interessiert sind, können Sie diese überspringen.

Gibt an, ob die Feature-Map normalisiert werden soll

In dem Artikel heißt es: "Wir verwenden die Faltungsschichten des normalisierten VGG-19-Netzwerks, das auf ILSVRC2012 vorab trainiert wurde." Sie können sehen, dass die Feature-Map normalisiert ist. Die Normalisierung der Feature-Map wird in "Grundlegendes zu tiefen Bilddarstellungen durch Invertieren" beschrieben, bedeutet jedoch, die Feature-Map durch die L2-Norm zu teilen. Eine Normalisierung wurde aus den folgenden Gründen nicht durchgeführt.

Gibt an, ob Feature-Maps kombiniert werden sollen

In diesem Artikel werden conv3_1, conv4_1 und conv5_1 unter den Zwischenschichten der VGG-19-Schichten als Feature-Maps verwendet. Dieser Punkt gilt auch für diese Implementierung. Darüber hinaus heißt es in der Arbeit: "Der Vektor $ \ phi (x) $ besteht aus verketteten Aktivierungen der Es heißt convnet, wenn es auf Bild x "angewendet wird, und Sie können sehen, dass mehrere Feature-Maps kombiniert werden. Es funktionierte jedoch ohne Kombination von Feature Maps, sodass es in dieser Implementierung nicht kombiniert wurde.

Attributvektornormalisierung

Attributvektor im Papierw = \bar{\phi}^{t} - \bar{\phi}^{s},w / ||w||Und L2 normalisiert und verwendet. Dies liegt daran, dass der Attributgewichtungsfaktor $ \ alpha $ die Auswahl des Originalbilds, der Quelle und des Ziels robust macht (sodass dasselbe $ \ alpha $ verwendet wird). Die Normalisierung von Attributvektoren ist jedoch nur gültig, wenn die Feature-Map normalisiert ist. Wenn die Feature-Map nicht normalisiert ist, ist es natürlich, die Länge des Attributvektors unter Berücksichtigung der Größe der Feature-Map zu bestimmen, also in der Implementierungw / ||w||Der Attributvektor ist der Vektor, der durch Multiplizieren der Merkmalskarte des Originalbilds mit der L2-Norm erhalten wird.

Verweise

Recommended Posts

Bringen Sie Menschen mit Deep Learning zum Lächeln
Versuchen Sie es mit TensorFlow
Deep Kernel Learning mit Pyro
Versuchen Sie Deep Learning mit FPGA
Generiere Pokemon mit Deep Learning
Probieren Sie Deep Learning mit FPGA-Select-Gurken aus
Identifikation der Katzenrasse mit Deep Learning
Versuchen Sie es mit TensorFlow Part 2
Überprüfen Sie die Kniebeugenform mit tiefem Lernen
Kategorisieren Sie Nachrichtenartikel mit Deep Learning
Snack-Umsatzprognose mit Deep Learning
Tiefes Lernen
Ich habe versucht, Deep Learning mit Spark × Keras × Docker skalierbar zu machen
Klassifizieren Sie Anime-Gesichter mit tiefem Lernen mit Chainer
Machen Sie Ihren eigenen PC für tiefes Lernen
Versuchen Sie es mit Chainer Deep Q Learning - Launch
Versuchen Sie mit Kipoi tiefes Erlernen der Genomik
Emotionale Analyse von Tweets mit Deep Learning
Deep Learning Memorandum
Starten Sie Deep Learning
Python Deep Learning
Die Geschichte des tiefen Lernens mit TPU
99,78% Genauigkeit bei tiefem Lernen durch Erkennen von handgeschriebenem Hiragana
Ich habe versucht, Deep Learning mit Spark × Keras × Docker 2 Multi-Host-Edition skalierbar zu machen
Bilden Sie Lambda-Schichten mit Lambda
Erstes tiefes Lernen ~ Kampf ~
Python lernen mit ChemTHEATER 03
Eine Geschichte über die Vorhersage des Wechselkurses mit Deep Learning
Python lernen mit ChemTHEATER 05-1
Python: Deep Learning-Praxis
Deep Learning / Aktivierungsfunktionen
Deep Learning von Grund auf neu
Machen Sie eine Yuma mit Discord.py
Deep Learning 1 Übung des Deep Learning
Deep Learning / Cross Entropy
Erstes tiefes Lernen ~ Vorbereitung ~
Erstes tiefes Lernen ~ Lösung ~
[AI] Deep Metric Learning
Python lernen mit ChemTHEATER 02
Ich habe versucht, tief zu lernen
Verstärkungslernen 37 Starten Sie automatisch mit Ataris Wrapper
Python lernen mit ChemTHEATER 01
Vorhersagen von Tags durch Extrahieren von Musikfunktionen mit Deep Learning
Klassifizieren Sie Anime-Gesichter durch Fortsetzung / Deep Learning mit Keras
Python: Deep Learning Tuning
Deep Learning Großtechnologie
Erstellen Sie Folien mit iPython
Deep Learning / Softmax-Funktion
Ich habe versucht, Othello AI zu machen, dass ich 7,2 Millionen Hände durch tiefes Lernen mit Chainer gelernt habe
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen
Erstellen Sie mit Docker eine Umgebung für "Deep Learning von Grund auf neu"
(Jetzt) Erstellen Sie eine GPU Deep Learning-Umgebung mit GeForce GTX 960
Erkennen Sie Ihren Chef mit Deep Learning und verbergen Sie den Bildschirm
[Deep Learning] Bildklassifizierung mit Faltungsnetz [DW Tag 4]
Ich habe das Toho-Projekt mit Deep Learning aufgenommen ... ich wollte.
Deep Learning mit Shogi AI auf Mac und Google Colab
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
HIKAKIN und Max Murai mit Live-Spielvideo und Deep Learning
Vorzeichenkurvenschätzung mit selbst erstelltem Deep Learning-Modul (Python) + LSTM
Maschinelles Lernen mit Pokemon gelernt