[PYTHON] Die Geschichte der Herstellung des Mel Icon Generator Version 2

Einführung

Die von Melville gezeichnete Ikone "Mel Icon" erfreut sich aufgrund ihres einzigartigen Stils bei vielen Menschen zunehmender Beliebtheit. Oben ist das Symbol von Melville . Insbesondere ist bekannt, dass es viele Personen gibt, die diese Person bitten, ein Symbol zu erstellen und es als Twitter-Symbol zu verwenden. Beispiel eines typischen Mel-Symbols

(Von links nach rechts Yukatayu , Shun Shun , kaage (Stand 5. August 2020))

Ich möchte auch ein Mel-Symbol wie dieses! !! !! !! !! !! Deshalb habe ich den Mel Icon Generator durch maschinelles Lernen implementiert! !! !! !! !! ....... ist eine grobe Übersicht über die früheren Arbeiten . Dieses Mal haben wir den Algorithmus gründlich überprüft, um viele Punkte zu verbessern, und den Mel Icon-Generator stark weiterentwickelt. In diesem Artikel werde ich die dafür verwendete Methode vorstellen.

Was ist GAN?

Eine Methode namens GAN (Generative Adversarial Networks) wird verwendet, um Bilder zu generieren.

is20tech001zu004-1.jpg Abbildung Zitat Original

Diese Methode kombiniert zwei Dinge: ein neuronales Netzwerk, das Bilder erzeugt (Generator) und ein neuronales Netzwerk (Discriminator), das identifiziert, ob die Eingabedaten ein Mel-Symbol sind oder nicht. Der Generator versucht, ein Bild zu erzeugen, das so weit wie möglich einem Mel-Symbol ähnelt, um den Diskriminator zu täuschen. Der Diskriminator lernt, Bilder genauer zu identifizieren, um sich nicht täuschen zu lassen. Während sich die beiden neuronalen Netze gegenseitig trainieren, kann der Generator Bilder erzeugen, die sich in der Nähe des Mel-Symbols befinden. Kurz gesagt, es ist Generator VS Discriminator.

Progressive GAN Es gibt verschiedene Arten von Methoden, auch wenn sie als GAN bezeichnet werden. Dieses Mal verwende ich einen von ihnen, ** Progressive GAN **. Zum Beispiel wird zuerst die Anzahl der Lernvorgänge durchgeführt, bei denen es sich um eine Faltungsschicht handelt, die einer niedrigen Auflösung von 4 × 4 entspricht, dann wird die Faltungsschicht, die 8 × 8 entspricht, zum Lernen hinzugefügt, und dann wird 16 × 16 hinzugefügt. Auf diese Weise können Sie mit dem Lernen fortfahren und gleichzeitig die Auflösung schrittweise erhöhen.

Zu Beginn des Lernens ist der Generator bereit, Bilder mit 4x4-Auflösung wie gezeigt auszugeben. Discriminator nimmt auch ein Bild mit einer Auflösung von 4x4 als Eingabe und gibt einen Wert aus, der angibt, wie sehr es wie ein Mel-Symbol aussieht.

Der Generator generiert ein Bild, und der Diskriminator wird mit zwei Typen eingegeben: einem generierten Bild und einem realen Bild (ein Mel-Symbol für Trainingsdaten).

Nachdem wir bis zu einem gewissen Grad mit einer Auflösung von 4x4 gelernt haben, werden wir eine Faltungsschicht hinzufügen, die 8x8 entspricht, und weiter lernen.

Wenn 8x8 fertig ist, fügen Sie 16x16 usw. hinzu, und schließlich wird die Struktur so aussehen. Dieses Mal war das Ziel, ein 256x256-Bild auszugeben.

GAN hat die Schwäche, dass das Lernen instabil ist, wenn versucht wird, Bilder mit relativ hoher Auflösung zu lernen. Progressive GAN kann dies jedoch überwinden, indem zunächst die allgemeinen Eigenschaften des Bildes betrachtet und dann schrittweise auf die kleinen und komplexen Teile konzentriert werden.

Datensatzvorbereitung

