Kennst du dieses Symbol?
Ja, es ist das Symbol des berühmten Melville . Es ist bekannt, dass es viele Menschen gibt, die Melville ihre Lieblingsfiguren zeichnen und als Twitter-Samune verwenden lassen und große Unterstützung erhalten haben. Das von dieser Person gezeichnete Symbol wird aufgrund seines einzigartigen Stils oft als "Mel-Symbol" bezeichnet. Beispiel eines typischen Mel-Symbols
(Jeweils von Yukatayu und Shun (Stand 19. Februar 2020))
Ich möchte auch eine Ikone wie diese! !! !! !! !! !! Also habe ich durch maschinelles Lernen einen Mel-Icon-Generator erstellt. In diesem Artikel möchte ich kurz die dafür verwendete Methode vorstellen.
Für die Generierung verwenden wir eine Methode namens GAN (Generative Adversarial Networks).
Diese Technik kombiniert zwei Dinge: ein neuronales Netzwerk (Generator), das Bilder erzeugt, und ein neuronales Netzwerk (Discriminator), das identifiziert, ob die Eingabedaten ein Mel-Symbol sind oder nicht. Der Generator versucht, ein Bild zu erzeugen, das einem Mel-Symbol so weit wie möglich ähnelt, um den Diskriminator zu täuschen, und der Diskriminator lernt, das Bild genauer zu identifizieren. Während sich die beiden neuronalen Netze gegenseitig trainieren, kann der Generator Bilder erzeugen, die sich in der Nähe des Mel-Symbols befinden.
Damit der Generator Bilder erzeugen kann, die wie Mel-Symbole aussehen, und der Diskriminator erkennen kann, ob das Eingabebild ein Mel-Symbol ist, bringen Sie dem Lehrer so viele echte Mel-Symbole wie möglich. Sie müssen ein Dataset erstellen, das die Daten enthält, und es für das Training verwenden. Also ging ich auf Twitter herum, fand das Mel-Symbol Samune, speicherte es wiederholt und bekam mehr als 100 Blätter. Verwenden Sie dies zum Lernen.
Lassen Sie den Generator auf das zuvor vorbereitete Mel-Symbol schauen und lernen Sie, ein Bild zu generieren, das so aussieht. Das zu erzeugende Bild ist 64 x 64 Pixel groß und die Farbe beträgt RGB 3 Kanäle. Wenn der Generator jedes Mal ähnliche Daten generiert, läuft das Lernen nicht gut ab. Daher ist es erforderlich, so viele Arten von Bildern wie möglich zu generieren. Geben Sie daher eine Zahlenfolge aus Zufallszahlen zur Bilderzeugung in den Generator ein. Für diese Zahlenfolge wird ein später beschriebener Prozess, der als "Translokationsfaltung" bezeichnet wird, auf jede Faltungsschicht angewendet, um sie allmählich einem Bild mit 3 Kanälen mit 64 × 64 Pixeln und RGB näher zu bringen.
Für eine normale Faltung, wie unten gezeigt, wird das Summenprodukt genommen und ausgegeben, während der Kernel verschoben wird. In pytorch kann es beispielsweise mit torch.nn.Conv2d implementiert werden.
Quelle QuelleAndererseits wird bei der diesmal verwendeten Translokationsfaltung das Produkt mit dem Kern für jedes Element berechnet und die Summe der erhaltenen Ergebnisse genommen. Als Bild fühlt es sich an, als würde man das Zielelement erweitern. In pytorch kann es beispielsweise mit torch.nn.ConvTranspose2d implementiert werden.
QuelleDiese Translokationsfaltungsschicht und die Selbstaufmerksamkeitsschicht (später beschrieben) überlappen sich, und die Anzahl der Ausgangskanäle in der letzten Schicht beträgt 3. (Entspricht jeweils rgb) Aus dem obigen Inhalt ergibt sich der Umriss des Generators, den Sie erstellen möchten, wie in der folgenden Abbildung dargestellt.
Dieser Generator verfügt über insgesamt 5 Translokationsfaltungsschichten, wobei eine Schicht namens Selbstaufmerksamkeit zwischen der 3. und 4. Schicht sowie zwischen der 4. und 5. Schicht liegt. Durch gleichzeitiges Betrachten von Pixeln mit ähnlichen Werten ist es möglich, das gesamte Bild mit relativ geringem Rechenaufwand auszuwerten.
Der auf diese Weise konfigurierte Generator gibt beispielsweise ein solches Bild aus, wenn es sich in einem verlernten Zustand befindet. (Das Ergebnis hängt von der Anzahl der eingegebenen Zufallszahlen ab.) Da es noch nicht gelernt wurde, kann nur so etwas wie Rauschen ausgegeben werden. Indem Sie sich jedoch gegenseitig mit dem neuronalen Netzwerk (Discriminator) trainieren, das identifiziert, ob die Eingabedaten ein Mel-Symbol sind oder nicht, was als nächstes erläutert wird, ist es möglich, ein solches Bild auszugeben.
Bitten Sie den Diskriminator, sich das vom Generator oben erzeugte Bild anzusehen, um festzustellen, ob es sich um ein Mel-Symbol handelt. Der Punkt ist, eine Bilderkennung zu machen. Das Eingabebild ist 64 x 64 Pixel groß, die Farbe ist RGB 3 Kanäle und die Ausgabe ist ein Wert (Bereich 0 bis 1), der angibt, wie sehr es wie ein Mel-Symbol aussieht. Als Zusammensetzung werden fünf gewöhnliche Faltschichten gestapelt, und eine Selbstaufmerksamkeitsschicht ist zwischen der dritten und vierten Schicht und zwischen der vierten und fünften Schicht angeordnet. Die Figur ist wie folgt.
Die Lernmethoden für Diskriminator und Generator sind wie unten beschrieben.
Wenn ein Bild eingegeben wird, gibt Discriminator eine Zahl von 0 bis 1 zurück, die angibt, wie sehr es wie ein Mel-Symbol aussieht. Geben Sie zuerst das tatsächliche Mel-Symbol ein und setzen Sie die Ausgabe (Wert von 0 bis 1) zu diesem Zeitpunkt auf $ d_ {real} $. Geben Sie als nächstes eine Zufallszahl in den Generator ein und lassen Sie ihn ein Bild erzeugen. Wenn dieses Bild in Discriminator eingegeben wird, wird auch ein Wert von 0 bis 1 zurückgegeben. Nennen wir das $ d_ {fake} $. Geben Sie die $ d_ {real} $ und $ d_ {fake} $, die auf diese Weise ausgegeben werden, in die unten beschriebene Verlustfunktion ein, um den für die Fehlerausbreitung verwendeten Wert zu erhalten.
Eine der Methoden von GAN, SAGANs "Scharnierversion des gegnerischen Verlusts", verwendet die unten beschriebene Verlustfunktion. Einfach ausgedrückt, setzt diese Funktion $ l_ {i} $ und $ l_ {i} ^ {\ prime} $ in die richtige Bezeichnung, $ y_ {i} $ und $ y_ {i} ^ {\ prime} $ vom Diskriminator. Wenn der Ausgabewert $ M $ die Anzahl der Daten pro Mini-Batch ist
-\frac{1}{M}\sum_{i=1}^{M}(l_{i}min(0,-1+y_{i})+(1-l_{i}^{\prime})min(0,-1-y_{i}^{\prime}))
Wird ausgedrückt als. [^ 1] Diesmal $ y_ {i} = d_ {real} $, $ y_ {i} ^ {\ prime} = d_ {fake} $, $ l_ {i} = 1 $ (entspricht 100% Mel-Symbol) , $ L_ {i} ^ {\ prime} = 0 $ (zeigt an, dass es sich nicht um ein absolutes Mel-Symbol handelt)
-\frac{1}{M}\sum_{i=1}^{M}(min(0,-1+d_{real})+min(0,-1-d_{fake}))
Wird besorgt. Dies ist die Verlustfunktion des diesmal verwendeten Diskriminators. Adam wurde als Optimierungsmethode für die Fehlerausbreitung verwendet, und die Lernrate wurde auf 0,0004 eingestellt, und Adams primäres Moment und sekundäres Moment (exponentielle Dämpfungsrate, die für die Momentschätzung verwendet wurde) wurden auf 0,0 bzw. 0,9 eingestellt.
Wenn eine Folge von Zahlen aus Zufallszahlen eingegeben wird, generiert der Generator ein Bild, während versucht wird, es so weit wie möglich wie ein Mel-Symbol aussehen zu lassen. Geben Sie zunächst die aus Zufallszahlen bestehende Zahlenfolge $ z_ {i} $ in den Generator ein, um ein Bild zu erhalten. Geben Sie es in Discriminator ein und geben Sie einen Wert aus, der angibt, wie sehr es wie ein Mel-Symbol aussieht. Nennen wir das $ r_ {i} $.
In SAGANs "Scharnierversion des gegnerischen Verlusts" ist die Verlustfunktion des Generators wie folgt definiert:
-\frac{1}{M}\sum_{i=1}^{M}r_{i}
Es scheint, dass SAGAN empirisch funktioniert, wenn es wie folgt definiert wird. [^ 1] In Anbetracht der Tatsache, dass $ M $ die Anzahl der Daten pro Mini-Batch ist, wird das Beurteilungsergebnis von Discriminator so verwendet, wie es ist. Ich war ein wenig überrascht, aber wie wäre es damit? Adam wurde als Optimierungsmethode für die Fehlerausbreitung verwendet, und die Lernrate wurde auf 0,0001 eingestellt, und Adams primäres und sekundäres Moment wurden auf 0,0 bzw. 0,9 eingestellt. (Wie Diskriminator, außer Lernrate)
Das oben eingeführte Bild wird erneut gedruckt, aber der zuvor erstellte Generator und der Diskriminator werden auf diese Weise zu einem GAN kombiniert.
Lernen Sie die Verwendung der gesammelten echten Mel-Symbole und lassen Sie den Generator Mel-Symbole generieren. Stellen Sie die Anzahl der Daten $ M $ pro Mini-Batch auf 5 ein. Das Ergebnis ist wie folgt. __groß! !! !! !! !! !! !! !! !! !! !! __ __ __ Beeindruckt! !! !! !! !! !! !! !! !! !! !! __ __ Zum Vergleich wird oben ein Beispiel für Eingabedaten und unten das tatsächlich erzeugte Bild angezeigt. Außerdem ändert sich das generierte Ergebnis bei jeder Ausführung. Persönlich war ich ziemlich überrascht, dies mit Quellcode tun zu können, der nicht so lang ist. GAN ist wirklich toll! !! !! !! !! !! !! !!
Ich habe etwas gemacht, das so etwas Großartiges kann, aber es gibt noch einige Punkte, die noch nicht gelöst wurden.
Der Code, den ich geschrieben habe, befindet sich in diesem Repository. https://github.com/zassou65535/image_generator
GAN ist eine wahnsinnig gute Technik. Trotz des Moduseinbruchs konnten wir mit nur fast 100 Datensätzen etwas ganz in der Nähe des Mel-Symbols erstellen. Lassen Sie uns auch mit GAN ein beeindruckendes Bild erzeugen.
Wenn Sie einfach alle von Ihnen gesammelten Mel-Symbole mitteln, sehen Sie das folgende Bild.
[^ 1]: Lernen Sie während der Entwicklung von PyTorch Tiefes Lernen