{"id":178901,"date":"2023-06-24T12:04:56","date_gmt":"2023-06-24T11:04:56","guid":{"rendered":"https:\/\/liora.io\/de\/?p=178901"},"modified":"2026-02-06T06:38:19","modified_gmt":"2026-02-06T05:38:19","slug":"stiluebertragung-mit-cyclegan","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/stiluebertragung-mit-cyclegan","title":{"rendered":"Stil\u00fcbertragung mit CycleGAN"},"content":{"rendered":"<h4><strong>Der Neural Style Transfer (NST) ist eine Sammlung von Modellen und Methoden, die es erm\u00f6glichen, den visuellen Stil von Bildern oder Videos auf ein anderes Bild zu \u00fcbertragen. In diesem Artikel besch\u00e4ftigen wir uns mit einem bestimmten Modell, das CycleGAN hei\u00dft.<\/strong><\/h4>\nHeutzutage sind die erfolgreichsten Algorithmen im Bereich NST angepasste <a href=\"https:\/\/liora.io\/de\/deep-learning-oder-tiefes-lernen-was-ist-das-denn\">Deep-Learning-Algorithmen,<\/a> die Faltungsschichten verwenden. In der Kunst wird <a href=\"https:\/\/www.tensorflow.org\/tutorials\/generative\/style_transfer\"><strong>NST<\/strong><\/a> am h\u00e4ufigsten verwendet, um aus einer Fotografie und dem Stil eines Malers k\u00fcnstliche Kunstwerke zu schaffen. Es gibt derzeit mehrere (mobile und webbasierte) Anwendungen, die<a href=\"https:\/\/liora.io\/de\/style-transfer-deep-learning\"> Stil\u00fcbertragung erm\u00f6glichen, z. B. DeepArt und Reiinakanos<\/a> Blog. So kann man eine Star Wars-Figur (Darth Revan) in ein Gem\u00e4lde verwandeln, das von Paul Klees Werk Clouds over Bor inspiriert ist :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/Fichier-2-8.png\" title=\"\" alt=\"\" loading=\"lazy\"><figcaption><\/figcaption><\/figure>\n<h3>Das CycleGAN-Modell, was ist das?<\/h3>\nWie der Name schon sagt, ist CycleGAN eine Art generatives Modell (erstellt von Jun-Yan Zhu et al. f\u00fcr das BAIR-Forschungslabor der UC Berkeley), ein GAN (Generative Adversarial Network), das dazu dient, die Stil\u00fcbertragung auf ein Bild durchzuf\u00fchren. In der Praxis wird die gro\u00dfe Mehrheit der GANs, die zur \u00dcbertragung eines Bildes des Stils einer Dom\u00e4ne X in ein Bild des Stils einer Zieldom\u00e4ne Y verwendet werden, mithilfe eines Zwillingsdatensatzes trainiert, in dem jedes Beispielbild von X ein direkt zugeordnetes Beispielbild in einem anderen Stil Y hat.\n\nCycleGAN zeichnet sich gerade dadurch aus, dass es beim Training keine Bildpaare ben\u00f6tigt. Wenn man ein solches Modell trainiert, kann man sehr gute Leistungen erzielen, ohne jemals Bildpaare zu verwenden, was das Training f\u00fcr bestimmte Datens\u00e4tze, bei denen es keine \u00dcbereinstimmungen gibt, erheblich vereinfacht. Man kann dann den Stil eines Malers f\u00fcr verschiedene Bilder nachahmen, indem man z. B. eine Datenbank mit seinen Bildern verwendet! Zun\u00e4chst wollen wir die <a href=\"https:\/\/liora.io\/de\/attgan-ein-tool-zur-veraenderung-von-gesichtsattributen\">Architektur eines GAN vorstellen.<\/a> Wenn du schon einmal einen unserer Artikel \u00fcber GANs gelesen hast, wei\u00dft du, dass ein GAN ein Modell ist, das aus zwei gro\u00dfen Untermodellen besteht, einem Generator und einem Diskriminator:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/schema_gan_blog_4-121.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption>Klassische Struktur eines GAN<\/figcaption><\/figure>\nDer Generator ist das Modell, das es erm\u00f6glicht, Bilder aus einem zuf\u00e4lligen <strong>Rauschen zu erzeugen,<\/strong> w\u00e4hrend der Diskriminator (der einen Wert zwischen 0 und 1 annimmt) dazu dient, ein bestimmtes Bild zu klassifizieren, um festzustellen, ob es k\u00fcnstlich ist oder nicht.\n\nBeim Training werden sowohl der Generator als auch der Diskriminator trainiert, damit der Diskriminator immer st\u00e4rker wird, um ein echtes Bild von einem generierten Bild zu unterscheiden, und damit der Generator immer st\u00e4rker wird, um den Diskriminator zu t\u00e4uschen.\n\nW\u00e4hrend des Trainings hat der Generator keinen direkten Zugriff auf die realen Daten, nur der Generator nutzt sie, um sie mit den simulierten Daten zu vergleichen. Die Verlustfunktion f\u00fcr den Diskriminator sind die Fehler, die er bei der Klassifizierung der Daten macht, und die Verlustfunktion f\u00fcr den Generator ist der Erfolg des Diskriminators bei der Unterscheidung von echten Bildern. Einige Modelle verwenden die gleiche Verlustfunktion, die vom Diskriminator minimiert und vom Generator maximiert wird.\n\nDie Struktur von <strong>CycleGAN<\/strong> ist so ausgelegt, dass der Generator G die Verteilung eines Stils X in einen anderen Stil Y \u00fcbersetzt, so dass der Diskriminator den transformierten Stil Y=G(X) nicht vom urspr\u00fcnglichen Stil Y unterscheiden kann.\n\nEs gibt ein Problem, das bei der Anwendung dieser Strategie h\u00e4ufig auftritt: Der Generator \u00fcbersetzt alle Bilder auf die gleiche Weise und kann nur ein einziges Beispiel b erzeugen, was nicht die gew\u00fcnschte Aufgabe ist.\n\nUm dieses Problem zu l\u00f6sen, f\u00fcgt die CycleGAN-Struktur eine Einschr\u00e4nkung hinzu, indem sie einen weiteren Generator F definiert, dessen Aufgabe es ist, die R\u00fccktransformation von G in dem Sinne zu sein, dass FGX\u2248X. Dadurch wird sichergestellt, dass die Transformation von X nicht auf ein einziges Beispiel reduziert wird. Beim Training wird daher eine neue Verlustfunktion hinzugef\u00fcgt, die den zyklischen Konsistenzverlust (cycle consistency loss) charakterisiert und Transformationen dazu ermutigt, die Eigenschaften FGX\u2248X und G(FY)\u2248Y zu \u00fcberpr\u00fcfen. Zus\u00e4tzlich zum Diskriminator f\u00fcr G (den wir DY nennen, weil wir Y von Y diskriminieren wollen) f\u00fcgen wir einen Diskriminator f\u00fcr F (den wir DX nennen) hinzu.\n\nUnten ist ein ein Schema, das die verschiedenen oben beschriebenen Beziehungen zusammenfasst:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/schema_gan_blog_4-122.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption>Schema, das die Besonderheit des Modells zusammenfasst<\/figcaption><\/figure>\nDer <strong>Cycle-Consistency-Loss<\/strong> wird dann in zwei verschiedene St\u00fccke aufgeteilt, wobei das erste (1) dem Verlust zwischen den Elementen von X und ihren Rekonstruktionen entspricht und das zweite (2) dem Verlust zwischen den Elementen von Y und ihren Rekonstruktionen entspricht.\n\nIn diesem Modell optimieren die Generatoren und <strong>Diskriminatoren dieselbe allgemeine Verlustfunktion<\/strong>, die aus zwei Unterverlustfunktionen besteht, die den Generatoren zugeordnet sind (adversial loss):\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/Capture-de\u0301cran-2022-03-22-a\u0300-12.07.00.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/Capture-de\u0301cran-2022-03-22-a\u0300-12.07.30.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nund der zyklischen Konsistenzverlustfunktion:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/Capture-de\u0301cran-2022-03-22-a\u0300-12.09.53.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\ndie die Gesamtverlustfunktion angibt:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/Capture-de\u0301cran-2022-03-22-a\u0300-12.10.56.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\ndie von <strong>Diskriminatoren maximiert<\/strong> wird (damit diese gut zwischen Generation und realen Daten unterscheiden k\u00f6nnen) und von Generatoren minimiert wird, damit diese Beispiele erzeugen, die immer weniger von realen Daten unterschieden werden k\u00f6nnen.\n<h3>Die Architektur von CycleGAN im Detail<\/h3>\nDie beiden Generatoren und die beiden <strong>Diskriminatoren<\/strong> sind in der Architektur vollkommen identisch, d. h. sie bestehen aus den gleichen Schichten und haben die gleichen Abmessungen. Die Generatoren verwenden haupts\u00e4chlich Faltungsschichten und Restbl\u00f6cke (residual blocks).\n\nDie <strong>Faltungsschichten<\/strong> wurden bereits in einem anderen Artikel unseres Blogs ausf\u00fchrlich behandelt und erkl\u00e4rt, den du hier finden kannst. Residualbl\u00f6cke sind sehr einfache Schichten im Deep Learning, die oft f\u00fcr die Stil\u00fcbertragung verwendet werden.\n\n(Auch interessant:<a href=\"https:\/\/liora.io\/de\/hugging-face-transformers-was-ist-das\"> Was sind Hugging Face Transformers?)<\/a>\n\nSie sorgen daf\u00fcr, dass sich das Bild nicht zu weit vom Originalbild entfernt, indem sie das Netzwerk nach und nach an das Original erinnern. Formal hat eine solche Schicht die Form :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/schema_gan_blog_4-123.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption>Retsblock<\/figcaption><\/figure>\nWie in Grafik (d) dargestellt, besteht der Restblock nur aus einer normalen Ebene, die am Ende mit dem urspr\u00fcnglichen Eingabewert versehen wird, so dass das Ausgangsbild buchst\u00e4blich nicht zu sehr ver\u00e4ndert wird.\n\nIn einigen F\u00e4llen wird auch ein <strong>ReLU<\/strong> angewendet, um die Ausgabe des Layers zu annullieren, falls F(x) negativ zu hoch ist (wo ein Farbbild positive Werte hat). F\u00fcr die Diskriminatoren verwendet das Modell 70 x 70 PatchGANs, d. h. der Diskriminator besteht aus mehreren kleinen GANs, PatchGANs mit einer Anfangsgr\u00f6\u00dfe von 70 x 70, die \u00fcberall auf dem Bild angewendet werden und sich in dem betreffenden Teil des Bildes \u00fcberlappen k\u00f6nnen, wodurch bestimmt wird, ob ein Teil des Bildes echt ist oder nicht. Die endg\u00fcltige Antwort wird dann als der Durchschnitt der Antworten berechnet, die f\u00fcr jeden Patch zur\u00fcckgegeben werden. Jeder<strong> PatchGAN<\/strong> wird eine \u00e4hnliche Architektur haben, die nur aus klassischen Faltungsschichten besteht. Schlie\u00dflich wird das Training mit einer Batchgr\u00f6\u00dfe von 1 und einem klassischen Optimierer durchgef\u00fchrt: Adam.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/resultat_gan.jpg\" title=\"\" alt=\"resultat_gan\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nHier werden einige Ergebnisse vorgestellt, die mit Testbildern durch das zuvor definierte Modell erzielt wurden. Links sind die als Input gelieferten <strong>Originalbilder und rechts die verkl\u00e4rten Bilder zu sehen.<\/strong> Man sieht z. B., dass das Modell, das mit Bildern von Pferden und Zebras trainiert wurde, frei zwischen den verschiedenen Tierstilen wechseln kann.\n\nEbenso kann es, wenn es mit K\u00fcnstlerbildern trainiert wird, von einer Fotografie zu einem Gem\u00e4lde im Stil von Van Gogh wechseln. Auch bei der Rekonstruktion von Bildern werden sehr gute Ergebnisse erzielt. Denn neben der fast identischen Rekonstruktion des Bildes kann man auch feststellen, dass die Qualit\u00e4t des rekonstruierten Bildes (mit einer besseren Tiefensch\u00e4rfe) im Vergleich zum Basisbild verbessert ist:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/unnamed-7.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nIn diesem Artikel haben wir gesehen, was Stil\u00fcbertragung ist, und insbesondere die Architektur des <strong>CycleGAN-Modells<\/strong>, das von GANs inspiriert ist und eine effiziente Stil\u00fcbertragung erm\u00f6glicht.\n\nCycleGAN ist einer der <a href=\"https:\/\/liora.io\/de\/page-rank-algorithmus-unsere-tipps\">besten Algorithmen f\u00fcr die Stil\u00fcbertragung.<\/a> Wir haben au\u00dferdem gesehen, dass dieser Algorithmus im Gegensatz zu fast allen anderen Algorithmen, die Stil\u00fcbertragung erm\u00f6glichen, keine gepaarten Daten ben\u00f6tigt, die in der Praxis schwer zu erhalten sind, und es daher erm\u00f6glicht, <a href=\"https:\/\/liora.io\/de\/datenbank-und-code-refactoring-unser-guide\">verschiedene Datenbanken zu trainieren<\/a>, die zuvor unbrauchbar waren, wie z. B. die Datenbanken der Gem\u00e4lde ber\u00fchmter Maler wie Van Gogh. Schlie\u00dflich haben wir gesehen, dass dieses Modell nicht nur eine effiziente Stil\u00fcbertragung, sondern auch eine getreue Bildrekonstruktion bietet, die zu einem Bild mit einer besseren Tiefensch\u00e4rfe f\u00fchrt, was die Stabilit\u00e4t des Algorithmus beweist.\n\nDieser Algorithmus ist jedoch nicht allm\u00e4chtig, denn er hat Schw\u00e4chen, wenn es darum geht, die geometrischen <strong>Eigenschaften von Bilder<\/strong>n zu ver\u00e4ndern, wie z. B. wenn man eine Katze in einen Hund verwandeln m\u00f6chte, und eignet sich daher nur f\u00fcr die Ver\u00e4nderung von Texturen.\n\nWenn du mehr \u00fcber die Transformation von Objekten, Deep Learning und k\u00fcnstliche Intelligenz in Bezug auf Bilder erfahren m\u00f6chtest, dann schau dir unsere Ausbildung zum Data Scientist an.\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Data Scientist Weiterbildung<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Der Neural Style Transfer (NST) ist eine Sammlung von Modellen und Methoden, die es erm\u00f6glichen, den visuellen Stil von Bildern oder Videos auf ein anderes Bild zu \u00fcbertragen. In diesem Artikel besch\u00e4ftigen wir uns mit einem bestimmten Modell, das CycleGAN hei\u00dft. Heutzutage sind die erfolgreichsten Algorithmen im Bereich NST angepasste Deep-Learning-Algorithmen, die Faltungsschichten verwenden. In [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":178903,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2472],"class_list":["post-178901","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ki"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/178901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=178901"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/178901\/revisions"}],"predecessor-version":[{"id":217429,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/178901\/revisions\/217429"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/178903"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=178901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=178901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}