Damit der Generator Mel-Icon-ähnliche Bilder erzeugen kann und der Discriminator erkennen kann, ob das Eingabebild ein Mel-Icon ist, bringen Sie so viele echte Mel-Icons wie möglich mit. Es ist erforderlich, einen Datensatz zu erstellen, der Lehrerdaten enthält, und ihn für das Training zu verwenden. Diesmal stellte Herr Melville alle bisher erstellten Mel-Symbole zur Verfügung. Diese Nummer ist 751. (Überwältigend ..... Danke .... !!!!!!) Von hier aus werde ich nach einem Mel-Symbol suchen, das zum Lernen verwendet werden kann. Dieses Mal habe ich Mel Icon, das zu unregelmäßig ist, vom Lernen ausgeschlossen. Speziell

Es ist so. Darüber hinaus gab es einige Symbole, die fast gleich waren, sich jedoch in der Haarlänge geringfügig unterschieden. In Anbetracht der Auswirkungen auf das gesamte Lernen haben wir dem Datensatz bis zu 4 ähnliche Mel-Symbole hinzugefügt und sie ausgeschlossen, wenn 5 oder mehr vorhanden waren.

Die Anzahl der Datensätze, die auf diese Weise verwendet werden könnten, beträgt ungefähr 640. Wenn man bedenkt, dass das letzte Mal höchstens 100 Blatt waren, hat sich die Menge, die verwendet werden kann, mehr als sechsmal erhöht. Diese werden als Trainingsdaten verwendet.

Generator erstellen

Die Rolle des Generators besteht darin, eine Folge von Zufallszahlen (die wir als Rauschen bezeichnen) als Eingabe zu verwenden und darauf basierend ein mel-symbolähnliches Bild zu erzeugen. Wenn Sie das generierte Mel-Symbol in Discriminator eingeben, lernen Sie, es als echtes Mel-Symbol zu täuschen. Grundsätzlich erzeugt der Generator ein Bild, indem er das Eingangsrauschen wiederholt faltet.

Im Ausgangszustand sind die neuronalen Netze, aus denen der Generator besteht, wie in der folgenden Abbildung dargestellt.

Es ist ein Bild, in dem Daten aus der obersten Ebene eingegeben, verarbeitet, nacheinander an die unterste Ebene übergeben und Daten aus der untersten Ebene abgerufen werden.

Die obere Faltungsschicht empfängt den in den Generator eingegebenen Rausch (die Größe des Rauschens beträgt 512 Kanäle und 4x4-Auflösung), verarbeitet die Faltung und gibt Daten mit 256 Kanälen und 4x4-Auflösung aus. Machen. Die Daten werden an die nächste Faltungsschicht usw. weitergeleitet, und die letzte Schicht gibt ein Bild mit 3 Kanälen und einer Auflösung von 4 × 4 aus. Die Anzahl der Ausgangskanäle 3 in der letzten Schicht entspricht jeweils (R, G, B), und 4x4 ist die Auflösung des vom Generator ausgegebenen Bildes.

Während wir diese Ebenen lernen, werden wir nach und nach Ebenen "einführen", die der nächsten Auflösung "8x8" entsprechen. ("Einführung Stück für Stück" wird später beschrieben.) Wir streben die folgenden Zustände an, indem wir "Stück für Stück einführen".

Hier ist eine Schicht namens Upsample zwischen der 4x4-Schicht und der 8x8-Schicht angeordnet. Wenn Daten mit einer Auflösung von 4x4 eingegeben werden, konvertiert diese Ebene sie in eine Auflösung von 8x8 und gibt sie aus. Dies wird erreicht, indem die Zwischenwerte jedes Pixels gut ergänzt werden. Auf diese Weise können Sie die Daten zwischen den Ebenen 4x4 und 8x8 überbrücken.

"Nach und nach eingeführt"

Es ist bekannt, dass sich das plötzliche Einführen einer neuen Ebene negativ auf das Lernen auswirkt. Daher wird Progressive GAN nach und nach Ebenen "einführen".

Wenn Sie beispielsweise eine 8x8-Ebene nach einer 4x4-Ebene hinzufügen, wird die Ausgabe der 4x4-Ebene mit (1-α) multipliziert und die Ausgabe der 8x8-Ebene Holen Sie sich das Produkt von α. Fügen Sie als Nächstes diese beiden hinzu, um ein Ausgabebild zu erstellen. Setzen Sie den Wert von α zu Beginn auf 0 und nähern Sie sich 1 an, wenn die Anzahl der Lernvorgänge zunimmt.

Wenn α 0 ist, ist das neuronale Netz des Generators das gleiche wie unten.

