{"id":12147,"date":"2024-01-23T22:51:00","date_gmt":"2024-01-23T20:51:00","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=12147"},"modified":"2024-01-26T17:28:37","modified_gmt":"2024-01-26T15:28:37","slug":"ki-bilder-auf-dem-raspberry-pi-mit-onnxstream-stable-diffusion-generieren","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/ki-bilder-auf-dem-raspberry-pi-mit-onnxstream-stable-diffusion-generieren\/","title":{"rendered":"KI-Bilder auf dem Raspberry Pi mit OnnxStream\/Stable Diffusion generieren"},"content":{"rendered":"<p>Die KI-Revolution ist da: Dank beeindruckender Fortschritte k\u00f6nnen Bilder mittlerweile auf einem Raspberry Pi Einplatinencomputer f\u00fcr weniger als 100 Euro generiert werden. Dieser Beitrag zeigt dir, wie du den Stable Diffusion Port namens OnnxStream auf einem Raspberry Pi spielend leicht installierst &#8211; dank fertigem Skript. Au\u00dferdem liefert er Hintergrundwissen \u00fcber die Funktion der Komponenten sowie die wichtigsten Praxistipps, um gute Ergebnisse bei der Bildgenerierung zu erzielen. Inklusive Beispielen, was im Bereich der KI-Bildgenerierung auf einem Raspberry Pi beeindruckendes m\u00f6glich ist. Alle Bilder auf dem Vorschaubild (au\u00dfer Logo &amp; Grafik rechts) wurden \u00fcbrigens auf einem Raspberry Pi 5 mit dem unten folgenden Software-Stack installiert.<\/p>\n<h2 class=\"wp-block-heading\">Was brauche ich?<\/h2>\n<p>Zu empfehlen ist ein Raspberry Pi 5 <a href=\"https:\/\/u-labs.de\/portal\/offiziellen-raspberry-pi-5-kuhler-mit-lufter-montieren\/\" data-type=\"post\" data-id=\"11830\">mit aktiver K\u00fchlung<\/a> &#8211; <a href=\"https:\/\/u-labs.de\/portal\/braucht-der-raspberry-pi-5-einen-kuhler-messungen-aus-der-praxis\/\" data-type=\"post\" data-id=\"11795\">ansonsten wird er sich wahrscheinlich w\u00e4hrend der Generierung drosseln<\/a>. Theoretisch sind auch deutlich \u00e4ltere &amp; damit schw\u00e4chere Modelle m\u00f6glich. Allerdings ist dort alles deutlich langsamer &#8211; sowohl die Installation, als auch das Generieren von Bildern. Mit jeweils einem Schritt ist ein Bild auf einem Raspberry Pi 5 bereits nach ca. 3:16 Minuten erstellt, w\u00e4hrend ein Raspberry Pi 4 ganze 13:54 Minuten auf sich warten l\u00e4sst. Das Hinzuf\u00fcgen eines Schritts verz\u00f6gert den Prozess auf dem Raspberry Pi 5 um jeweils etwa eine Minute:<\/p>\n<ul class=\"wp-block-list\">\n<li>1 Schritt: 3:16 Minuten<\/li>\n<li>2 Schritte: 4:18 Minuten<\/li>\n<li>3 Schritte: 5:23 Minuten<\/li>\n<\/ul>\n<p>Da OnnxStream darauf ausgelegt ist, mit nur 512 MB Arbeitsspeicher (!) des Raspberry Pi Zero 2 zu laufen, kann es selbst auf derart leistungsschwachen Einplatinencomputern genutzt werden. Allerdings muss man dort mit knapp einer halben Stunde pro Bild (1 Schritt) rechnen. Zum Vergleich: Das &#8222;normale&#8220; Stable Diffusion (auf dem OnnxStream basiert) empfiehlt mindestens 8 GB Arbeitsspeicher. Durch verschiedene Optimierungen (welche die Generierung etwas verlangsamen) reichen 4 GB.<\/p>\n<p>In jedem Falle ben\u00f6tigst du<strong> reichlich freien Speicherplatz<\/strong>: Die Installation mit nur dem <em>SDXL Turbo Unet<\/em> Modell (siehe <em>Komponenten<\/em> unten) belegt bereits ca. 18 GB. Fast der gesamte Speicherplatz entf\u00e4llt dabei auf das Modell. Falls du weitere installieren m\u00f6chtest, ist daher deutlich mehr Speicherkapazit\u00e4t n\u00f6tig. Dazu kommt das Raspberry Pi OS, welches im Vergleich dazu mit wenigen Gigabytes sehr klein wirkt. Mindestens 32 GB sollte die Speicherkarte f\u00fcr ein Modell gro\u00df sein.<\/p>\n<p>Dar\u00fcber hinaus m\u00fcssen all diese Daten auch aus dem Internet geladen werden. Eine schnelle Internetanbindung ist daher von Vorteil. Ansonsten wirst du l\u00e4ngere Zeit warten m\u00fcssen &#8211; hier macht es ggf. Sinn, die Installation per Skript zu starten.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"166\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41-1024x166.png\" alt=\"\" class=\"wp-image-12167\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41-1024x166.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41-300x49.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41-768x125.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41-1536x249.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41-640x104.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41-1048x170.png 1048w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-41.png 1887w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">W\u00e4hrend der Generierung wird selbst der relativ leistungsstarke Raspberry Pi 5 teilweise stark beansprucht<\/figcaption><\/figure>\n<\/div>\n<style>\n.ul-info {\nborder: 1px solid rgba(4, 32, 69, 0.1);\n  border-left: .5rem solid #4299e1;\n  box-shadow: rgba(24,36,51,.04) 0 2px 4px 0;\npadding-left: 10px;\nmargin: 10px 0;\n}\n<\/style>\n<div class=\"ul-info\">\nDieser Beitrag wurde mit einem <b>Raspberry Pi 5<\/b> und dem <b>Raspberry Pi OS 12<\/b> erstellt. Wahrscheinlich wird er auch mit \u00e4lteren sowie zuk\u00fcnftigen Versionen funktionieren &#8211; m\u00f6glicherweise sind dazu leichte \u00c4nderungen erforderlich. Bei Fragen kannst du dich gerne <a href=\"https:\/\/u-labs.de\/forum\">im Forum melden<\/a>.\n<\/div>\n<h2 class=\"wp-block-heading\">Die Komponenten<\/h2>\n<p>Die Installation besteht aus insgesamt drei Komponenten, welche wir herunterladen und teilweise kompilieren m\u00fcssen. Zuvor werfen wir darauf einen kurzen Blick, damit dir klar wird, welche Bedeutung sie f\u00fcr unseren Bildgenerator haben.<\/p>\n<p><strong>XNNPACK<\/strong> ist eine von Google entwickelte Bibliothek, die grundlegende (Low Level) Funktionen f\u00fcr Frameworks aus dem Bereich Maschinellen Lernens bietet.<sup data-fn=\"3df9d4b1-7409-4b07-a8e2-a3b44c160b9f\" class=\"fn\"><a href=\"#3df9d4b1-7409-4b07-a8e2-a3b44c160b9f\" id=\"3df9d4b1-7409-4b07-a8e2-a3b44c160b9f-link\">1<\/a><\/sup> Sie soll deren Leistung durch starke Optimierung verbessern. Da XNNPACK nicht nur X86, sondern auch f\u00fcr ARM und sogar RISC-V unterst\u00fctzt, bietet es sich als Grundlage f\u00fcr den Raspberry Pi an.<\/p>\n<p><strong>OnnxStream<\/strong> hat es mithilfe von XNNPACK geschafft, Stable Diffusion derart extrem zu optimieren, damit es selbst auf einem vergleichsweise sehr schwachen Raspberry Pi Zero 2 l\u00e4uft.<sup data-fn=\"ae2dce27-e79a-47db-9a3f-8a33831bde99\" class=\"fn\"><a href=\"#ae2dce27-e79a-47db-9a3f-8a33831bde99\" id=\"ae2dce27-e79a-47db-9a3f-8a33831bde99-link\">2<\/a><\/sup> Stable Diffusion ist ein quelloffener Deep-Learning Text-zu-Bild-Generator. <a href=\"https:\/\/u-labs.de\/portal\/so-generierst-du-eigene-ki-bilder-auf-lokaler-pc-hardware-stable-diffusion-web-ohne-cloud-abhaengigkeiten\/\" data-type=\"post\" data-id=\"10567\">Wie man ihn installiert und nutzt, habe ich bereits in diesem Artikel beschrieben.<\/a> Allerdings wurde daf\u00fcr bislang ein X86 System mit mindestens 4 GB dedizierten Grafikspeicher ben\u00f6tigt, empfohlen sind 8 GB. Dies ist nicht zu verwechseln mit dem Arbeitsspeicher des Raspberry Pi.<\/p>\n<p><strong>SDXL Turbo Unet model for OnnxStream<\/strong> liefert als Modell die notwendige Datenbasis, um Bilder zu generieren. Wie bei anderen Bildgeneratoren ist das Modell austauschbar: OnnxStream unterst\u00fctzt dar\u00fcber hinaus Stable Diffusion 1.5 und Stable Diffusion XL 1.0.<\/p>\n<h2 class=\"wp-block-heading\">Vorbereitung<\/h2>\n<p>Um den Code der Projekte zu kompilieren, ben\u00f6tigen wir einige Werkzeuge, die nicht standardm\u00e4\u00dfig auf dem Raspberry Pi OS installiert sind. Darunter CMake f\u00fcr C\/C++ und Git-LFS (<em><strong>L<\/strong>arge <strong>F<\/strong>ile <strong>S<\/strong>ystem<\/em>), um die gro\u00dfen KI\/ML-Modelle verarbeiten zu k\u00f6nnen.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">sudo apt install cmake git-lfs<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n<p>XNNPACK ist eine Abh\u00e4ngigkeit von OnnxStream. Wir m\u00fcssen daher zun\u00e4chst XNNPACK kompilieren, um damit anschlie\u00dfend OnnxStream ebenfalls kompilieren zu k\u00f6nnen. Schlussendlich l\u00e4sst sich OnnxStream mit dem heruntergeladenen Modell starten. F\u00fcr all diese Komponenten solltest du zun\u00e4chst einen Ordner anlegen. Da wir dessen Pfad an einigen Stellen referenzieren, macht es Sinn, ihn in einer Variable zu speichern.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">export baseDir=\/home\/u-labs\/sd-rpi\nmkdir $baseDir\ncd $baseDir<\/code><\/pre>\n<p>Nun klonen wir das XNNPACK-Repository und m\u00fcssen jedoch einen bestimmten Branch auschecken, da diese Bibliothek eigenst\u00e4ndig entwickelt wird. \u00c4nderungen, die nicht abw\u00e4rtskompatibel sind und noch nicht in OnnxStream eingepflegt wurden, k\u00f6nnten daher ansonsten zu Problemen f\u00fchren.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">git clone https:\/\/github.com\/google\/XNNPACK.git\ncd XNNPACK\ngit checkout 579de32260742a24166ecd13213d2e60af862675\nmkdir build\ncd build\ncmake -DXNNPACK_BUILD_TESTS=OFF -DXNNPACK_BUILD_BENCHMARKS=OFF ..\ncmake --build . --config Release<\/code><\/pre>\n<p>Zur\u00fcck im Basis-Verzeichnis laden wir das Modell &#8211; wir nutzen hier SDXL Turbo. Hier m\u00fcssen wir nichts bauen, allerdings einige Gigabyte an Daten aus dem Internet laden:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">cd $baseDir\ngit lfs install\ngit clone --depth=1 https:\/\/huggingface.co\/AeroX2\/stable-diffusion-xl-turbo-1.0-onnxstream<\/code><\/pre>\n<p>Schlussendlich erfolgt das klonen &amp; bauen von OnnxStream:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">cd $baseDir\ngit clone https:\/\/github.com\/vitoplantamura\/OnnxStream.git\ncd OnnxStream\/src\nmkdir build\ncd build\ncmake -DMAX_SPEED=ON -DXNNPACK_DIR=$baseDir\/XNNPACK ..\ncmake --build . --config Release<\/code><\/pre>\n<p>Nun k\u00f6nnen wir die erstellte Bin\u00e4rdatei namens <strong>sd<\/strong> nutzen, um Bilder zu generieren. Daf\u00fcr wird ihm der Pfad zum Model \u00fcbergeben, das zuvor heruntergeladen wurde. Der Promt gibt an, welches Bild generiert werden soll. Weitere Parameter sind teilweise in Abh\u00e4ngigkeit vom Modell verf\u00fcgbar &#8211; etwa ein negativer Promt, um bestimmte Beschreibungen auszuschlie\u00dfen, die man auf keinen Fall haben m\u00f6chte (von SDXL Turbo nicht unterst\u00fctzt).<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">cd $baseDir\/OnnxStream\/src\/build\/\ntime .\/sd --turbo --rpi --models-path $baseDir\/stable-diffusion-xl-turbo-1.0-onnxstream --prompt &quot;An astronaut riding a horse on Mars&quot; --steps 1 --output astronaut.png<\/code><\/pre>\n<p>F\u00fcr die bequeme Installation habe ich ein Skript geschrieben, das alle Komponenten nacheinander installiert:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">#!\/bin\/bash\nset -e\nexport baseDir=\/home\/u-labs\/onxx-stream\nmkdir $baseDir\ncd $baseDir\n\ncommand -v cmake &gt;\/dev\/null || sudo apt-get install -y cmake\ncommand -v git-lfs &gt;\/dev\/null || sudo apt-get install -y git-lfs\n\ngit clone https:\/\/github.com\/google\/XNNPACK.git\ncd XNNPACK\ngit checkout 579de32260742a24166ecd13213d2e60af862675\nmkdir build\ncd build\ncmake -DXNNPACK_BUILD_TESTS=OFF -DXNNPACK_BUILD_BENCHMARKS=OFF ..\ncmake --build . --config Release\n\ncd $baseDir\ngit lfs install\ngit clone --depth=1 https:\/\/huggingface.co\/AeroX2\/stable-diffusion-xl-turbo-1.0-onnxstream\n\ncd $baseDir\ngit clone https:\/\/github.com\/vitoplantamura\/OnnxStream.git\ncd OnnxStream\/src\nmkdir build\ncd build\ncmake -DMAX_SPEED=ON -DXNNPACK_DIR=$baseDir\/XNNPACK ..\ncmake --build . --config Release\n\n# Aufruf\n#cd $baseDir\/OnnxStream\/src\/build\/\n#time $baseDir\/sd --turbo --rpi --models-path $baseDir\/stable-diffusion-xl-turbo-1.0-onnxstream --prompt &quot;An astronaut riding a horse on Mars&quot; --steps 1 --output astronaut.png<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Das Wichtigste zum Experimentieren: Der &#8222;seed&#8220;<\/h2>\n<p>Ein generelles Problem bei KI\/ML ist Reproduzierbarkeit. Wer ChatGPT &amp; co. bereits ausprobiert hat, wird wissen: Dreimal die gleiche Frage (v.a. in einer neuen Instanz) zu stellen, wird selten dreimal zur gleichen Antwort f\u00fchren. Zumindest bei der Bildgenerierung gibt es mit dem Seed eine Nummer, die das erm\u00f6glichen soll. Das ist vor allem zum Experimentieren mit anderen Parametern hilfreich.<sup data-fn=\"e2fee253-18dc-42a3-b320-a690de839d08\" class=\"fn\"><a href=\"#e2fee253-18dc-42a3-b320-a690de839d08\" id=\"e2fee253-18dc-42a3-b320-a690de839d08-link\">3<\/a><\/sup> Ansonsten ist unklar, ob eine Ver\u00e4nderung aufgrund eines Parameters entstanden ist, oder eher zuf\u00e4llig, wie folgendes Beispiel zeigt. Der Seed ist eine frei w\u00e4hlbare Nummer. Es spielt keine Rolle, welchen Wert man nimmt &#8211; wichtig ist nur, dass er zur Reproduzierbarkeit identisch bleibt.<\/p>\n<p>Ich habe jeweils den Promt &#8222;fairy tale landscape hq high resolution&#8220; verwendet und lediglich die Schritte erh\u00f6ht: Bild 1 wurde mit <code class=\"\" data-line=\"\">--steps 1<\/code> generiert, dann <code class=\"\" data-line=\"\">--steps 2<\/code> und <code class=\"\" data-line=\"\">--steps 3<\/code>. Wie zu erwarten ist das Bild in drei Schritten detaillierter und farbenfroher, doch es hat sich auch inhaltlich deutlich ver\u00e4ndert. Beispielsweise der Baum links, der kleine Wasserfall, weniger T\u00fcrme usw.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step-1024x341.jpg\" alt=\"\" class=\"wp-image-12153\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step-1024x341.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step-300x100.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step-768x256.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step-640x213.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step-510x170.jpg 510w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/13_3-step.jpg 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Nutzen wir den gleichen Promt mit einem Seed (z.B. <code class=\"\" data-line=\"\">--seed 22849<\/code>), sieht das Ergebnis anders aus. Detailver\u00e4nderungen kann es nat\u00fcrlich auch hier geben, da durch zus\u00e4tzliche Schritte nicht nur vorhandenes feiner, sondern ggf. zudem erweitert wird. Die Unterschiede fallen hier jedoch geringer und reproduzierbarer aus. Das kann an anderer Stelle ebenfalls n\u00fctzlich sein &#8211; etwa, um mit negativen Promts zu experimentieren (sofern vom Modell unterst\u00fctzt). Oder um Details zu ver\u00e4ndern: Wenn man mit dem generierten Motiv zufrieden ist, aber beispielsweise das Gesicht einer Person nur l\u00e4cheln statt lachen soll. <\/p>\n<p>Im Folgenden Beispiel habe ich den identischem Promt mit Seed 22849 verwendet und wieder mit Schritten von 1 bis 3 generieren lassen. Das Motiv sieht anders aus als die Vorherigen, da ein zuf\u00e4llig generierter Seed zum Einsatz kommt, wenn man keinen explizit angibt. Da wir einen angegeben habe, bleibt das Motiv im Kern gleich. Lediglich Details kommen hinzu, wie etwa die Br\u00fccke links, welche erst ab 3 Schritten als solche erkennbar wird.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed-1024x341.jpg\" alt=\"\" class=\"wp-image-12176\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed-1024x341.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed-300x100.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed-768x256.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed-640x213.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed-510x170.jpg 510w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/3steps-gleicher-seed.jpg 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Was hat es mit den Schritten (&#8211;<em>steps<\/em>) auf sich?<\/h2>\n<p>K\u00fcnstlich generierte Bilder werden oft in mehreren Schritten generiert: Der Generationsprozess auf Basis des Text-Promts wiederholt sich und ergeben zusammen das fertige Bild. Als Faustformel kann man sagen: Je mehr Schichten, um so detaillierter und hochqualitativer wird das Ergebnis. Vereinzelt ver\u00e4ndert sich das Bild, weil Details hinzugef\u00fcgt oder verlagert werden. Aber es wird sich nicht komplett um 180 Grad drehen.<\/p>\n<p>Bereits in nur einem Schritt generiert OnnxStream ansehnliche Ergebnisse, die oft etwas verwischt nach \u00d6lzeichnungen aussehen. Das variiert je nach eingesetztem Promt. Ab drei Schritten erh\u00f6ht sich die Qualit\u00e4t &amp; Detailtiefe deutlich sichtbar, wie folgendes Beispiel zeigt. Alle wurden mit jeweils 1, 2 und 3 Schritten (von links nach rechts) generiert, sofern nicht anders angegeben. <\/p>\n<p>Unendlich steigern l\u00e4sst sich dies nicht: Da mit jedem Schritt zus\u00e4tzliche Informationen entstehen, wirkt das Bild irgendwann \u00fcbers\u00e4ttigt.<sup data-fn=\"a387e6fd-95fc-4df1-befc-db5f09bc1000\" class=\"fn\"><a href=\"#a387e6fd-95fc-4df1-befc-db5f09bc1000\" id=\"a387e6fd-95fc-4df1-befc-db5f09bc1000-link\">4<\/a><\/sup> Dies demonstrieren folgende Beispiele, welche mit dem Promt <strong>&#8222;A cinematic shot of a raccoon in the water of the wood&#8220;<\/strong> und gleichem Seed (siehe n\u00e4chster Abschnitt) generiert wurden: Im ersten Bild sind 5 Schritte zu sehen, es wirkt nat\u00fcrlich. Das Zweite zeigt 7 Schritte und ist etwas detaillierter, wirkt im direkten Vergleich bereits leicht \u00fcbers\u00e4ttigt. Sp\u00e4testens das letzte Bild wirkt mit seinen 10 Schritten unnat\u00fcrlich. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10-1024x341.jpg\" alt=\"\" class=\"wp-image-12179\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10-1024x341.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10-300x100.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10-768x256.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10-640x213.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10-510x170.jpg 510w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/racoon_5-7-10.jpg 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Das muss nicht zwingend schlecht sein: Es gibt Anwendungsf\u00e4lle, bei denen genau das erw\u00fcnscht ist. Au\u00dferdem kommt es zudem auf das Motiv (und damit den eingegebenen Promt) an, wie sich ein Bild mit steigender Anzahl an Schritten entwickelt. Bei Comic-Stil beispielsweise werden die Motive detaillierter, heller und kr\u00e4ftiger, wie unser zuvor bereits eingesetzter Promt &#8222;fairy tale landscape hq high resolution&#8220; (wieder mit gleichem Seed) zeigt. Hier wurde mit 4, 6 und 8 Schritten generiert. Ab Schritt 4 sind beispielsweise die Konturen der Blumen deutlich zu erkennen und die Br\u00fccke hat ein ebenfalls detailliert erkennbaren Zaun erhalten. Vereinzelt k\u00f6nnen auch mal kleinere Details verschwinden: Die V\u00f6gel am Horizont sind im letzten Bild nicht mehr da und auch der vordere Weg hat seine sichtbaren Konturen verloren. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8-1024x341.jpg\" alt=\"\" class=\"wp-image-12182\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8-1024x341.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8-300x100.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8-768x256.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8-640x213.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8-510x170.jpg 510w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/18_steps-4-6-8.jpg 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Man sollte sich dar\u00fcber im klaren sein, um es gezielt f\u00fcr optimale Ergebnisse einsetzen zu k\u00f6nnen. F\u00fcr allt\u00e4gliche Bilder ist ein Bereich von 3-6 oft sinnvoll. Dieser generiert in meinen Tests oft qualitativ ansehnliche, farbenfrohe Bilder. F\u00fcr Comicartige Darstellungen k\u00f6nnen h\u00f6here Werte zu mehr S\u00e4ttigung f\u00fchren.<\/p>\n<h3 class=\"wp-block-heading\">Eine kleine Umgebung f\u00fcr Experimente<\/h3>\n<p>Zum experimentieren habe ich mir f\u00fcr diesen Artikel eine minimalistische Testumgebung eingerichtet: Sie besteht aus einem Skript, dass zu verschiedenen Promts Bilder mit dem gleichen Seed in jeweils 1-8 Schritten generiert. So kann ich mehrere Promts angeben und w\u00e4hrend der l\u00e4nger andauernden Generierung etwas anderes machen. Zu beachten ist, dass euer angemeldeter Nutzer (hier <em>u-labs<\/em>) Rechte auf <code class=\"\" data-line=\"\">\/var\/www\/html<\/code> ben\u00f6tigt, um dort Bilder ablegen zu k\u00f6nnen.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">sudo chown $USER -R \/var\/www\/html<\/code><\/pre>\n<p>Das Skript zur Generierung legt den Zielordner an, sofern die Rechte daf\u00fcr vorhanden sind. Dies ist wichtig, weil OnxxStream noch keine Pr\u00fcfung durchf\u00fchrt und auch keine Fehlermeldungen anzeigt, wenn der Zielpfad nicht existiert.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">#!\/bin\/bash\ntarget=\/var\/www\/html\/img\nbaseDir=\/home\/u-labs\/sd-rpi\nendStep=8\npromts=(\n\t&quot;Penguin with lightsaber cyberpunk 2077 environment&quot;\n\t&quot;Penguin with lightsaber cyberpunk 2077 style&quot;\n\t&quot;Dagobert duck from the ltb comics in his money storage&quot;\n)\n\nmkdir -p $target\nstartImgId=$(find $target -type f -name &#039;*.png&#039; -printf &quot;%f\\n&quot; | sort -r | grep -E &quot;([0-9]{1,})\\\\-steps[0-9]{1,}&quot; | head -1 | awk -F&#039;-&#039; &#039;{print $1}&#039;)\nif [[ -z &quot;$startImgId&quot; ]]; then\n    echo &quot;Keine zum Namensschema passenden Bilder gefunden, setze erste Id auf 1&quot;\n    startImgId=1\nelse\n    nextImgId=$(expr $startImgId + 1)\n    echo &quot;$startImgId war die Id des letzten Bildes in $target, fahre mit $nextImgId fort&quot;\n    startImgId=$nextImgId\nfi\n\nfor i in &quot;${!promts[@]}&quot;; do\n\trealId=$(expr $i + $startImgId)\n\tpromt=${promts[$i]}\n\tseed=$((1000 + RANDOM % 100000))\n\techo &quot;[$realId] Promt: &#039;$promt&#039; - Steps: $i Seed: $seed&quot;\n\tfor step in $(seq $endStep); do\n\t\ttime $baseDir\/OnnxStream\/src\/build\/sd --turbo --models-path $baseDir\/stable-diffusion-xl-turbo-1.0-onnxstream --prompt &quot;$promt&quot; --steps $step --seed $seed --output $target\/$realId-steps$step.png\n\tdone\ndone<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li><strong>$target<\/strong> ist der Ziel-Pfad, in den in den die generierten Bilder abgelegt werden. Dieser muss existieren, also zuvor mit <code class=\"\" data-line=\"\">mkdir<\/code> anlegen.<\/li>\n<li><strong>$baseDir<\/strong> entspricht unserem Arbeitsverzeichnis aus dem vorherigen Skript &#8211; hier liegt OnnxStream zusammen mit seinen Abh\u00e4ngigkeiten.<\/li>\n<li><strong>$endStep <\/strong>gibt an, wie viele Schritte (angefangen von 1) jeweils generiert werden sollen. 8 bedeutet, das Skript generiert f\u00fcr jeden Promt jeweils ein Bild in einem Schritt, zwei Schritten, drei Schritten usw, bis die hier angegebene Zahl erreicht wurde. Daf\u00fcr kommt ein zuf\u00e4llig pro Id generierter Seed zum Einsatz, um m\u00f6glichst reproduzierbare Bilder zu erhalten.<\/li>\n<li><strong>$promts<\/strong> enth\u00e4lt die gew\u00fcnschten Zeichenketten als Array, zu denen Bilder generiert werden sollen. Beachte, dass viele Modelle entweder nur Englisch verstehen, oder zumindest in dieser Sprache am besten funktionieren.<\/li>\n<\/ul>\n<p>Anschlie\u00dfend lassen sich diese mit einer extrem minimalistischen Weboberfl\u00e4che einsehen: Als einfache Grundlage habe ich <a href=\"https:\/\/u-labs.de\/portal\/dynmaische-webseiten-apache2-webserver-mit-php-und-mysql-mariadb-auf-dem-raspberry-pi-installieren-einfachster-weg-fuer-anfaenger-lamp\/\">Apache mit PHP installiert<\/a>. Ein Skript listet alle Bilder darin auf und zeigt sie verkleinert an, um einen \u00dcberblick zu erhalten. Grobe Unterschiede zu den verschiedenen Schritten lassen sich damit erkennen. Zus\u00e4tzlich ist das originale Bild verlinkt, um es bei Bedarf in voller Aufl\u00f6sung \u00f6ffnen zu k\u00f6nnen. Voraussetzung ist daf\u00fcr die Einhaltung des Namensschemas: Jedes Bild erh\u00e4lt eine fortlaufende Nummer (z.B. 3) und wird nach dem Schema <code class=\"\" data-line=\"\">${nummer}-steps${step}.png<\/code> benannt. Beispielsweise <code class=\"\" data-line=\"\">3-steps2.png<\/code>, dies steht f\u00fcr Bild Nr. 3, welches in 2 Schritten generiert wurde.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ cat \/var\/www\/html\/index.php \n&lt;?php\n$files = glob(&#039;img\/*.png&#039;);\nusort($files, function($a, $b) {\n    return filemtime($b) - filemtime($a);\n});\n$fileGroups = array();\nforeach($files as $file) {\n    if(preg_match(&quot;\/([0-9]{1,})\\\\-steps[0-9]{1,}\/&quot;, $file, $matches)) {\n\t$imgId = (int)$matches[1];\n\t$fileGroups[$imgId][] = $file;\n    }\n}\n?&gt;\n&lt;style&gt;\n* { font-family: ui-sans-serif,system-ui,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Helvetica Neue,Arial; }\n&lt;\/style&gt;\n\n&lt;?php foreach($files as $file): ?&gt;\n\t&lt;a href=&quot;&lt;?=$file?&gt;&quot; target=&quot;_blank&quot;&gt;\n\t\t&lt;img src=&quot;&lt;?=$file?&gt;&quot; style=&quot;height:200px&quot; \/&gt;\n\t&lt;\/a&gt;\n&lt;?php endforeach; ?&gt;\n\n&lt;h2&gt;Vergleich nach Seed-Gruppen&lt;\/h2&gt;\n&lt;?php foreach($fileGroups as $imgId =&gt; $files): ?&gt;\n\t&lt;h3&gt;&lt;?=$imgId?&gt;&lt;\/h3&gt;\n\t&lt;?php foreach($files as $file): ?&gt;\n\t\t&lt;a href=&quot;&lt;?=$file?&gt;&quot; target=&quot;_blank&quot;&gt;\n\t\t\t&lt;img src=&quot;&lt;?=$file?&gt;&quot; style=&quot;height:400px&quot; \/&gt;\n\t\t&lt;\/a&gt;\n\t&lt;?php endforeach; ?&gt;\n&lt;?php endforeach; ?&gt;<\/code><\/pre>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"501\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview-1024x501.jpg\" alt=\"\" class=\"wp-image-12193\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview-1024x501.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview-300x147.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview-768x376.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview-1536x752.jpg 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview-640x313.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview-347x170.jpg 347w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/rpi-image-overview.jpg 1873w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Anhand dieser Benennung generiert das Skript weiter unten Gruppen zu den jeweiligen Bildnummern, in denen sie gr\u00f6\u00dfer dargestellt werden. So lassen sich die Bilder in verschiedenen Schritten miteinander vergleichen. Hier sehen wir etwa 8 Schritte (links oben) bis 1 Schritt (rechts unten).<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group-1024x539.jpg\" alt=\"\" class=\"wp-image-12196\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group-1024x539.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group-300x158.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group-768x405.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group-1536x809.jpg 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group-640x337.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group-323x170.jpg 323w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/img-group.jpg 1627w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Nun k\u00f6nnt ihr im Batch-Skript eine beliebige Anzahl an Promts im Array <strong>$promts<\/strong> angeben und anschlie\u00dfend das Skript starten:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ cd ~\/sd-rpi\/OnnxStream\/src\/build\n$ time bash batch-generate.sh<\/code><\/pre>\n<p>Es wird euch die Bilder mit der gew\u00fcnschten Anzahl maximaler Schritte generieren. Nach wenigen Minuten sollte in der Mini-Weboberfl\u00e4che das Erste sichtbar sein. W\u00e4hrend die Generierung l\u00e4uft, kann man etwas anderes machen &#8211; das Skript f\u00e4hrt automatisch mit den restlichen Promts\/Schritten fort.<\/p>\n<h3 class=\"wp-block-heading\">Kurzer Exkurs Promts schreiben<\/h3>\n<p>Gerade Bilder k\u00f6nnen durch einen bestimmte Art ganz anders wirken. Es macht daher Sinn, damit zu beginnen:<\/p>\n<ul class=\"wp-block-list\">\n<li>M\u00f6chte ich beispielsweise eine Fotografie (Photography) oder filmische Aufnahme (Cinematic shot)?<\/li>\n<li>Eine 3D-Grafik (3D Graphics)?<\/li>\n<li>Eine Zeichnung (Drawing) oder ein Gem\u00e4lde (Painting)?<\/li>\n<\/ul>\n<p>Man kann auch einen bestimmten Stil angeben: Abstrakte Kunst, im Stil von XY und so weiter. Teilweise kann &#8222;high quality&#8220; oder &#8222;hq&#8220; f\u00fcr eine bessere Qualit\u00e4t helfen. Als n\u00e4chstes sollte man m\u00f6glichst pr\u00e4zise beschreiben, was man auf dem Bild sehen m\u00f6chte. Sehr allgemeine Formulierungen wie &#8222;A dog&#8220; k\u00f6nnen m\u00f6glicherweise als Inspiration interessant sein &#8211; manch einer m\u00f6chte sich vielleicht sogar \u00fcberraschen lassen. Liefern aber wahrscheinlich etwas anderes, als sich dabei im Kopf gedacht wurde. Besser w\u00e4re beispielsweise &#8222;A large dog with black fur and green eyes in a meadow of flowers in the sunshine&#8220;.<\/p>\n<p>Sollte das Ergebnis noch immer nicht den Vorstellungen entsprechen, muss der Promt weiter verfeinert werden: Gef\u00e4llt einem etwa der Gesichtsausdruck einer Person nicht, gibt man diesen an. Soll die Tageszeit anders sein, schreibt man in den Promt, dass es z.B. Nacht sein soll. Gerade Einsteiger werden erst etwas experimentieren m\u00fcssen. Allerdings ist das Schreiben von Promts kein Hexenwerk &#8211; nach relativ kurzer Zeit lassen sich damit gute Ergebnisse erzielen.<\/p>\n<h3 class=\"wp-block-heading\">Weitere Beispiele<\/h3>\n<p>W\u00e4hrend der Erstellung dieses Beitrages habe ich einige Motive (\u00fcber 40) und zum Vergleichen der Schritte noch mehr einzelne Bilder generiert. Zur Inspiration und als erste Einsch\u00e4tzung, was man erwarten kann, findet ihr im folgenden Abschnitt einen Auszug daraus &#8211; inklusive der Promts, womit sie generiert wurden. F\u00fcr Bilder mit mehreren Schritten habe ich immer einen einzigartigen Seed pro Motiv verwendet.<\/p>\n<h4 class=\"wp-block-heading\">&#8222;A cinematic shot of a baby raccoon wearing an intricate italian priest robe.&#8220; (4, 3 und 2 Schritte, #14)<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"337\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42-1024x337.png\" alt=\"\" class=\"wp-image-12199\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42-1024x337.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42-300x99.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42-768x253.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42-640x211.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42-517x170.png 517w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-42.png 1207w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\">&#8222;Cinematic shot of a cute cat in the nature&#8220; (7, 5 und 3 Schritte, #26)<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"338\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43-1024x338.png\" alt=\"\" class=\"wp-image-12211\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43-1024x338.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43-300x99.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43-768x253.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43-640x211.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43-516x170.png 516w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-43.png 1204w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\">&#8222;Cinematic shot of a rabbit in the nature&#8220; (7, 5 und 3 Schritte, #28)<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"336\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44-1024x336.png\" alt=\"\" class=\"wp-image-12212\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44-1024x336.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44-300x98.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44-768x252.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44-640x210.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44-518x170.png 518w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-44.png 1204w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\">&#8222;Cinematic shot of a bunny in the nature&#8220; (6, 4 und 2 Schritte, #29)<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"337\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45-1024x337.png\" alt=\"\" class=\"wp-image-12213\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45-1024x337.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45-300x99.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45-768x253.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45-640x211.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45-516x170.png 516w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-45.png 1203w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\">&#8222;Cinematic shot of a hamster in the nature&#8220; (8, 5 und 4 Schritte, #30)<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"335\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46-1024x335.png\" alt=\"\" class=\"wp-image-12214\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46-1024x335.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46-300x98.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46-768x251.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46-640x209.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46-520x170.png 520w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-46.png 1206w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\">&#8222;Fantasy world with multiple animals&#8220; (8, 5 und 4 Schritte, #31)<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"336\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47-1024x336.png\" alt=\"\" class=\"wp-image-12215\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47-1024x336.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47-300x98.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47-768x252.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47-640x210.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47-518x170.png 518w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-47.png 1207w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h4 class=\"wp-block-heading\">&#8222;Unicorn on rainbow&#8220; (8, 3 und 1 Schritte, #32)<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"337\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48-1024x337.png\" alt=\"\" class=\"wp-image-12216\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48-1024x337.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48-300x99.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48-768x253.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48-640x211.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48-516x170.png 516w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/01\/grafik-48.png 1203w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n<p>&#8222;K\u00fcnstliche Intelligenz&#8220; (die in Wirklichkeit meist eher maschinelles Lernen ist<sup data-fn=\"a000d4bc-3075-4139-9909-0021d766753e\" class=\"fn\"><a href=\"#a000d4bc-3075-4139-9909-0021d766753e\" id=\"a000d4bc-3075-4139-9909-0021d766753e-link\">5<\/a><\/sup>) entwickelt sich in einem rasanten Tempo weiter. Anfang 2024 sind wir bereits so weit, dass ein Raspberry Pi 5 f\u00fcr unter 100\u20ac in wenigen Minuten beeindruckende Bilder generieren kann. Und zwar nicht blo\u00df \u00fcber einen propriet\u00e4ren Drittanbieter-Clouddienst &#8211; sondern dank quelloffener Software v\u00f6llig kostenlos ohne Einschr\u00e4nkungen.<\/p>\n<p>Hier zeigt sich auch, dass Open Source den kommerziellen Unternehmen dicht auf den Fersen ist. Google sieht daher zu Recht nicht OpenAI\/ChatGPT als gr\u00f6\u00dfte Konkurrenz &#8211; sondern quelloffene KI-Software.<sup data-fn=\"d70028fd-105d-4b38-8e2d-e49829cb13e5\" class=\"fn\"><a href=\"#d70028fd-105d-4b38-8e2d-e49829cb13e5\" id=\"d70028fd-105d-4b38-8e2d-e49829cb13e5-link\">6<\/a><\/sup> Sie steckt bereits in vielen Anwendungen und ist l\u00e4ngst im Bereich KI\/ML aktiv. Es wird spannend bleiben, wie sich diese Branche in den n\u00e4chsten Jahren entwickelt.<\/p>\n<h2 class=\"wp-block-heading\">Quellen<\/h2>\n<ol class=\"wp-block-footnotes\">\n<li id=\"3df9d4b1-7409-4b07-a8e2-a3b44c160b9f\">https:\/\/github.com\/google\/XNNPACK <a href=\"#3df9d4b1-7409-4b07-a8e2-a3b44c160b9f-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 1 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"ae2dce27-e79a-47db-9a3f-8a33831bde99\">https:\/\/github.com\/vitoplantamura\/OnnxStream <a href=\"#ae2dce27-e79a-47db-9a3f-8a33831bde99-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 2 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"e2fee253-18dc-42a3-b320-a690de839d08\">https:\/\/getimg.ai\/guides\/guide-to-seed-parameter-in-stable-diffusion <a href=\"#e2fee253-18dc-42a3-b320-a690de839d08-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 3 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"a387e6fd-95fc-4df1-befc-db5f09bc1000\">https:\/\/getimg.ai\/guides\/interactive-guide-to-stable-diffusion-steps-parameter <a href=\"#a387e6fd-95fc-4df1-befc-db5f09bc1000-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 4 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"a000d4bc-3075-4139-9909-0021d766753e\">https:\/\/www.adtriba.com\/de\/blog\/der-hype-um-ki <a href=\"#a000d4bc-3075-4139-9909-0021d766753e-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 5 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"d70028fd-105d-4b38-8e2d-e49829cb13e5\">https:\/\/futurezone.at\/b2b\/internes-google-dokument-leak-keine-chance-gegen-open-source-ki-kuenstliche-intelligenz\/402437466 <a href=\"#d70028fd-105d-4b38-8e2d-e49829cb13e5-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 6 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Die KI-Revolution ist da: Dank beeindruckender Fortschritte k\u00f6nnen Bilder mittlerweile auf einem Raspberry Pi Einplatinencomputer f\u00fcr weniger als 100 Euro generiert werden. Dieser Beitrag zeigt dir, wie du den Stable Diffusion Port namens OnnxStream auf einem Raspberry Pi spielend leicht installierst &#8211; dank fertigem Skript. Au\u00dferdem liefert er Hintergrundwissen \u00fcber die Funktion der Komponenten sowie &#8230;<\/p>\n","protected":false},"author":5,"featured_media":12225,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"[{\"content\":\"https:\/\/github.com\/google\/XNNPACK\",\"id\":\"3df9d4b1-7409-4b07-a8e2-a3b44c160b9f\"},{\"content\":\"https:\/\/github.com\/vitoplantamura\/OnnxStream\",\"id\":\"ae2dce27-e79a-47db-9a3f-8a33831bde99\"},{\"content\":\"https:\/\/getimg.ai\/guides\/guide-to-seed-parameter-in-stable-diffusion\",\"id\":\"e2fee253-18dc-42a3-b320-a690de839d08\"},{\"content\":\"https:\/\/getimg.ai\/guides\/interactive-guide-to-stable-diffusion-steps-parameter\",\"id\":\"a387e6fd-95fc-4df1-befc-db5f09bc1000\"},{\"content\":\"https:\/\/www.adtriba.com\/de\/blog\/der-hype-um-ki\",\"id\":\"a000d4bc-3075-4139-9909-0021d766753e\"},{\"content\":\"https:\/\/futurezone.at\/b2b\/internes-google-dokument-leak-keine-chance-gegen-open-source-ki-kuenstliche-intelligenz\/402437466\",\"id\":\"d70028fd-105d-4b38-8e2d-e49829cb13e5\"}]"},"categories":[671],"tags":[910,1079,1102],"class_list":["post-12147","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-raspberry-pi","tag-ki","tag-kuenstliche-intelligenz-2","tag-maschinelles-lernen"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/12147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=12147"}],"version-history":[{"count":60,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/12147\/revisions"}],"predecessor-version":[{"id":12231,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/12147\/revisions\/12231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/12225"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=12147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=12147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=12147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}