Viele Einhörner und eine Frau mit falschen Haaren

  Ralf Hersel   Lesezeit: 11 Minuten  🗪 5 Kommentare Auf Mastodon ansehen

Stable Diffusion ist ein freies KI-Modell zur Bildgenerierung. Hier gibt es nützliche Anleitungen zur Nutzung des Bildgenerators.

viele einhörner und eine frau mit falschen haaren

Wie ich in einem anderen Artikel bereits erwähnt habe, nehme ich zurzeit an einem mehrwöchigen KI-Kurs teil. Teile des Gelernten möchte ich gerne an die Community weitergeben, insbesondere wenn es sich um Freie Werkzeuge handelt. In diesem Beitrag geht es um den Bildgenerator Stable Diffusion (SD).

Um zu verstehen, worum es bei diesem Modell und den zugehörigen Werkzeugen geht, zitiere ich die Wikipedia:

Stable Diffusion ist ein Deep-Learning-Text-zu-Bild-Generator. Die Open-Source-Software wird hauptsächlich zur Generierung detaillierter Bilder auf der Grundlage von Textbeschreibungen verwendet, kann aber auch für andere Aufgaben wie Inpainting, Outpainting und die Erzeugung von Bild-zu-Bild-Übersetzungen auf der Grundlage einer schriftlichen Aufforderung (Prompt) eingesetzt werden.

Stable Diffusion verwendet ein latentes Diffusionsmodell als Variante eines tiefen generativen neuronalen Netzes, das von der CompVis-Gruppe an der LMU München in Zusammenarbeit von Stability AI, CompVis LMU und Runway mit Unterstützung von EleutherAI und LAION entwickelt wurde.

Im Oktober 2022 erhielt Stability AI in einer von Lightspeed Venture Partners und Coatue Management angeführten Finanzierungsrunde 101 Millionen US-Dollar.

Der Code und die Modellgewichte von Stable Diffusion wurden veröffentlicht und können auf vielen Consumer-Hardware-Systemen ausgeführt werden, sofern diese mit einer GPU mit mindestens 8 GB Grafikspeicher ausgestattet sind. Die Verwendung auf weniger leistungsfähiger Hardware bzw. ohne GPU-Beschleunigung ist mittlerweile ebenfalls möglich, jedoch deutlich langsamer. Dieser offene Ansatz stellt eine Abkehr von proprietären Text-zu-Bild-Modellen wie DALL-E und Midjourney dar, die nur über Cloud-Dienste zugänglich sind.

In meinem Kurs durfte ich verschiedene KI-Bildgeneratoren ausprobieren; tatsächlich gibt es gar nicht so viele. Zu den Bekannten gehören:

  • DALL-E von OpenAI (dieser Generator wird auch verwendet, wenn ihr in ChatGPT ein Bild generiert)
  • Midjourney vom gleichnamigen Forschungslabor
  • Firefly von Adobe
  • Imagen von Google
  • Stable Diffusion von Stability.ai

Sucht man im Internet nach "Stable Diffusion" (SD) gerät man vom Hölzchen zum Stöckchen. Es gibt diverse Anbieter, die eine Weboberfläche für SD anbieten. Selbstverständlich gibt es von Stability.ai ein Bezahlmodell, welches einem Zugriff auf deren Lösung Stable Assistant gibt. Doch wo ist die Freie Lösung?

Man findet sie bei Hugging Face; das ist das GitHub für KI-Modelle. Wer dort nach "Stable Diffusion" sucht, landet beim grossen SD 3.5 Modell. Die Seite enthält alle Informationen über dieses Modell und erlaubt euch auch, einen Prompt abzusetzen, falls man einen Account bei Hugging Face hat. Hier ist ein Beispiel:

Wem das zu nervig ist, kann auch das Hölzchen oder Stöckchen verwenden. Hinter dem Hölzchen steckt die Seite https://stabledifffusion.com/ (Achtung: mit 3 f). Ich habe nicht tiefer gegraben, um herauszufinden, welche Bude dahintersteckt. Zumindest funktioniert die Seite ziemlich gut. Hier ist ein Beispiel mit demselben Prompt wie vorher:

