Wie man ein KI-Bildmodell von sich selbst trainiert
(coryzue.com)- Ich habe ein Projekt ausprobiert, bei dem ich über ein paar Stunden hinweg mein eigenes KI-Bildmodell trainiert habe, um Fotos zu erzeugen, die aussehen, als hätte ich sie selbst aufgenommen.
- Beispiel: ein Bild von mir im „Superman“-Kostüm
- Warum ich es ausprobiert habe: Es klang nach Spaß, war gut geeignet, um mit den Kindern damit zu spielen, und ich konnte mehr über Custom-Modelle und den fortgeschritteneren KI-Bereich lernen
- Vor 12–18 Monaten war dieser Vorgang noch ziemlich kompliziert, inzwischen ist er aber sehr einfach geworden
- Ich habe das Modell in weniger als 2 Stunden erstellt und die gewünschten Bilder bekommen; der Schlüssel war, schnell die richtigen Tools zu finden
Auswahl von Modell/Trainingsmuster
- Benötigte Bestandteile
- Basismodell (base model)
- Trainings-/Fine-Tuning-Technik
- Trainingsdatensatz (ein paar Fotos von sich selbst usw.)
- Viele AIs empfehlen Stable Diffusion, aber weil das von Pieter Levels verwendete Modell Flux bessere Leistung liefern soll, habe ich mich für Flux entschieden
- Es ist zwar nicht das allerneueste SOTA-Modell, aber mehr als gut genug
- Als Trainingsmethode habe ich LoRA (Low-Rank Adaptation) verwendet
- Dabei wird nicht das gesamte Modell neu trainiert, sondern nur der Teil, der mit einem bestimmten „magischen Wort“ verknüpft ist
- Beispiel: Dem Modell wird ein seltenes Wort wie „czue“ beigebracht; wenn dieses Wort im Prompt verwendet wird, spiegelt das Ergebnis die Merkmale des entsprechenden Datensatzes wider
Erstellen des Trainingssatzes
- Man muss mehrere Fotos des zu lernenden Motivs vorbereiten (etwa 10–15 Stück)
- Je abwechslungsreicher Gesichtsausdrücke, Hintergründe, Licht und Perspektiven sind, desto besser
- Idealerweise ist nur eine Person pro Foto zu sehen
- Für das Training wird eine Textbeschreibung benötigt, und darin muss das magische Wort enthalten sein
- Beispiel: "a photo of czue on the beach, wearing a blue shirt"
- Neuere Tools erzeugen Bildbeschriftungen aber automatisch, sodass man die Beschreibungen nicht selbst eingeben muss
Das Modell trainieren
- Anfangs wollte ich lokal trainieren, aber wegen zu wenig GPU und RAM war das schwierig
- Man kann den Code auch direkt auf einem GPU-Cloud-Server ausführen, letztlich habe ich aber Replicate verwendet
- Das ist ein GPU-Mietservice, bei dem sich bereits vorbereitete Rezepte sofort nutzen lassen
- In diesem Fall habe ich das Rezept ostris/flux-dev-lora-trainer verwendet
- Nach dem Erstellen eines Replicate-Kontos muss man die Abrechnungsinformationen einrichten
- Wichtige Parameter
- input_images: Trainingsfotos (zip)
- trigger_word: magisches Wort, z. B. „czue“
- hf_repo_id, hf_token: Hugging Face Repository/Token
- autocaption_prefix: Text, der vor automatisch erzeugte Captions gesetzt wird (z. B. "A photo of czue,")
Das Modell in Hugging Face speichern
- Hugging Face ist eine Plattform zum Speichern und Teilen von Modellen
- Replicate speichert das trainierte Modell zwar ebenfalls irgendwo, aber wenn man es auf Hugging Face hochlädt, lässt es sich leichter mit anderen Tools integrieren
- Nach dem Erstellen von Konto und Modell übergibt man
hf_repo_id- Ein Zugriffstoken kann unter settings/tokens erstellt werden
- Nach Abschluss des Trainings wird eine große Datei namens
lora.safetensors(ca. 180 MB) zu Hugging Face hochgeladen
Bilder mit dem Modell erzeugen
- Nach dem Training folgt der Inference-Schritt, bei dem man Text in das Modell eingibt, um Bilder zu erzeugen
- Man könnte das auch lokal ausprobieren, ich habe aber erneut Replicate verwendet
- Bei lucataco/flux-dev-lora muss nur das Feld hf_lora gesetzt werden
- öffentliche Hugging Face-Repository-ID oder Link zum in Replicate hochgeladenen trainierten Modell
- Bei lucataco/flux-dev-lora muss nur das Feld hf_lora gesetzt werden
- Beispiel: Wenn man "a photo of czue surfing" eingibt, erhält man ein Bild von sich selbst beim Surfen
Das Modell programmatisch ausführen
- Wenn man verschiedene Prompts ausprobieren und die Ergebnisse automatisch speichern will, ist die Nutzung per API-Aufruf praktisch
- Dazu wurde das folgende Python-Skript als Beispiel geschrieben (der vollständige Code ist auf Github zu finden)
# /// script # requires-python = ">=3.12" # dependencies = [ # "replicate", # ] # /// import argparse import os import re import replicate import uuid DEFAULT_MODEL = "czue/me-v1" DEFAULT_COUNT = 1 def get_input(prompt, model=DEFAULT_MODEL, count=DEFAULT_COUNT): return { "prompt": prompt, "hf_lora": model, "num_outputs": count } def main(): parser = argparse.ArgumentParser() parser.add_argument("prompt", help="Prompt for the photo") parser.add_argument("--model", default=DEFAULT_MODEL, help="Model to use (default: %(default)s)") parser.add_argument("--count", default=DEFAULT_COUNT, help="Number of photos to generate (default: %(default)s)", type=int) args = parser.parse_args() input = get_input(args.prompt, args.model, args.count) output = replicate.run( "lucataco/flux-dev-lora:091495765fa5ef2725a175a57b276ec30dc9d39c22d30410f2ede68a3eab66b3", input=input ) output_dir = "output" os.makedirs(output_dir, exist_ok=True) prompt_slug = "-".join(args.prompt.split(" ")[-3:]) prompt_slug = re.sub(r'[^a-zA-Z0-9\-]', '', prompt_slug).lower() for index, item in enumerate(output): file_id = uuid.uuid4().hex[:5] output_path = os.path.join(output_dir, f"{prompt_slug}-{file_id}.webp") with open(output_path, "wb") as file: file.write(item.read()) print(f"Saved photo {output_path}") if __name__ == "__main__": main() - Beispiel für die Verwendung
uv run main.py "a photo of czue, a 40 year old man, writing a blog post" \ --model="czue/me-v1" \ --count=4
Ergebnis
- Die Modellleistung ist schwankend
- Es trifft die Merkmale der Person teilweise recht gut, erzeugt aber manchmal auch eine andere Person
- Wenn man ein bestimmtes Alter, Geschlecht usw. zusätzlich im Prompt angibt, wird es etwas genauer
- Zum Beispiel erzeugt "a photo of czue, a 40 year old man, writing a blog post" relativ konsistente Bilder
- Dagegen waren die Ergebnisse bei "a photo of czue writing a blog post" viel uneinheitlicher
- Wenn man andere Personen mit hinein nimmt, treten Probleme wie vermischte Gesichter auf
- Als ich versuchte, ein Bild zusammen mit Barack Obama zu erzeugen, wurden Teile meines Gesichts auf Obama übertragen und umgekehrt
- Trotzdem war es ausreichend unterhaltsam und nützlich, sodass ich zusammen mit den Kindern viele verschiedene Dinge ausprobieren konnte
Kosten
- Es ist nicht kostenlos, aber auch nicht besonders teuer
- Ich habe insgesamt 3 Modelle für mich und meine Kinder trainiert; jedes kostete etwa ~$2.50
- Die Bildgenerierung kostet ungefähr $0.03 pro Bild, also etwa $1 für 30 Bilder
- Für das gesamte Experiment habe ich weniger als $10 ausgegeben und war zufrieden, dass die Kosten geringer waren als erwartet
- Wenn man sich für KI-Modelltraining und Bildgenerierung interessiert, lässt sich das leichter ausprobieren, als man denkt, und ist einen Versuch wert
5 Kommentare
Ich habe das aus Spaß nachgemacht, und es ist wirklich einfach.
(https://www.youtube.com/watch?v=sNpQ9ULDMoo)
Ich habe allerlei Dinge erstellt und mich eine ganze Weile köstlich amüsiert...
Werden wir am Ende nicht versuchen, bevor wir sterben, ein Modell, das wie ich trainiert wurde, ins Netzwerk hochzuladen und dann zu sterben? Wie ein Überlebensinstinkt ... Auch wenn das nicht das „Ich“ ist.
Als ich die Technologie gesehen habe, musste ich an einen Roman denken, den ich deshalb gern empfehlen möchte. Es handelt sich um die Kurzgeschichte „Chronos“ aus dem Erzählband Bisutbangul Pong der Schriftstellerin Lee Yu-ri. Darin geht es um einen KI, der einen Menschen behandelt – also um eine KI, die die eigenen Daten speichert und daraus lernt. So wie die Katze in jenem Kommentar. Eine an Demenz erkrankte Mutter nutzt das, bevor ihre Symptome schlimmer werden. Und die Kinder geraten darüber in Konflikt. Sie finden darin Trost und empfinden zugleich Schuldgefühle. Wenn Sie sich für die Technologie hier oder auch für die Geschichte dieser Katze interessieren, lesen Sie es einmal.
Ein Hacker-News-Kommentar fällt ins Auge
Es gibt auch einen informativen Kommentar
„Jede hinreichend fortschrittliche Technologie ist von Magie nicht zu unterscheiden.“ – Arthur C. Clarke
Noch vor gerade einmal zwei Jahren hätte man so etwas nur in einem SF-Film gesehen, und jetzt erleben wir tatsächlich in Echtzeit, wie Magie Wirklichkeit wird 😳