[PYTHON] So ändern Sie das generierte Bild von GAN in ein qualitativ hochwertiges Bild nach Ihren Wünschen

1. Zuallererst

Normalerweise ist das vom ** trainierten GAN-Modell generierte Bild ** eine Mischung aus ** Lieblingsbildern, unbeliebten Bildern und fehlerhaften Bildern ** und kann nicht so angezeigt werden, wie es ist. ** Daher werde ich dieses Mal vorstellen, wie Sie das generierte Bild von GAN ** einfach in ein qualitativ hochwertiges Bild nach Ihren Wünschen ändern können **.

Das diesmal verwendete trainierte GAN-Modell ist ** TF-Hub Progressive GAN **. Der Code wurde mit ** Goole colab ** erstellt und auf ** Github ** veröffentlicht (** Link hier **). )) Also, wenn Sie möchten, spielen Sie bitte damit, während Sie etwas trinken.

2. Wie machst du das?

Das trainierte GAN-Modell kann nicht geändert werden, da ** der Eingabevektor und das Ausgabebild bereits eins zu eins bestimmt sind **. Was sollen wir dann tun? Ändern Sie den Eingabevektor.

Wenn ein zufälliger Vektor in das GAN-Modell eingegeben und ein Bild erzeugt wird, wenn ein ** gebrochenes Bild oder ein Bild vorliegt, das Sie nicht mögen **, wird der entsprechende Vektor im ** Minusvektor ** und ** Ihrer Präferenz akkumuliert. Wenn ein Bild ** von vorhanden ist, wird der entsprechende Vektor in ** plus Vektor ** gespeichert.

Dann ist der nächste Vektor, der in das GAN-Modell eingegeben wird, ** Zufallsvektor + Mittelwert plus Plusvektor-Mittelwert minus Minusvektor **. Wenn Sie dies auf mysteriöse Weise wiederholen, wird das erzeugte Bild von GAN ** in ein qualitativ hochwertiges Bild nach Ihren Wünschen umgewandelt **.

3. Implementieren

Installieren und importieren Sie zunächst die Bibliothek, definieren Sie Funktionen und laden Sie das Modell herunter. Siehe Google Colab für Details.

Initialisieren Sie es zuerst.

#Initialisierung des Lernens
tf.random.set_seed(80)  
vectors = tf.zeros([5,512])
plus_vector = tf.zeros([1,512])
minus_vector = tf.zeros([1,512])

Da die ** Formularfunktion ** von Google Colab verwendet wird, kann der Code im Ausgangszustand nicht angezeigt werden. Sie können den Code jedoch anzeigen, indem Sie auf die Benutzeroberfläche klicken. Der Ausgangszustand ist einfacher zu bedienen.

#@title please, you change the selected action if you need. 
vec_0 = 'nothing' #@param ['plus', 'nothing', 'minus']
vec_1 = 'nothing' #@param ['plus', 'nothing', 'minus']
vec_2 = 'nothing' #@param ['plus', 'nothing', 'minus']
vec_3 = 'nothing' #@param ['plus', 'nothing', 'minus']
vec_4 = 'nothing' #@param ['plus', 'nothing', 'minus']
vec = [vec_0, vec_1, vec_2, vec_3, vec_4]

for i in range(len(vectors)):
    if vec[i] == 'plus':
      plus_vector = tf.concat([plus_vector, tf.reshape(vectors[i],[1,512])],axis=0)

    if vec[i] == 'minus':
      minus_vector = tf.concat([minus_vector, tf.reshape(vectors[i],[1,512])], axis=0)

print('number of plus_vector = ', len(plus_vector)-1)
print('number of minus_vector = ', len(minus_vector)-1)

plus_vector_mean = tf.reduce_mean(plus_vector, axis=0) # plus_Nehmen Sie den Durchschnitt des Vektors
minus_vector_mean = tf.reduce_mean(minus_vector, axis=0)  # minus_Nehmen Sie den Durchschnitt des Vektors

vectors = tf.random.normal([5, 512])  #Zufällige Vektorerfassung
vectors = vectors + plus_vector_mean - minus_vector_mean  #Vektorkorrektur
display_images(vectors)

Aufgrund der ** Formularfunktion ** enthalten die Variablen ** vec_0 bis vec_4 ** die in der Benutzeroberfläche ausgewählte Zeichenfolge ** ('plus', 'nichts', 'minus'). Wenn die Zeichenfolge ** 'plus' ** ist, wird der entsprechende Vektor in ** plus_vector ** gespeichert, und wenn es ** 'minus' ** ist, wird der entsprechende Vektor in ** minus_vector ** gespeichert. Jetzt müssen Sie nur noch den Durchschnitt mit tf.reduce_mean () nehmen und den Zufallsvektor addieren oder subtrahieren.

** Wenn Sie den Code zum ersten Mal ausführen, ohne Einstellungen zu ändern **. ** Schauen Sie sich ab dem zweiten Mal ** die generierten 5 Bilder an und entscheiden Sie nach eigenem Ermessen **, ob Sie sie in den Minusvektor ** (Minus), ** ob Sie sie in den Plusvektor setzen ** (Plus), ** was Entscheide, ob es ** (nichts) gibt, ** ändere die Einstellungen ** und führe dann ** den Code aus **. Wiederholen Sie dies viele Male.

スクリーンショット 2020-06-23 18.29.57.png

Was angezeigt wird, ist das Ergebnis von etwa einem Dutzend Versuchen. Die Benutzeroberfläche wird im Ausgangszustand ausgeführt. Dies ist das Ergebnis der Auswahl von 5 Plusvektoren (weiblich Ihrer Wahl) und 8 Minusvektoren (gebrochenes Bild). Natürlich gibt es nur Frauen, die es mögen (lacht).

Recommended Posts

So ändern Sie das generierte Bild von GAN in ein qualitativ hochwertiges Bild nach Ihren Wünschen
[Los] Erstellen Sie einen CLI-Befehl, um die Erweiterung des Bildes zu ändern
So berechnen Sie die Volatilität einer Marke
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
[Ubuntu] So löschen Sie den gesamten Inhalt des Verzeichnisses
[Python] Ändern Sie den Namen der Bilddatei in eine Seriennummer
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
So bestimmen Sie die Existenz eines Selenelements in Python
So ändern Sie die Protokollstufe von Azure SDK für Python
So ändern Sie die Farbe nur der mit Tkinter gedrückten Taste
So überprüfen Sie die Speichergröße einer Variablen in Python
Erstellen Sie das Thema von Pythonista 3 wie Monokai (wie Sie Ihr eigenes Thema erstellen)
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Ich habe zusammengefasst, wie die Boot-Parameter von GRUB und GRUB2 geändert werden
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
[EC2] So machen Sie mit Selen eine Bildschirmaufnahme Ihres Smartphones
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
So spielen Sie ein Video ab, während Sie die Anzahl der Bilder ansehen (Mac)
Skript zum Ändern der Beschreibung von Fasta
So überprüfen Sie die Version von Django
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Wie man eine Benutzergruppe mit Slack-Benachrichtigung erwähnt, wie man die ID einer Benutzergruppe überprüft
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
[NNabla] So erhalten Sie die Ausgabe (Variable) der mittleren Schicht des erstellten Netzwerks
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
[Python] So sortieren Sie nach dem N-ten M-ten Element eines mehrdimensionalen Arrays
Ein Memorandum zur Ausführung des Befehls! Sudo magic in Jupyter Notebook
[Numpy, scipy] Wie berechnet man die Quadratwurzel einer Elmeet-Matrix mit halbregelmäßigem Wert?
Ändern Sie den Datenrahmen der Pandas-Kaufdaten (ID x Produkt) in ein Wörterbuch
So ändern Sie das Erscheinungsbild nicht ausgewählter Fremdschlüsselfelder in Djangos Modellformular
So erstellen Sie einen Raspberry Pi, der die Tweets eines bestimmten Benutzers spricht
Die Geschichte eines hochrangigen Technikers, der versucht, das Überleben der Titanic vorherzusagen
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
So finden Sie den Bereich des Boronoi-Diagramms
So codieren Sie eine Drohne mithilfe der Bilderkennung
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ändern Sie den Dezimalpunkt der Protokollierung von, nach.
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
[Ruby] Wie ersetze ich nur einen Teil der Zeichenkette, der mit dem regulären Ausdruck übereinstimmt?
Die weltweit am einfachsten zu verstehende Erklärung zur Herstellung von LINE BOT (1) [Kontoerstellung]
[NNabla] So fügen Sie eine neue Ebene zwischen den mittleren Ebenen eines vorgefertigten Netzwerks hinzu
Ein Memo darüber, wie man das schwierige Problem der Erfassung von FX mit AI überwinden kann
So finden Sie das erste Element, das den Kriterien in der Python-Liste entspricht
Lesen Sie die Python-Markdown-Quelle: So erstellen Sie einen Parser
Wie man die Portnummer des xinetd-Dienstes kennt
Hinweise zur Verwendung von AIST Spacon ABCI
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Die Entscheidung von scikit-learn Wie man ein Holzmodell visualisiert