Beim Stöckchen handelt es sich um die Seite https://stablediffusionweb.com/de. Hinter dieser Seite steht die Firma Black Technology LTD. Hier ist, was diese Seite zum Einhorn-Prompt liefert: Nichts, man braucht einen Account und ich habe keine Lust, den hundertsten Account auf einer Seite einzurichten, die das Wort "Black" im Namen trägt.

Nach meiner Erfahrung erzeugt Stable Diffusion die besten Bildergebnisse. Bei den anderen Generatoren hat man oft den Eindruck, dass ein Filter über dem Bild liegt, der das Bild dem Generator zuordenbar macht. Die erzeugten Bilder sehen dann z. B. 'typisch für Midjourney' aus. Böse Zungen (mein Kursleiter) behaupten, dass Midjourney im Hintergrund Stable Diffusion verwendet und einen Filter auf die Ergebnisse legt. Doch diese Behauptung ist nicht bewiesen.

Die Lizenz der SD-Modelle ist nicht wirklich frei. Es handelt sich um eine Community License: Free for research, non-commercial, and commercial use for organizations or individuals with less than $1M in total annual revenue.

Nun gibt es mehrere Möglichkeiten, SD zu verwenden, die oben genannt wurden. Wer eine fette Grafikkarte und ausreichend Speicherplatz hat, kann sich das SD-Modell-large (16.5 GB) von Hugging Face herunterladen und findet dort auch Informationen, wie man auf das Modell zugreifen kann. Es gibt auch kleinere Modelle von SD. Ich erkläre das hier nicht; alle nötigen Informationen findet ihr bei Hugging Face.

Bilder per API generieren

Wie wäre es, wenn man das grosse Modell nicht herunterladen müsste, sondern über eine API darauf zugreifen könnte? Dann schauen wir doch mal, ob das geht. Zuerst benötigt man einen API-Key. Wie man diesen erhält, steht auf dieser Seite. Von dort landet man bei Google-Colab und muss durch ein paar brennende Reifen springen, bevor man den Key erhält. Fragt mich nicht, warum Google dabei seine Finger im Spiel hat. Eigentlich sollte man an dieser Stelle bereits aufhören. Mit Freier Software, bzw. Freien Daten, hat das nicht viel zu tun. Egal, Augen zu und weiter.

Sobald ihr den API-Key von Stable Diffusion erhalten habt, könnt ihr dieses Python-Skript verwenden, welches ihr auch hier findet. Nennt das Skript zum Beispiel 'sd.py':

#!/usr/bin/env python3

import requests

response = requests.post(
    f"https://api.stability.ai/v2beta/stable-image/generate/sd3",
    headers={
        "authorization": f"Bearer sk-kBJIKzz..und so weiter und so fort",
        "accept": "image/*"
    },
    files={"none": ''},
    data={
        "prompt": "hyperrealistic unicorn",
        "output_format": "jpeg",
    },
)

if response.status_code == 200:
    with open("./unicorn.jpg", 'wb') as file:
        file.write(response.content)
else:
    raise Exception(str(response.json()))

Euren API-Key kopiert ihr in die response-Zeile, und zwar hinter 'Bearer '. Das Skript ist so simpel, dass ich es hier nicht genauer erkläre. Nur so viel:

  • import requests stellt das gleichnamige Standardmodul von Python bereit, um mit dem Internet zu kommunizieren.
  • response = request.post ruft die SD-Schnittstelle auf und übergibt die relevanten Informationen (Key, Prompt)
  • Falls der Aufruf funktioniert hat (code 200) wird die Rückmeldung (response.content) als JPG-Datei gespeichert.

Dann macht ihr das Python-Skript ausführbar und startet es im Terminal mit: python sd.py oder ./sd.py. Dann dauert es eine Weile, bis euer Bild generiert ist. Sobald das Skript fertig ist, findet ihr in meinem Beispiel die Datei unicorn.jpg im selben Verzeichnis. Bei mir sieht das Einhorn so aus:

Das Python-Skript könnt ihr so umbauen, dass man den Prompt direkt beim Aufruf mitgeben oder in einer Textdatei ablegen kann. Ich empfehle eine Textdatei, weil Prompts oft lang sind und man Teile des Prompts mit Vorteil wiederverwendet. Den Namen des generierten Bildes könnte man aus dem Prompt erzeugen lassen, oder einfach 'bild.jpg' nennen oder einen Zeitstempel als Dateinamen verwenden. Wer Grundlagenwissen in Python hat, sollte das hinbekommen. Ansonsten fragt bitte in den Kommentaren nach.

