Erstellen Sie mit pix2pix Linsen für Snapchat

Mein vorheriger Artikel hat fast den gleichen Titel, mit dem einzigen Unterschied, dass ich mithilfe von dlib und openCV Objektive für Snapchat algorithmisch erstellt habe. Heute möchte ich zeigen, wie Sie das Ergebnis mithilfe von maschinellem Lernen erzielen können. Dieser Ansatz ermöglicht es, den Algorithmus nicht manuell zu entwerfen, sondern das endgültige Bild direkt vom neuronalen Netzwerk zu erhalten.


Folgendes bekommen wir:



Was ist pix2pix?


Auf diese Weise können Sie ein Bild mithilfe von Konkurrenznetzwerken (im Allgemeinen als pix2pix bezeichnet) in ein Bild konvertieren.


Der Name "pix2pix" bedeutet, dass das Netzwerk darauf trainiert ist, das Eingabebild in das entsprechende Ausgabebild zu konvertieren. Hier sind Beispiele für solche Transformationen:



Das coolste Merkmal von pix2pix ist seine Vielseitigkeit . Anstatt für jede der oben genannten Aufgaben einen neuen Algorithmus oder ein neues Modell zu erstellen, reicht es aus, nur verschiedene Datensätze zum Trainieren des Netzwerks zu verwenden.


Im Gegensatz zu den früher verwendeten Ansätzen lernt pix2pix, Probleme viel schneller und mit einem kleineren Trainingssatz zu lösen. Die folgenden Ergebnisse wurden beispielsweise beim Training mit der Pascal Titan X-GPU mit einem Datensatz von 400 Bildpaaren in weniger als zwei Stunden erzielt.



Wie funktioniert pix2pix?


pix2pix verwendet zwei neuronale Netze, die gleichzeitig lernen:


  1. Generator
  2. Diskriminator

Der Generator versucht, ein Ausgabebild aus den eingegebenen Trainingsdaten zu erzeugen, und der Diskriminator versucht zu bestimmen, ob das Ergebnis real ist oder erzeugt wird.


Wenn der Generator Bilder erzeugt, die nicht von den realen zu unterscheiden sind (Diskriminator), beginnen wir, den Diskriminator auf sie und die realen Bilder zu trainieren. Wenn es dem Diskriminator gelingt, echte Bilder von den erzeugten zu unterscheiden, beginnen wir erneut, den Generator so zu trainieren, dass er wieder lernt, den Diskriminator zu täuschen.


Ein solches „Wettrüsten“ führt dazu, dass es für eine Person schwierig wird, echte Bilder von generierten zu unterscheiden.


Übe


Wir werden unseren Filtergenerator für Snapchat mit 256x256 Bildern trainieren (für große Formate wird mehr Videospeicher benötigt). Verwenden Sie zum Erstellen eines Datensatzes den Code aus dem vorherigen Lernprogramm .


Ich habe viele Gesichtsbilder heruntergeladen und auf jedes einen „Thug Life Glasses“ -Filter angewendet. Es wird sich so etwas wie diese Paare ergeben:



Um das Modell zu erstellen, verwenden Sie das auf TensorFlow basierende pix2pix- Repository . Klonen Sie es und installieren Sie Tensorflow.


Der Befehl zum Starten des Trainings lautet wie folgt:


python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB 

Der Parameter which_direction legt die Trainingsrichtung fest. AtoB bedeutet, dass wir Bild A (links, ohne Brille) in Bild B (rechts, mit Brille) umwandeln möchten. Beachte übrigens, dass pix2pix erfolgreich lernen kann, wie man das Originalbild aus einem Bild mit einem Filter wiederherstellt. Ändere einfach die Trainingsrichtung.


Sie können den Trainingsfortschritt mit Tensorboard überwachen, für das Sie den Befehl ausführen müssen:


 tensorboard --logdir=dir_to_save_checkpoint 

Sobald Sie feststellen, dass die Ergebnisse der Trainingsdaten recht gut sind, können Sie das Training beenden und das Modell mit beliebigen Daten testen. Sie können das Training ab dem letzten Kontrollpunkt wie folgt fortsetzen:


 python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB --checkpoint dir_of_saved_checkpoint 

Fazit


Das Aufkommen von generativen Netzwerken vom Typ pix2pix eröffnet große Perspektiven für eine universelle und einfache Lösung für alle Arten von Bildverarbeitungsaufgaben.



Source: https://habr.com/ru/post/de483310/


All Articles