Wir haben kürzlich ein [Python-Modul kawaii-gen] veröffentlicht (https://github.com/xiong-jie-y/kawaii_girl_generator), das niedliche Idol-Gesichtsbilder erzeugt. In diesem Artikel werde ich das in diesem Modul verwendete Stylegan-Modell und die zum Erstellen eines Datasets für Stylegan implementierte Datenpipeline erläutern.
stylegan ist ein GAN, das eine Auflösung von 1024 x 1024 Pixel und fotoähnliche Bilder erzeugen kann und eine hohe lineare Trennbarkeit und Komplementarität im verborgenen variablen Raum aufweist. Dieses Mal habe ich StyleGAN verwendet und es mit 256 x 256 und einer Superauflösung von 512 x 512 ausprobiert.
In Bezug auf die Datenpipeline benötigt stylegan eine große Anzahl von Bildern, da der FFHQ-Datensatz 70.000 Bilder umfasst. Daher haben wir die Idee des aktiven Lernens verwendet, um die Anzahl der manuellen Anmerkungen und etwas mehr als 2000 Bilder zu reduzieren. Ich habe es möglich gemacht, automatisch nur das weibliche Gesicht mit der Anmerkung von herauszunehmen.
StyleGAN ist ein GAN mit den folgenden Funktionen.
Komplementäre Leistung ist eine Eigenschaft, bei der ähnliche Dinge im verborgenen variablen Raum nahe beieinander platziert werden. Bei Gesichtsbildern werden sie in der Reihenfolge eines Lächelns oder einer Brille ausgerichtet. Das Gesichtsbild, an dem es hängt, ist wie eine räumliche Nähe.
Eine bessere Entflechtung ist die Fähigkeit, einen Raum zu schaffen, in dem die Achsen nahezu unabhängig sind. Die Beziehung zwischen einem solchen Raum und einem Raum nahe der linearen Trennung, aber sinnvollerweise ist es einfacher, Klassifizierungslogik usw. unter Verwendung unabhängiger Merkmalsgrößen zu erstellen, sodass ein Raum mit unabhängigen Achsen (= Merkmalsgrößen sind unabhängig) Scheint eine bessere lineare Trennung zu haben.
In StyleGAN ist Z kein Raum, der leicht linear zu trennen ist (Abb. 2), aber das Netzwerk, das Z in W in der Architektur konvertiert (Abb. 1), konvertiert Z in einen Raum, der leicht linear zu trennen ist.
Fig.1
Fig.2
Ich habe den Code von stylegans Official Repository fast so verwendet, wie er ist. Es gibt Skripte, die verschiedene Datensätze in das TFRecords-Format konvertieren, und Lernskripte, mit denen Sie Optionen einfach ändern können. Ich schreibe alle Optionen in Pythons Dictionaryu,
Es war einfacher zu ändern als ich erwartet hatte, als Argumente mit Argparse hinzuzufügen.
Weitere Informationen finden Sie in der offiziellen README-Datei. Verwenden Sie jedoch einfach den Befehl dataset_tool.py create_from_images
, um ein Dataset im Tfrecord-Format zu erstellen, das das Trainingsskript train.py
akzeptiert, und spielen Sie dann mit den Argumenten von train.py
, um es auszuführen. ..
Die Datenfluss- und Verarbeitungskomponenten sind in der obigen Abbildung dargestellt. Zu Beginn des Prozesses sammelt ein universeller, ortsspezifischer Crawler Gesichtsbilder. Danach wird das Gesicht aus dem Bild erkannt, das männliche Gesicht wird entfernt, verschiedene Okklusionen werden entfernt und dann Die Ausrichtungsverarbeitung wird durchgeführt, um die Positionen der Augen und Blumen auszurichten, und die Ausrichtung wird entfernt. Das ausgerichtete Bild wird im Trainingsdatensatz gespeichert.
Diesmal habe ich den cnn-Algorithmus von dlib verwendet. Dieser Gesichtserkennungsalgorithmus verwendet cnn, um zu bestimmen, ob das Innere des Schiebefensters ein Gesicht ist. Dlib bietet auch Hog-Funktionen und einen Algorithmus, der svm zur Unterscheidung verwendet, und Hog, das nur das Frontbild aufnehmen kann, ist möglicherweise am besten geeignet, wenn die Erzeugung von Gesichtsbildern gestartet wird.
Eine andere Methode besteht darin, ein Modell wie SSD oder Retina-Netz zu verwenden. Mit EndToEnd kann die Batch-Ausführung auf einer GPU möglicherweise beschleunigt werden. Die dlib cnn ist auch implementierungsoptimiert, was ziemlich schnell ist.
Normalisieren Sie die Trainingsdaten, um die Trainingsbelastung von StyleGAN zu verringern. Durch Ausrichten der Position und Richtung von Augen und Nase werden Abweichungen reduziert.
Ich habe die StyleGAN-Ausrichtung fast so verwendet, wie sie ist. Erstellen Sie das Rechteck neu und korrigieren Sie die Richtung basierend auf den Positionen der Orientierungspunkte auf den Augen und der Nase des Gesichtsbilds. Beim Drehen oder Bewegen erzeugte Leerzeichen sind weiß gepolstert, aber diejenigen mit einem zu großen Auffüllbereich werden entfernt. Dies liegt daran, dass einige Haare und das Gesicht möglicherweise zu stark entfernt werden.
Für die Erkennung von Orientierungspunkten habe ich das Occlusion Compatible Landmark Detection Module verwendet.
Ursprünglich wollte ich einen Idol-Gesichtsklassifikator erstellen, also habe ich ungefähr 2000 Gesichtsbilder kommentiert. Wir haben Gesichtsmerkmale mit dlib extrahiert, sie im Gesichtsmerkmalsbereich gruppiert, ähnliche sofort gekennzeichnet und dann diejenigen mit niedrigen Konfidenzwerten gekennzeichnet.
Es gab einige Bilder mit Mikrofonen, Händen, Buchstaben, Essen usw. auf meinem Gesicht, also machte ich eine Funktion, um sie zu erkennen. Wir haben auch eine Funktion erstellt, um andere als das nach vorne gerichtete Gesicht zu filtern. Da die Verarbeitung von Hunderttausenden von Bildern lange dauert, ist diese Funktion deaktiviert, da keine Aussicht auf eine Erhöhung der Anzahl der GPUs besteht. Es gibt jedoch einige Bilder, in denen mysteriöse Objekte schwach im Gesicht zu sehen sind, und ich denke, dass die Unterstützung der Okklusion wesentlich ist, um sie zu beseitigen.
Recommended Posts