Wenn α 1 ist, ist das neuronale Netz des Generators das gleiche wie unten.

Durch allmähliches Annähern an den Zustand, in dem α 0 ist, bis zum Zustand von 1 wird es möglich, durch allmähliches Mischen von Schichten mit hoher Auflösung zu lernen, anstatt plötzlich mit dem Lernen mit hoher Auflösung zu beginnen.

Wir werden dies für den Übergang von 8x8 zu 16x16, den Übergang von 16x16 zu 32x32 usw. verwenden. Letztendlich werden wir mit dem Ziel studieren, ein Netzwerk zu schaffen, das die folgenden 3-Kanal-Mel-Symbole mit einer Auflösung von 256 x 256 und (R, G, B) erzeugen kann.

Diskriminator erstellen

Die Rolle von Discriminator besteht darin, Bilddaten als Eingabe zu verwenden und festzustellen, ob es sich um ein echtes Mel-Symbol handelt. Sie werden lernen, die Genauigkeit zu verbessern, damit Sie sich nicht vom Generator täuschen lassen.

Im Ausgangszustand sind die neuronalen Netze, aus denen der Diskriminator besteht, wie in der folgenden Abbildung dargestellt. (Der rote Teil in der Abbildung, MiniBatchStd, wird später beschrieben.)

Die obere Faltungsschicht empfängt das in den Diskriminator eingegebene Bild (entsprechend der Anzahl der Kanäle 3 (entsprechend (R, G, B)), Auflösung 4 × 4), verarbeitet die Faltung und verarbeitet die Anzahl der Kanäle 256, Auflösung 4 Geben Sie x4-Daten aus und übergeben Sie sie an die nächste Ebene. Die nächste Schicht verarbeitet die Daten, leitet sie an die nächste Schicht weiter usw. Die letzte Schicht gibt Daten mit 1 Kanal und 1 x 1 Auflösung aus. Diese Ausgabedaten 1x1x1, kurz gesagt ein Wert, geben an, wie sehr das Eingabebild wie ein Mel-Symbol aussieht.

Wie beim Generator werden wir beim Erlernen dieser Ebenen nach und nach Ebenen entsprechend der nächsten Auflösung "8x8" "einführen", um die folgenden Zustände zu erreichen.

In Generator wurde ein Prozess namens Upsample angewendet, um die Daten zwischen den Ebenen zu überbrücken, die jeder Auflösung entsprechen, um die Auflösung zu erhöhen und die Daten dann an die nächste Ebene weiterzuleiten. Discriminator fügt einen Prozess namens Downsample ein, der genau umgekehrt funktioniert. Dies ermöglicht es beispielsweise, Daten mit einer Auflösung von 8 x 8 in 4 x 4 zu konvertieren und die Daten von der 8 x 8-Schicht zur 4 x 4-Schicht zu überbrücken. (In pytorch ist hierfür eine Funktion namens AdaptiveAvgPool2d hilfreich.)

Erhöhen Sie wie beim Generator den Wert von α auf diese Weise schrittweise von 0 auf 1 und mischen Sie vorsichtig neue Schichten.

Letztendlich werden wir das folgende 3-Kanal-Mel-Symbol mit einer Auflösung von 256 x 256 und (R, G, B) als Eingabe verwenden und lernen, ein Netzwerk anzustreben, das beurteilen kann, ob es echt oder falsch ist.

Zusammenbruch des VS-Modus

Der "Mini Batch Std", der nur in der 4x4-Schicht enthalten ist, verhindert ein Phänomen, das als "Mode Collapse" bezeichnet wird.

Was ist ein Moduskollaps?

Ich möchte, dass Generator so viele Arten von Mel-Symbolen wie möglich generiert. Obwohl GAN verschiedene Zufallszahlen eingibt, kann es zu einem Zustand kommen, in dem nur Bilder erzeugt werden, die den Unterschied kaum erkennen können. Ein solches Phänomen wird als Modenkollaps bezeichnet.

Dies ist das Ergebnis der vorherigen Arbeit, aber ich werde es anhand dieser erläutern, da es das beste Beispiel ist.

Die obere Reihe zeigt 5 Arten von Daten, die für das Training verwendet werden, und die untere Reihe zeigt 5 Arten von Bildern, die von GAN ausgegeben werden. Sie können sehen, dass die Ausgabeergebnisse fast gleich sind, obwohl Sie fünfmal unterschiedliche Zufallszahlen eingegeben haben.