Was kostet der Spass?

Freie Software ist nicht kostenlos; das haben hoffentlich alle mittlerweile verstanden. Wer sich bei Stability.ai ein Konto klickt, erhält 25 Credits geschenkt; das sind ungefähr 4 Bilder. 1 Credit ist $0.01 wert. Was man dafür erhält, hängt vom Modell ab. Bei SD-3.5-large zahlt man 6.5 Credits pro Bild. Das entspricht 6 Euro-Cent pro Bild. Wer 10 Euro an Stability.ai zahlt, kann dafür 167 Bilder generieren. Dieses Preis-Leistungs-Verhältnis finde ich in Ordnung. Ihr solltet beachten, dass der tatsächliche Preis für ein Bild bei 60 Euro-Cent liegt, weil ihr ca. 10 Versuche braucht, bis euch das Bild gefällt.

Fazit

Nach meinem Ermessen generiert Stable Diffusion die besten KI-Bilder. Die Einhorn-Bilder in diesem Artikel geben das nicht richtig wider, weil Einhörner nicht realistisch sind. Probiert es doch einmal selbst mit eigenen Prompts aus. Hier ist ein realistischeres Beispiel:

Prompt:

A woman on a wooden bridge.
Her long hair blows in the wind.
Her face is laughing.
Show her face from the front.
She is wearing a long white dress.
Style: realistic

Ergebnis (nach zwei Versuchen):

Die Anzahl der Finger stimmt; das Thema stimmt; aber die Haare sind falsch.

Obwohl das SD-Modell nur unter einer halbfreien Lizenz steht (Community License) und es bei den Zugriffen über Webseiten noch schlechter aussieht, kann man SD auf den eigenen Rechner herunterladen und beliebig verwenden. Wer dafür keine ausreichenden Ressourcen hat, kann lokal mit einem API-Key und einem einfachen Python-Skript Bilder generieren und dafür bezahlen. Das ist eine faire Option.

Titelbild: https://pixabay.com/illustrations/ai-generated-unicorn-flowers-stream-8688076/

Quelle: https://de.wikipedia.org/wiki/Stable_Diffusion

Viele weitere Quellen befinden sich im Text.

Tags

KI, stable diffusion, Python, Bildgenerator

chris_blues
Geschrieben von chris_blues am 9. Dezember 2024 um 18:05

Was stimmt denn mit den Haaren nicht? Lange Haare vom Winde verweht?

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 9. Dezember 2024 um 21:26

In Kopfnähe sehen die Haare gut aus. Aber schau dir die Haare ab der Schulter an: zu füllig, zu dicht, zu lang, die Farben sind übertrieben. Niemand hat solche Haare; es wirkt nicht realistisch. Das Gesicht der Frau wurde gut generiert und wirkt mit den Falten um die Augen sehr echt. Auch am Körper und dem Kleid ist nichts auszusetzen. Doch wenn ich mir jetzt die Hände genauer ansehe, kommen sie mir komisch vor. Sie wirken etwas "verkrüppelt". Sorry für dieses Wort - mir fällt keine treffendere Beschreibung ein. Von diesen Details abgesehen, halte ich das Bild für ein gutes Ergebnis.

Clyde F.
Geschrieben von Clyde F. am 9. Dezember 2024 um 23:10

...die Hände wurden von (an sich generativ gemeinter "KI") planmäßig "VERHUNZT" ;)

...und die Haare sehen tatsächlich "modelliert" aus, fast wie Knete. Der Rest scheint mir aber auch aus meiner bescheidenen Sicht durchaus recht gelungen.

Peter
Geschrieben von Peter am 10. Dezember 2024 um 06:19

Bis vor ein paar Wochen gabs "Pinokio" als Flatpak: Da konnte man sich das lokale Generator-Modell und das Frontend mit ein paar Klicks zusammenbasteln und runterladen. Wirklich toll! Leider hab ich keine Ahnung, wo Pinokio hin ist...

Rene
Geschrieben von Rene am 10. Dezember 2024 um 12:24