[PYTHON] Ich habe versucht, StarGAN (1) zu implementieren.

Ich habe versucht, StarGAN unter Linux zu implementieren

Dieses Mal habe ich versucht, StarGAN zu implementieren. Grundsätzlich werden wir es basierend auf dem auf github veröffentlichten Code implementieren. Auf dieser Seite erklären und implementieren wir ein Light Paper. Ich möchte es das nächste Mal tun, wenn ich es mit meinem eigenen Datensatz anwende.

Es ist einfach, aber ich werde es anhand der beiden oben genannten Punkte erklären.

Super einfach über StarGAN

Papier: https://arxiv.org/abs/1711.09020

** StarGAN ** ist eine Art generatives Adversarial Netwok (GAN), das die Konvertierung zwischen verschiedenen Domänen ** CycleGAN ** und GAN mit mehrklassigem Klassifizierungslernen ** AC-GAN ermöglicht Es ist eine Kombination von **.

** CycleGAN ** kann nur Domänenkonvertierungen zwischen zwei Domänen durchführen. Um eine Domänenkonvertierung zwischen zwei oder mehr k Domänen zu erreichen, müssen k (k-1) Generatoren trainiert werden. Das ist praktisch möglich, aber nervig. コメント 2020-05-22 234300.png Dieses Bild stammt aus dem Papier, aber wenn k = 4 ist, bedeutet dies, dass 4 * 3 = 12 Generatoren benötigt werden.

Um ein solches Problem zu lösen, hat StarGAN einen Algorithmus eingeführt, der mehrere Domänen mit einem Generator konvertiert. コメント 2020-05-22 234328.png Wenn Sie 5 Domains haben, sehen diese wie im Bild oben aus. Es hat eine Sternform. Deshalb ist es StarGAN. Irgendwie kannst du dein Herz kitzeln.

Es gab eine höfliche Erklärung andere Artikel, also werde ich sie teilen. (Mehr kann ich nicht erklären)

Implementierung unter Linux

Öffentlicher Code https://github.com/yunjey/StarGAN

Montageumgebung

Im öffentlichen Datensatz implementiert

Klonen Sie git zunächst in ein beliebiges Verzeichnis. Wechseln Sie dann in das Verzeichnis StarGAN /. Dieses Mal werden wir den CelebA-Datensatz und den RaFD-Datensatz herunterladen, die ebenfalls in diesem Artikel verwendet wurden.

$ git clone https://github.com/yunjey/StarGAN.git
$ cd StarGAN/
$ bash download.sh celeba

Der Download ist abgeschlossen.

  .
  .
  .
  inflating: ./data/celeba/images/072137.jpg  
  inflating: ./data/celeba/images/027742.jpg  
  inflating: ./data/celeba/images/188764.jpg  
  inflating: ./data/celeba/list_attr_celeba.txt 

Dieser Datensatz namens CelebA-Datensatz ist hier ) Ist veröffentlicht.

Dieser Datensatz enthält 202.599 Promi-Gesichtsbilder mit einer Größe von 178 x 218 Pixel. Zusätzlich werden jedem Bild 40 Arten von Attributen zugewiesen. Zum Beispiel Black_Hair, Blonde_Hair, Brown_Hair, Male, Young usw. Weitere Informationen finden Sie unter hier.

コメント 2020-05-22 215619.png

Das Download-Verzeichnis enthält ein Bild wie das obige und eine txt-Datei namens "list_attr_celeba.txt" mit den Attributen für jedes Bild. Der Inhalt hier ist

[Name des Bildordners] 1 1 -1 1 -1 1 1 ... 1 -1

Es ist geworden. Es gibt 1 oder -1 für die Anzahl der Attribute (40). Wenn es 1 ist, bedeutet dies, dass es das Attribut ist, und wenn es -1 ist, bedeutet dies, dass es nicht das Attribut ist. Beachten Sie, dass dies beim Training mit Ihrem eigenen Datensatz generiert werden muss.


** Lernen **

Lassen Sie uns zunächst StarGAN mithilfe des CelebA-Datensatzes lernen.