Dieses Phänomen ist auf die "Verkostung" des Generators zurückzuführen. Angenommen, ein generiertes Bild betrügt Discriminator erfolgreich. Wenn Sie ein anderes Bild generieren, das fast mit diesem Bild identisch ist, ist es sehr wahrscheinlich, dass Sie Discriminator erneut täuschen können. Durch Wiederholen dieses Vorgangs kann nur fast das gleiche Bild erzeugt werden.

Mini Batch Standardabweichung

Progressive GAN verfügt über eine Funktion, die den Generator daran hindert. Das ist die Schicht namens "Mini Batch Std". Dies findet eine Statistik, die als Mini-Batch-Standardabweichung bezeichnet wird, und verhindert das Zusammenfallen des Modus.

Der Diskriminator empfängt mehrere Bilder gleichzeitig, wenn er Bilder identifiziert, und nimmt für jedes Pixel des Bildes eine Standardabweichung vor. Wenn Sie beispielsweise 8 Bilder empfangen, müssen Sie feststellen, ob die 8 Bilder vom Generator oder von einem echten Mel-Symbol ausgegeben werden, jedoch für jedes Pixel des Bildes für diese 8 Bilder. Nimmt die Standardabweichung auf.

Wenn außerdem die Standardabweichung für jedes Pixel verwendet wird, wird der Durchschnitt für alle Kanäle und Pixel ermittelt.

Infolgedessen werden die gleichen Daten wie die des Originalbilds mit 1 Kanal und derselben Auflösung endgültig aus der MiniBatch Std-Ebene ausgegeben. Übergeben Sie dies als Set mit dem Originalbild an die nächste 4x4-Ebene.

Dieser Wert gibt an, wie vielfältig die mehrfach eingegebenen Eingabebilder sind. (Es ist ein Bild wie Dispersion.) Wenn dies zu klein erscheint, kann Discriminator feststellen, dass der Generator mit dem Betrügen begonnen hat, und erkennen, dass das Eingabebild das generierte Bild ist. Wenn der Generator nur ähnliche Bilder generiert, wird er von Discriminator als generiertes Bild erkannt. Daher ist es gezwungen, verschiedene Arten von Bildern zu erzeugen.

Die Mini Batch Std-Ebene, die dies kann, wird mit der 4x4-Ebene am Ende des Diskriminators gepaart, um die Möglichkeit eines Moduskollapses auszuschließen.

Lernmethode / Fehlerfunktion

Generator und Diskriminator verwenden ** WGAN-GP ** als Verlustfunktion. Die Definition ist wie folgt.

-E[d_{fake}]
E[d_{fake}] - E[d_{real}] + \lambda E_{\substack{\hat{x}\in P_{\hat{x}}}}[(||\nabla_{\hat{x}}D(\hat{x})||_{2}-1)^{2}]

Ich werde diese der Reihe nach erklären.

Geben Sie das Rauschen $ z $ in den Generator ein und erhalten Sie so viele Bilder, wie es Mini-Batch gibt. (Im Folgenden beträgt die Anzahl der Mini-Batchs $ M $. Diesmal ist $ M = 8 $.) Geben Sie sie in Discriminator ein und geben Sie $ M $ für jedes Bild aus, um anzuzeigen, wie sehr es wie ein Mel-Symbol aussieht. Lass mich. Nennen wir das $ d_ {fake} $. Geben Sie außerdem das tatsächliche Mel-Symbol für $ M $ in den Diskriminator ein und lassen Sie die Ausgabe von $ M $ zu diesem Zeitpunkt $ d_ {real} $ sein.

WGAN-GP verwendet diese $ d_ {real} $ und $ d_ {fake} $, um den Verlust zu berechnen.

Generator lernen

Der Generator versucht, so viel wie möglich ein mel-Symbol-ähnliches Bild zu erzeugen, um den Diskriminator zu täuschen, wenn eine Folge von Zahlen aus Zufallszahlen eingegeben wird.

Verlustfunktion

In WGAN-GP ist die Verlustfunktion des Generators wie folgt definiert.

-E[d_{fake}]

