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 Universidad de Pekín · 2 Equipo InstantX · 3 Universidad Carnegie Mellon · 4 UC Berkeley · 5 Li Auto Inc. · 6 CUHK
La señalización regional sin capacitación para transformadores de difusión (regional-prompting-FLUX) permite a los transformadores de difusión (es decir, FLUX) con capacidad de generación de texto a imagen composicional detallada de búsqueda sin necesidad de capacitación. Empíricamente, demostramos que nuestro método es altamente efectivo y compatible con LoRA y ControlNet.
Realizamos inferencias a una velocidad mucho más rápida que la implementación basada en RPG, pero ocupamos menos memoria de GPU .
[2024/11/05] Publicamos el código, ¡no dudes en probarlo!
[2024/11/05] ¡Libramos el informe técnico!
Máscaras Regionales | Configuración | Resultado generado |
---|---|---|
Rojo: región de cóctel (xyxy: [450, 560, 960, 900]) Verde: región de la tabla (xyxy: [320, 900, 1280, 1280]) Azul: Fondo | Aviso básico: "Un cóctel tropical sobre una mesa de madera en la playa durante el atardecer." Mensaje de fondo: "Una foto" Indicaciones regionales:
| |
Rojo: región del arco iris (xyxy: [0, 0, 1280, 256]) Verde: región de envío (xyxy: [0, 256, 1280, 520]) Amarillo: región de peces (xyxy: [0, 520, 640, 768]) Azul: Región del tesoro (xyxy: [640, 520, 1280, 768]) | Aviso básico: "Un majestuoso barco navega bajo un arco iris mientras vibrantes criaturas marinas se deslizan a través de aguas cristalinas, encarnando las maravillas de la naturaleza, mientras un antiguo y oxidado cofre del tesoro yace escondido en el fondo del océano". Indicaciones regionales:
| |
Rojo: Mujer con región de antorcha (xyxy: [128, 128, 640, 768]) Verde: Fondo | Aviso básico: "Una mujer anciana se encuentra solemnemente sosteniendo una antorcha encendida, mientras una feroz batalla se desarrolla en el fondo, capturando tanto la fuerza como la tragedia en una escena de guerra histórica." Mensaje de fondo: "Una foto". Indicaciones regionales:
| |
Rojo: Región del perro (assets/demo_custom_0_mask_0.png) Verde: región Cat (assets/demo_custom_0_mask_1.png) Azul: Fondo | Aviso básico: "perro y gato sentados sobre una exuberante hierba verde, en un entorno soleado al aire libre." Mensaje de fondo: "Una foto" Indicaciones regionales:
| Nota: La generación con máscara de segmentación es una función experimental, la imagen generada no está perfectamente restringida por las regiones, asumimos que se debe a que la máscara sufre degradación durante el proceso de reducción de resolución. |
Máscaras Regionales | Configuración | Resultado generado |
---|---|---|
Rojo: región de dinosaurios (xyxy: [0, 0, 640, 1280]) Azul: región de ciudad (xyxy: [640, 0, 1280, 1280]) | Aviso básico: "Estilo esbozado: un lindo dinosaurio que sopla juguetonamente pequeñas bocanadas de fuego sobre una ciudad de dibujos animados en una escena alegre". Indicaciones regionales:
| |
Rojo: región OVNI (xyxy: [320, 320, 640, 640]) | Aviso básico: "Un lindo OVNI estilo caricatura flotando sobre una calle soleada de la ciudad, el estilo artístico combina elementos de realidad y ilustración" Mensaje de fondo: "Una foto" Indicaciones regionales:
|
Máscaras Regionales | Configuración | Resultado generado |
---|---|---|
Rojo: primera región del automóvil (xyxy: [0, 0, 426, 968]) Verde: segunda región del automóvil (xyxy: [426, 0, 853, 968]) Azul: Tercera región del automóvil (xyxy: [853, 0, 1280, 968]) | Aviso básico: "Tres deportivos de alto rendimiento, rojo, azul y amarillo, corren uno al lado del otro en una calle de la ciudad" Indicaciones regionales:
| |
Rojo: región mujer (xyxy: [0, 0, 640, 968]) Verde: región de playa (xyxy: [640, 0, 1280, 968]) | Aviso básico: "Una mujer caminando por una hermosa playa con una vista panorámica de la costa ." Indicaciones regionales:
|
Usamos la confirmación anterior del repositorio de difusores para garantizar la reproducibilidad, ya que descubrimos que la nueva versión de difusores puede experimentar resultados diferentes.
# 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
Vea un ejemplo detallado (incluidos LoRA y ControlNets) en infer_flux_regional.py. A continuación se muestra un ejemplo de inicio rápido.
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 = {}para el nombre en pipeline.transformer. attn_processors.keys():si 'transformer_blocks' en nombre y nombre.endswith("attn.processor"):attn_procs[nombre] = RegionalFluxAttnProcessor2_0()else:attn_procs[nombre] = pipeline.transformer.attn_processors[nombre]pipeline.transformer.set_attn_processor(attn_procs)## configuración generalimage_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "Una mujer anciana se encuentra solemnemente sosteniendo una antorcha encendida, mientras se desarrolla una feroz batalla en el fondo, capturando tanto la fuerza como la tragedia en una escena de guerra histórica". , pero si desea enriquecer el fondo, puede configurarlo en un mensaje más descriptivoregional_prompt_mask_pairs = {"0": {"description": "Una mujer digna con túnicas antiguas se encuentra en primer plano, con el rostro iluminado por la antorcha que sostiene en alto. Su expresión es de determinación y tristeza, su vestimenta y apariencia reflejan el período histórico. La antorcha proyecta sombras dramáticas sobre sus rasgos, sus llamas danzan vibrantemente contra la oscuridad.","mask": [128, 128, 640, 768] } }## configuración del factor de control de regiónmask_inject_steps = 10 # más grande significa un control más fuerte, recomendado entre 5-10double_inject_blocks_interval = 1 # 1 significa controles más fuertes single_inject_blocks_interval = 1 # 1 significa controlbase_ratio más fuerte = 0.2 # más pequeño significa control más fuerteregional_prompts = []regional_masks = []background_mask = antorcha.ones((altura_imagen, image_width))para region_idx, región en regional_prompt_mask_pairs.items():descripción = región['descripción']máscara = región['máscara']x1, y1, x2, y2 = máscaramáscara = torch.zeros((altura_imagen, ancho_imagen)) máscara[y1:y2, x1:x2] = 1.0máscara_fondo -= maskregional_prompts.append(descripción)regional_masks.append(mask)# si las máscaras regionales no cubren toda la imagen, agregue el mensaje de fondo y enmascara si background_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append(background_mask)image = canalización(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]imagen.save(f"salida.jpg")
Nuestro trabajo está patrocinado por HuggingFace y fal.ai. ¡Gracias!
Si encuentra útil Regional-Prompting-FLUX para su investigación y aplicaciones, cítenos usando este BibTeX:
@article{chen2024training, title={Instrucción regional sin capacitación para transformadores de difusión}, autor={Chen, Anthony y Xu, Jianjin y Zheng, Wenzhao y Dai, Gaole y Wang, Yida y Zhang, Renrui y Wang, Haofan y Zhang , Shanghang}, diario={arXiv preprint arXiv:2411.02395}, año={2024}}
Si tiene alguna pregunta, no dude en contactarnos a través de [email protected].