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 Université de Pékin · 2 Équipe InstantX · 3 Université Carnegie Mellon · 4 UC Berkeley · 5 Li Auto Inc. · 6 CUHK
L'invite régionale sans formation pour les transformateurs de diffusion (Regional-Prompting-FLUX) permet aux transformateurs de diffusion (c'est-à-dire FLUX) avec une capacité de génération de texte en image de composition à grain fin, sans formation. Empiriquement, nous montrons que notre méthode est très efficace et compatible avec LoRA et ControlNet.
Nous inférons à une vitesse beaucoup plus rapide que l'implémentation basée sur RPG, tout en utilisant moins de mémoire GPU .
[05/11/2024] Nous publions le code, n'hésitez pas à l'essayer !
[05/11/2024] Nous publions le rapport technique !
Masques régionaux | Configuration | Résultat généré |
---|---|---|
Rouge : région cocktail (xyxy : [450, 560, 960, 900]) Vert : région de la table (xyxy : [320, 900, 1 280, 1 280]) Bleu : arrière-plan | Invite de base : "Un cocktail tropical sur une table en bois sur une plage au coucher du soleil ." Invite d'arrière-plan : "Une photo" Invites régionales :
| |
Rouge : région arc-en-ciel (xyxy : [0, 0, 1280, 256]) Vert : région du navire (xyxy : [0, 256, 1280, 520]) Jaune : région de poisson (xyxy : [0, 520, 640, 768]) Bleu : Région du trésor (xyxy : [640, 520, 1280, 768]) | Invite de base : "Un navire majestueux navigue sous un arc-en-ciel tandis que des créatures marines vibrantes glissent dans les eaux cristallines, incarnant les merveilles de la nature, tandis qu'un ancien coffre au trésor rouillé est caché au fond de l'océan." Invites régionales :
| |
Rouge : Femme avec la région de la torche (xyxy : [128, 128, 640, 768]) Vert : arrière-plan | Invite de base : "Une femme ancienne tient solennellement une torche flamboyante, tandis qu'une bataille féroce fait rage en arrière-plan, capturant à la fois la force et la tragédie d'une scène de guerre historique." Invite d'arrière-plan : "Une photo." Invites régionales :
| |
Rouge : région du chien (assets/demo_custom_0_mask_0.png) Vert : région du chat (assets/demo_custom_0_mask_1.png) Bleu : arrière-plan | Invite de base : "chien et chat assis sur une herbe verte luxuriante, dans un cadre extérieur ensoleillé ." Invite d'arrière-plan : "Une photo" Invites régionales :
| Remarque : La génération avec masque de segmentation est une fonction expérimentale, l'image générée n'est pas parfaitement contrainte par les régions, nous supposons que c'est parce que le masque souffre d'une dégradation lors du processus de sous-échantillonnage. |
Masques régionaux | Configuration | Résultat généré |
---|---|---|
Rouge : Région des dinosaures (xyxy : [0, 0, 640, 1280]) Bleu : Région de la ville (xyxy : [640, 0, 1280, 1280]) | Invite de base : "Style esquissé : un mignon dinosaure soufflant de manière ludique de minuscules bouffées de feu au-dessus d'une ville de dessin animé dans une scène joyeuse." Invites régionales :
| |
Rouge : région OVNI (xyxy : [320, 320, 640, 640]) | Invite de base : "Un joli OVNI de style dessin animé flottant au-dessus d'une rue ensoleillée de la ville, le style artistique mélange la réalité et les éléments d'illustration" Invite d'arrière-plan : "Une photo" Invites régionales :
|
Masques régionaux | Configuration | Résultat généré |
---|---|---|
Rouge : première région de voiture (xyxy : [0, 0, 426, 968]) Vert : deuxième région de voiture (xyxy : [426, 0, 853, 968]) Bleu : troisième région de voiture (xyxy : [853, 0, 1280, 968]) | Invite de base : "Trois voitures de sport hautes performances, rouge, bleue et jaune, courent côte à côte dans une rue de la ville" Invites régionales :
| |
Rouge : région femme (xyxy : [0, 0, 640, 968]) Vert : région de plage (xyxy : [640, 0, 1280, 968]) | Invite de base : "Une femme marchant le long d'une belle plage avec une vue panoramique sur la côte ." Invites régionales :
|
Nous utilisons la validation précédente du dépôt des diffuseurs pour garantir la reproductibilité, car nous avons constaté que la nouvelle version des diffuseurs peut donner des résultats différents.
# 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
Voir un exemple détaillé (y compris les LoRA et les ControlNets) dans infer_flux_regional.py. Vous trouverez ci-dessous un exemple de démarrage rapide.
import torchfrom pipeline_flux_regional import RegionalFluxPipeline, RegionalFluxAttnProcessor2_0pipeline = RegionalFluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", torch_dtype=torch.bfloat16).to("cuda")attn_procs = {}pour le nom dans pipeline.transformer. attn_processors.keys() : si 'transformer_blocks' in name et 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)## paramètres générauximage_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "Une femme ancienne tient solennellement une torche flamboyante, tandis qu'une bataille féroce fait rage en arrière-plan, capturant à la fois la force et la tragédie d'une scène de guerre historique."background_prompt = "une photo" # définie par défaut, mais si vous souhaitez enrichir l'arrière-plan, vous pouvez le définir sur un format plus descriptif promptregional_prompt_mask_pairs = {"0": {"description": "Une femme digne dans des robes anciennes se dressent au premier plan, son visage illuminé par la torche qu'elle tient haute. Son expression est marquée par la détermination et le chagrin, ses vêtements et son apparence reflétant la période historique. La torche projette des ombres dramatiques sur ses traits, ses flammes dansant vibrantement contre l'obscurité. "" masque " : [128, 128, 640, 768] } }## paramètres du facteur de contrôle de la régionmask_inject_steps = 10 # plus grand signifie un contrôle plus fort, recommandé entre 5 et 10double_inject_blocks_interval = 1 # 1 signifie le contrôle le plus fortingle_inject_blocks_interval = 1 # 1 signifie le contrôle le plus fortbase_ratio = 0,2 # plus petit signifie un contrôle plus fortregional_prompts = []regional_masks = []background_mask = torch.ones((image_height, image_width))pour region_idx, région dans régional_prompt_mask_pairs.items():description = région['description']mask = région['mask']x1, y1, x2, y2 = masquemasque = torch.zeros ((hauteur_image, largeur_image))masque[y1:y2, x1:x2] = 1.0background_mask -= maskregional_prompts.append(description)regional_masks.append(mask)# si les masques régionaux ne couvrent pas toute l'image, ajoutez l'invite d'arrière-plan et maskif background_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append (masque_de-fond)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": régional_prompts,"regional_masks": masques_régionaux,"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")
Notre travail est sponsorisé par HuggingFace et fal.ai. Merci!
Si vous trouvez Regional-Prompting-FLUX utile pour vos recherches et applications, veuillez nous citer en utilisant ce BibTeX :
@article{chen2024training, title={Invite régionale sans formation pour les transformateurs de diffusion}, author={Chen, Anthony et Xu, Jianjin et Zheng, Wenzhao et Dai, Gaole et Wang, Yida et Zhang, Renrui et Wang, Haofan et Zhang , Shanghang}, journal={préimpression arXiv arXiv:2411.02395}, année={2024}}
Pour toute question, n'hésitez pas à nous contacter via [email protected].