Der Punkt ist, dass das vom Generator generierte $ M $ -Bild vom Diskriminator beurteilt wird, der Durchschnitt der Ausgabe genommen wird und ein Minus hinzugefügt wird. Es scheint, dass WGAN-GP bekanntermaßen empirisch funktioniert, wenn es so definiert wird. Adam wurde als Optimierungsmethode für die Fehlerausbreitung verwendet, und die Lernrate wurde auf 0,0005 eingestellt, und Adams primäres und sekundäres Moment wurden auf 0,0 bzw. 0,99 eingestellt.

Außerdem wird die Lernrate nur beim Lernen der 256 x 256-Schicht auf 0,0001 reduziert, wenn das Lernen eine bestimmte Anzahl von Malen wiederholt wird. (Entschuldigung, ich habe das Gefühl, dass die Generierung des Mel-Symbols relativ gut funktioniert ... (vielleicht aufgrund meiner Gedanken.) Vielleicht gibt es einen anderen besseren Weg.)

Diskriminator lernen

Nach der Fehlerausbreitung des Generators folgt als nächstes die Fehlerausbreitung des Diskriminators.

Verlustfunktion

In WGAN-GP ist die Diskriminatorverlustfunktion wie folgt definiert.

E[d_{fake}] - E[d_{real}] + \lambda E_{\substack{\hat{x}\in P_{\hat{x}}}}[(||\nabla_{\hat{x}}D(\hat{x})||_{2}-1)^{2}]

gradient penalty Die Definition der Gradientenstrafe ist wie folgt.

\lambda E_{\substack{\hat{x}\in P_{\hat{x}}}}[(||\nabla_{\hat{x}}D(\hat{x})||_{2}-1)^{2}]

Die Verteilung des erzeugten Bildes und die Verteilung des realen Bildes werden jedoch auf $ P_ {fake} $ bzw. $ P_ {real} $ gesetzt.

\epsilon\in U[0,1],x_{fake}\in P_{fake},x_{real}\in P_{real}
\hat{x}=(1-\epsilon)x_{fake}+\epsilon x_{real}

Ich habe entschieden.

Lassen Sie mich das Bild dazu erklären. (Es ist nur ein Bild. Es geht auch ziemlich darum.)

Es gibt viele Bilder $ \ hat {x} $, die eine Mischung aus generierten Bildern und realen Bildern in zufälligen Verhältnissen sind. Berücksichtigen Sie den durch die Ausgabe erzeugten Speicherplatz, wenn dieser in den Diskriminator eingefügt wird. Im optimierten Diskriminator ist bekannt, dass der Gradient an fast jedem Punkt in diesem Raum 1 ist. Vielleicht ist es zweckmäßig, um 1 zu sein, damit der Gradient während der Fehlerausbreitung nicht verschwindet oder divergiert. Daher werden wir auch mit dem Mel Icon Generator Discriminator mit dem Lernen fortfahren, sodass dieser Wert 1 wird. Der Begriff dafür ist Gradientenstrafe

\lambda E_{\substack{\hat{x}\in P_{\hat{x}}}}[(||\nabla_{\hat{x}}D(\hat{x})||_{2}-1)^{2}]

ist.

Auch dieses Mal wird die Konstante $ \ lambda $ auf 10.0 gesetzt. (Da das Referenzmaterial auf 10.0 festgelegt wurde, habe ich es befolgt.)

Das Obige ist die Verlustfunktion von Discriminator in WGAN-GP, aber hier nehmen wir das Quadrat von $ d_ {real} $ und addieren $ E [{d_ {real}} ^ 2] $, was der Durchschnitt von ihnen ist. .. Dieser Abschnitt reduziert die negativen Auswirkungen extremer Neigung auf das Lernen.

E[d_{fake}] - E[d_{real}] + \lambda E_{\substack{\hat{x}\in P_{\hat{x}}}}[(||\nabla_{\hat{x}}D(\hat{x})||_{2}-1)^{2}] + \beta E[{d_{real}}^2]

Die Konstante $ \ beta $ ist 0,001. (Dies liegt auch daran, dass das Referenzmaterial auf 0,001 festgelegt wurde.)

Das Obige ist die Verlustfunktion des diesmal verwendeten Diskriminators. Adam wurde als Optimierungsmethode für die Fehlerausbreitung verwendet, und die Lernrate wurde auf 0,0005 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,99 eingestellt. Darüber hinaus wird die Lernrate nur beim Lernen der 256 x 256-Schicht auf 0,0001 reduziert, wenn das Lernen eine bestimmte Anzahl von Malen wiederholt wird. (Mit Ausnahme der Verlustfunktion ist sie genau die gleiche wie der Generator.)

Gesamtbild

Das oben eingeführte Bild wird erneut gedruckt, aber der zuvor erstellte Generator und der Diskriminator werden zu einem progressiven GAN kombiniert. Mit dem folgenden Zustand als Endziel lernen wir aus der niedrigen Auflösung für jede Schicht.

Generieren

Dieses Mal haben wir uns vorgenommen, alle 8 Mini-Batch- und 7500-Lernvorgänge zur nächsten Auflösung überzugehen. Lernen Sie die Verwendung des tatsächlichen Mel-Symbols, das Sie erhalten haben, und lassen Sie den Generator das Mel-Symbol generieren.

** Okay! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !! ** ** **

Es ist mir gelungen, jedes Mal ein anderes Bild zu erzeugen. Die Auflösung wurde ebenfalls verbessert. Progressive GAN Ernsthaft großartig! !! !! !! !! !! !! !!

Die Ausgabe während des Lernens ist wie folgt.

Sie können sehen, dass das Lernen für jede Auflösung voranschreitet.

Nebenbei: Datenerweiterung

Beim maschinellen Lernen wird häufig eine als "Datenerweiterung" bezeichnete Technik als eine der Methoden verwendet, um die Bildtypen in einem Datensatz zu erhöhen. Bei jedem Lernen können Sie den Datensatz aufblasen, indem Sie den Kontrast und den Farbton des Bildes zufällig konvertieren, nach links und rechts drehen, den Winkel ändern und das gesamte Bild verzerren.

Es gibt jedoch Probleme damit mit dem Mel Icon Generator. Zuallererst ist die Besonderheit von Mel Icon, dass der Kopf so gezeichnet ist, dass er von links unten wächst.

(Symbol: Minagi (Stand 5. August 2020))

Aus diesem Grund besteht eine hohe Wahrscheinlichkeit, dass Bildverzerrung, Drehung, Links-Rechts-Inversion usw. unbeabsichtigt gelernt werden. Es ist daher besser, sie zu stoppen. Außerdem verwende ich die Farbtonkonvertierung nicht, da ein unheimliches Farbsymbol angezeigt wird. Da es jedoch nur wenige negative Auswirkungen auf die Kontrastumwandlung gab, lernte ich auch die Verwendung der Datenerweiterung.

Das linke ist das Originalbild und das rechte ist das konvertierte Bild mit verdoppeltem Kontrast. Auf diese Weise dachte ich, dass es möglich sein würde, die Anzahl der Datensätze im Vergleich zum vorherigen Zeitpunkt überwältigend zu erhöhen, also verdoppelte ich gierig die Anzahl der Lernvorgänge und führte das Lernen dann aus und gab es aus. Das Ergebnis ist unten.

Ich denke nicht, dass es viel besser ist als wenn ich es nicht benutzt habe, aber diese Methode scheint gut zu sein.

Zusammenfassung

Der Mel Icon Generator überwindet nicht nur den Moduszusammenbruch mit Progressive GAN, sondern kann auch die Auflösung erhöhen. Progressive GAN scheint eine Technik zu sein, mit der je nach Methode und Datensatz sogar hochauflösende Bilder in Full HD erzeugt werden können. (Ich denke, 256x256 ist genug, wenn Sie es als Twitter-Symbol verwenden.) Selbst in der realen Welt scheinen Anwendungsbeispiele im medizinischen Bereich aktiv zu sein, und es scheint, dass diese Methode auch in Zukunft mehr Aufmerksamkeit auf sich ziehen wird.

Lassen Sie uns mit Progressive GAN ein beeindruckendes Bild erzeugen.

Quellcode

Der Code, den ich geschrieben habe, befindet sich in diesem Repository. https://github.com/zassou65535/image_generator_2

Bonus

Wenn der Durchschnitt (torch.mean) für jedes Pixel der ungefähr 640 Bilder, die dieses Mal im Datensatz verwendet wurden, genommen wurde, erschienen die folgenden Bilder.