$ python main.py --mode train --dataset CelebA --image_size 128 --c_dim 5 \
               --sample_dir stargan_celeba/samples --log_dir stargan_celeba/logs \
               --model_save_dir stargan_celeba/models --result_dir stargan_celeba/results \
               --selected_attrs Black_Hair Blond_Hair Brown_Hair Male Young

Beschreibt den Befehl. --mode: Modus --dataset: Zu verwendender Datensatz --image_size: Bildgröße --c_dim: Anzahl der Attributklassen --sample_dir: Ordner, in dem das Sample gespeichert ist --log_dir: Ordner zum Speichern von Protokollen --model_save_dir: Ordner zum Speichern des Modells --result_dir: Ordner zum Speichern der Ergebnisse --selected_attrs: Attribut, das Sie lernen möchten Es ist wie es ist.

Prüfung

Als nächstes werden wir testen.

$ python main.py --mode test --dataset CelebA --image_size 128 --c_dim 5 \
               --sample_dir stargan_celeba/samples --log_dir stargan_celeba/logs \
               --model_save_dir stargan_celeba/models --result_dir stargan_celeba/results \
               --selected_attrs Black_Hair Blond_Hair Brown_Hair Male Young

Es ist einfach zu machen.


Als nächstes wollte ich auch RaFD-Daten herunterladen, musste mich aber bewerben. Selbst wenn Sie sich bewerben können, können Sie es möglicherweise auch nicht auf dieser Seite veröffentlichen.

Für diejenigen, die Schwierigkeiten beim Lernen haben, werden wir das gelernte Netzwerk herunterladen.

$ bash download.sh pretrained-celeba-128x128

Das heruntergeladene Modell wird in . / Stargan_celeba_128 / models gespeichert. Verwenden Sie als Nächstes den folgenden Befehl, um die Bildkonvertierung mithilfe des trainierten Netzwerks durchzuführen.

$ python main.py --mode test --dataset CelebA --image_size 128 --c_dim 5 \
                 --selected_attrs Black_Hair Blond_Hair Brown_Hair Male Young \
                 --model_save_dir='stargan_celeba_128/models' \
                 --result_dir='stargan_celeba_128/results'

Es ist super einfach.

Das konvertierte Bild wird in . / Stargan_celeba_128 / results gespeichert. Damit ist eine einfache Implementierung in einem öffentlichen Dataset abgeschlossen. Das nächste Mal werde ich es auf den von mir vorbereiteten Datensatz anwenden.


Referenzmaterial

Papier: https://arxiv.org/pdf/1703.10593.pdf Github:https://github.com/yunjey/StarGAN CelebA:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html 7 Ändern! Ändern Sie Ihr Gesicht mit AI: https://qiita.com/uyuutosa/items/5dd9b2b80a9aaca67050

Recommended Posts

Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, Deep VQE zu implementieren
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht zu debuggen.
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, Pylint vorzustellen
Ich habe versucht, SparseMatrix zusammenzufassen
jupyter ich habe es berührt
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, SSD jetzt mit PyTorch zu implementieren (Dataset)
Ich habe versucht, einen automatischen Nachweis der Sequenzberechnung zu implementieren
Ich habe versucht, eine Quip-API zu erstellen
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, Pytorchs Datensatz zu erklären
Ich habe Watson Voice Authentication (Speech to Text) ausprobiert.
Ich habe Teslas API berührt
Ich habe versucht, mich über MCMC zu organisieren.
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, das grundlegende Modell des wiederkehrenden neuronalen Netzwerks zu implementieren
Ich habe versucht, die Erkennung von Anomalien durch spärliches Strukturlernen zu implementieren
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, mit Quantx einen Ausbruch (Typ der Täuschungsvermeidung) zu implementieren
[Django] Ich habe versucht, Zugriffsbeschränkungen durch Klassenvererbung zu implementieren.
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich habe versucht, Harry Potters Gruppierungshut mit CNN umzusetzen
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Ich habe versucht, das Blackjack of Trump-Spiel mit Python zu implementieren
Ich habe versucht, SSD jetzt mit PyTorch zu implementieren (Modellversion)
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht zu kratzen
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, mit Hy anzufangen
Ich habe PyQ ausprobiert
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren