Anthony Chen 1,2 · Jianjin Xu 3 · Wenzhao Zheng 4 · Gaole Dai 1 · Yida Wang 5 · Renrui Zhang 6 · Haofan Wang 2 · Shanghang Zhang 1*
1 Peking University · 2 InstantX Team · 3 Carnegie Mellon University · 4 UC Berkeley · 5 Li Auto Inc. · 6 CUHK
Trainingsfreies regionales Prompting für Diffusionstransformatoren (Regional-Prompting-FLUX) ermöglicht Diffusionstransformatoren (d. h. FLUX) mit feinkörniger kompositorischer Text-zu-Bild-Generierungsfähigkeit auf trainingsfreie Weise. Empirisch zeigen wir, dass unsere Methode hochwirksam und mit LoRA und ControlNet kompatibel ist.
Wir schließen viel schneller als die RPG-basierte Implementierung und beanspruchen dennoch weniger GPU-Speicher .
[05.11.2024] Wir veröffentlichen den Code, probieren Sie ihn gerne aus!
[05.11.2024] Wir veröffentlichen den technischen Bericht!
Regionale Masken | Konfiguration | Generiertes Ergebnis |
---|---|---|
Rot: Cocktailregion (xyxy: [450, 560, 960, 900]) Grün: Tabellenbereich (xyxy: [320, 900, 1280, 1280]) Blau: Hintergrund | Basis-Eingabeaufforderung: „Ein tropischer Cocktail auf einem Holztisch am Strand bei Sonnenuntergang.“ Hintergrundaufforderung: „Ein Foto“ Regionale Hinweise:
| |
Rot: Regenbogenregion (xyxy: [0, 0, 1280, 256]) Grün: Schiffsregion (xyxy: [0, 256, 1280, 520]) Gelb: Fischregion (xyxy: [0, 520, 640, 768]) Blau: Schatzregion (xyxy: [640, 520, 1280, 768]) | Basis-Eingabeaufforderung: „Ein majestätisches Schiff segelt unter einem Regenbogen, während lebendige Meeresbewohner durch das kristallklare Wasser gleiten und die Wunder der Natur verkörpern, während eine alte, rostige Schatztruhe auf dem Meeresboden verborgen liegt.“ Regionale Hinweise:
| |
Rot: Frau mit Fackelregion (xyxy: [128, 128, 640, 768]) Grün: Hintergrund | Basis-Eingabeaufforderung: „Eine alte Frau steht feierlich da und hält eine lodernde Fackel in der Hand, während im Hintergrund eine erbitterte Schlacht tobt, die sowohl Stärke als auch Tragödie in einer historischen Kriegsszene einfängt.“ Hintergrundaufforderung: „Ein Foto.“ Regionale Hinweise:
| |
Rot: Hunderegion (assets/demo_custom_0_mask_0.png) Grün: Cat-Region (assets/demo_custom_0_mask_1.png) Blau: Hintergrund | Basis-Eingabeaufforderung: „Hund und Katze sitzen auf üppigem grünem Gras, in einer sonnigen Umgebung im Freien.“ Hintergrundaufforderung: „Ein Foto“ Regionale Hinweise:
| Hinweis: Die Generierung mit der Segmentierungsmaske ist eine experimentelle Funktion. Das generierte Bild ist nicht perfekt durch die Regionen eingeschränkt. Wir gehen davon aus, dass dies daran liegt, dass die Maske während des Downsampling-Prozesses eine Verschlechterung erleidet. |
Regionale Masken | Konfiguration | Generiertes Ergebnis |
---|---|---|
Rot: Dinosaurierregion (xyxy: [0, 0, 640, 1280]) Blau: Stadtregion (xyxy: [640, 0, 1280, 1280]) | Basis-Eingabeaufforderung: „Skizzierter Stil: Ein niedlicher Dinosaurier, der in einer fröhlichen Szene spielerisch winzige Feuerwolken über eine Cartoon-Stadt bläst.“ Regionale Hinweise:
| |
Rot: UFO-Region (xyxy: [320, 320, 640, 640]) | Basis-Eingabeaufforderung: „Ein niedliches UFO im Cartoon-Stil, das über einer sonnigen Stadtstraße schwebt. Der künstlerische Stil verbindet Realität und Illustrationselemente.“ Hintergrundaufforderung: „Ein Foto“ Regionale Hinweise:
|
Regionale Masken | Konfiguration | Generiertes Ergebnis |
---|---|---|
Rot: Erste Fahrzeugregion (xyxy: [0, 0, 426, 968]) Grün: Zweite Autoregion (xyxy: [426, 0, 853, 968]) Blau: Dritte Fahrzeugregion (xyxy: [853, 0, 1280, 968]) | Basis-Eingabeaufforderung: „Drei Hochleistungssportwagen, rot, blau und gelb, rasen Seite an Seite auf einer Stadtstraße.“ Regionale Hinweise:
| |
Rot: Frauenregion (xyxy: [0, 0, 640, 968]) Grün: Strandregion (xyxy: [640, 0, 1280, 968]) | Basis-Eingabeaufforderung: „Eine Frau, die an einem wunderschönen Strand mit malerischem Blick auf die Küste spaziert.“ Regionale Hinweise:
|
Um die Reproduzierbarkeit zu gewährleisten, verwenden wir frühere Commits aus dem Diffusor-Repo, da wir festgestellt haben, dass neue Diffusor-Versionen möglicherweise zu anderen Ergebnissen führen.
# install diffusers locally git clone https://github.com/huggingface/diffusers.git cd diffusers # reset diffusers version to 0.31.dev, where we developed Regional-Prompting-FLUX on, different version may experience different results git reset --hard d13b0d63c0208f2c4c078c4261caf8bf587beb3b pip install -e ".[torch]" cd .. # install other dependencies pip install -U transformers sentencepiece protobuf PEFT # clone this repo git clone https://github.com/antonioo-c/Regional-Prompting-FLUX.git # replace file in diffusers cd Regional-Prompting-FLUX cp transformer_flux.py ../diffusers/src/diffusers/models/transformers/transformer_flux.py
Siehe detailliertes Beispiel (einschließlich LoRAs und ControlNets) in infer_flux_regional.py. Nachfolgend finden Sie ein Schnellstartbeispiel.
import Torchfrompipeline_flux_regional import RegionalFluxPipeline, RegionalFluxAttnProcessor2_0pipeline = RegionalFluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", Torch_dtype=torch.bfloat16).to("cuda")attn_procs = {}für Namen inpipeline.transformer. attn_processors.keys():if 'transformer_blocks' in name und name.endswith("attn.processor"):attn_procs[name] = RegionalFluxAttnProcessor2_0()else:attn_procs[name] =pipeline.transformer.attn_processors[name]pipeline.transformer.set_attn_processor(attn_procs)## allgemeine Einstellungenimage_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = „Eine uralte Frau steht feierlich mit einer lodernden Fackel in der Hand, während im Hintergrund ein erbitterter Kampf tobt, der sowohl Stärke als auch Tragödie in einer historischen Kriegsszene einfängt.“background_prompt = „ein Foto“ # standardmäßig eingestellt, aber Wenn Sie den Hintergrund bereichern möchten, können Sie ihn auf einen aussagekräftigeren Wert einstellen promptregional_prompt_mask_pairs = {"0": {"description": "Eine würdevolle Frau in alten Gewändern steht im Vordergrund, ihr Gesicht wird von der Fackel beleuchtet, die sie hoch hält. Ihr Gesichtsausdruck ist von Entschlossenheit und Trauer geprägt, ihre Kleidung und ihr Aussehen spiegeln die historische Zeit wider. Die Fackel wirft dramatische Schatten auf ihre Gesichtszüge, ihre Flammen tanzen lebhaft gegen die Dunkelheit. ","mask": [128, 128, 640, 768] } }## Regionskontrollfaktor settingsmask_inject_steps = 10 # größer bedeutet stärkere Kontrolle, empfohlen zwischen 5-10double_inject_blocks_interval = 1 # 1 bedeutet stärkste Kontrollesingle_inject_blocks_interval = 1 # 1 bedeutet stärkste Kontrollebase_ratio = 0,2 # kleiner bedeutet stärkere Kontrolleregional_prompts = []regional_masks = []background_mask = Torch.ones((image_height, image_width))für region_idx, Region in regional_prompt_mask_pairs.items():description = region['description']mask = region['mask']x1, y1, x2, y2 = maskmask = Torch.zeros ((image_height, image_width))mask[y1:y2, x1:x2] = 1.0background_mask -= maskregional_prompts.append(description)regional_masks.append(mask)# Wenn regionale Masken nicht das gesamte Bild abdecken, fügen Sie eine Hintergrundaufforderung und eine Maske hinzu, wenn background_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append(background_mask )image = Pipeline(prompt=base_prompt,width=image_width, height=image_height,mask_inject_steps=mask_inject_steps,num_inference_steps=num_inference_steps,generator=torch.Generator("cuda").manual_seed(seed),joint_attention_kwargs={"regional_prompts": regional_prompts,"regional_masks": regional_masks,"double_inject_blocks_interval": double_inject_blocks_interval,"single_inject_blocks_interval": single_inject_blocks_interval,"base_ratio": base_ratio}, ).images[0]image.save(f"output.jpg")
Unsere Arbeit wird von HuggingFace und fal.ai gesponsert. Danke!
Wenn Sie Regional-Prompting-FLUX für Ihre Forschung und Anwendungen nützlich finden, zitieren Sie uns bitte mit diesem BibTeX:
@article{chen2024training, title={Trainingsfreie regionale Eingabeaufforderung für Diffusionstransformatoren}, Autor={Chen, Anthony und Xu, Jianjin und Zheng, Wenzhao und Dai, Gaole und Wang, Yida und Zhang, Renrui und Wang, Haofan und Zhang , Shanghang}, Zeitschrift={arXiv preprint arXiv:2411.02395}, Jahr={2024}}
Bei Fragen können Sie uns gerne über [email protected] kontaktieren.