Ich habe es mit verschiedenen Statistiken auf die gleiche Weise versucht. Das Folgende sind die Standardabweichung (torch.std), der Medianwert (torch.median) und der häufigste Wert (torch.mode) in der Reihenfolge von links.

Ich habe auch den Minimalwert (torch.min) und den Maximalwert (torch.max) ausprobiert, aber es wurden jeweils nur Schwarzweißbilder angezeigt.

Übrigens, als ich die Standardabweichung (torch.std) für 5 zufällig extrahierte Bilder berechnet habe, habe ich diese bekommen. Es könnte ein wenig in Mode sein.

Wenn der Mindestwert (torch.min) für alle Datensätze von fast 640 Blatt berechnet wird, werden nur Bilder ausgegeben, die nahe an Schwarz liegen. Wenn die Zahl jedoch auf etwa 7 unterdrückt wird, sieht dies folgendermaßen aus. Das Symbol wird ausgeblendet. Das Folgende ist der Mindestwert für 7 zufällig ausgewählte Bilder.

Vorherige Arbeit

Die Geschichte der Erstellung eines Mel-Icon-Generators

Referenz

Praktisches GAN ~ Deep Learning mit feindlichem Generationsnetzwerk Lernen Sie während der Entwicklung mit PyTorch Deep Learning > Implementieren Sie PGGAN mit Pytorch PGGAN "Freundliches Lehrplanlernen" [DL Round Reading] Verbessertes Training von Wasserstein-GANs GAN (4) WGAN

Recommended Posts

Die Geschichte der Herstellung des Mel Icon Generator Version 2
Die Geschichte eines Mel-Icon-Generators
Die Geschichte einer unveränderlichen Form
Die Geschichte von sys.path.append ()
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Richten Sie die Version von chromedriver_binary aus
Die Geschichte des Baus von Zabbix 4.4
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Die Geschichte der Herabstufung der Version von Tensorflow in der Demo von Mask R-CNN.
Testen Sie die Version des Argparse-Moduls
Die Geschichte von Python und die Geschichte von NaN
Erhöhen Sie die Version von pyenv selbst
Die Geschichte der Teilnahme an AtCoder
pyenv-change die Python-Version von virtualenv
Die Geschichte des "Lochs" in der Akte
Die Geschichte des erneuten Bereitstellens des Anwendungsservers
Die Geschichte des Exportierens eines Programms
Die Geschichte, dass die Version von Python 3.7.7 nicht an Heroku angepasst wurde
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
[Pythonista] Die Geschichte einer Aktion zum Kopieren ausgewählten Textes
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Die Geschichte des Versuchs, den Client wieder zu verbinden
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
So überprüfen Sie die Version von Django
Die Geschichte, MeCab in Ubuntu 16.04 zu setzen
Informationen zur virtuellen Umgebung von Python Version 3.7
[Python] Probieren Sie pydash der Python-Version von lodash aus
Die Geschichte des Studenten, der die neue Website für Gegenmaßnahmen gegen Koronaviren entwickelt hat (Ishikawa-Version)
Die Geschichte der Manipulation globaler Python-Variablen
Migemo-Version des Befehls: find,: mfind
Die Geschichte, deep3d auszuprobieren und zu verlieren
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Dekodierung von Keras 'LSTM model.predict
Die Geschichte des Ausführens der asp.net Core 3.1-App auf der arm64-Version von Amazon Linux 2
Die Geschichte, ein Paket zu erstellen, das den Betrieb von Juman (Juman ++) & KNP beschleunigt
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte von pep8 wechselt zu pycodestyle
Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Die Geschichte des tiefen Lernens mit TPU
Test von emacs-org parser orgparse für Python
Verwenden Sie die neueste Version von PyCharm unter Ubuntu
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Bildverarbeitung? Die Geschichte, Python für zu starten
Probieren Sie Progate Free Edition [Python I]
Die Geschichte, das optimale n in N Faust zu finden
Die Geschichte des Fehlinterpretierens der Swap-Zeile des obersten Befehls
Die Geschichte des Lesens von HSPICE-Daten in Python
Die Geschichte, Sourcetrail × macOS × VS Code auszuprobieren
Die Geschichte der Anzeige von Mediendateien in Django
[Kleine Geschichte] Laden Sie das Bild von Ghibli sofort herunter
Die Geschichte vom Umzug von Pipenv zur Poesie
Die Geschichte des Starts eines Minecraft-Servers von Discord
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert