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 Universidade de Pequim · 2 Equipe InstantX · 3 Universidade Carnegie Mellon · 4 UC Berkeley · 5 Li Auto Inc.
Solicitação regional sem treinamento para transformadores de difusão (Regional-Prompting-FLUX) habilita transformadores de difusão (ou seja, FLUX) com capacidade de geração de texto para imagem composicional granulada e sem treinamento. Empiricamente, mostramos que nosso método é altamente eficaz e compatível com LoRA e ControlNet.
Inferimos em velocidade muito mais rápida do que a implementação baseada em RPG, mas ocupamos menos memória da GPU .
[2024/11/05] Liberamos o código, fique à vontade para testá-lo!
[2024/11/05] Divulgamos o relatório técnico!
Máscaras Regionais | Configuração | Resultado Gerado |
---|---|---|
Vermelho: região do coquetel (xyxy: [450, 560, 960, 900]) Verde: região da tabela (xyxy: [320, 900, 1280, 1280]) Azul: Fundo | Alerta básico: "Um coquetel tropical em uma mesa de madeira na praia durante o pôr do sol." Solicitação de plano de fundo: "Uma foto" Solicitações regionais:
| |
Vermelho: região do arco-íris (xyxy: [0, 0, 1280, 256]) Verde: região do navio (xyxy: [0, 256, 1280, 520]) Amarelo: Região dos peixes (xyxy: [0, 520, 640, 768]) Azul: região do tesouro (xyxy: [640, 520, 1280, 768]) | Alerta básico: "Um navio majestoso navega sob um arco-íris enquanto criaturas marinhas vibrantes deslizam pelas águas cristalinas abaixo, personificando as maravilhas da natureza, enquanto um antigo e enferrujado baú de tesouro está escondido no fundo do oceano." Solicitações regionais:
| |
Vermelho: Mulher com região de tocha (xyxy: [128, 128, 640, 768]) Verde: Fundo | Alerta básico: "Uma mulher idosa segura solenemente uma tocha acesa, enquanto uma batalha feroz acontece ao fundo, capturando tanto a força quanto a tragédia em uma cena de guerra histórica." Solicitação de plano de fundo: "Uma foto." Solicitações regionais:
| |
Vermelho: região do cão (assets/demo_custom_0_mask_0.png) Verde: região Cat (assets/demo_custom_0_mask_1.png) Azul: Fundo | Alerta básico: "cachorro e gato sentados na grama verdejante, em um ambiente ensolarado ao ar livre." Solicitação de plano de fundo: "Uma foto" Solicitações regionais:
| Nota: A geração com máscara de segmentação é uma função experimental, a imagem gerada não é perfeitamente restringida pelas regiões, assumimos que é porque a máscara sofre degradação durante o processo de redução da resolução. |
Máscaras Regionais | Configuração | Resultado Gerado |
---|---|---|
Vermelho: região dos dinossauros (xyxy: [0, 0, 640, 1280]) Azul: região da cidade (xyxy: [640, 0, 1280, 1280]) | Alerta básico: "Estilo esboçado: um dinossauro fofo soprando pequenas baforadas de fogo sobre uma cidade de desenho animado em uma cena alegre." Solicitações regionais:
| |
Vermelho: região OVNI (xyxy: [320, 320, 640, 640]) | Alerta básico: "Um lindo OVNI em estilo de desenho animado flutuando sobre uma rua ensolarada da cidade, o estilo artístico combina realidade e elementos de ilustração" Solicitação de plano de fundo: "Uma foto" Solicitações regionais:
|
Máscaras Regionais | Configuração | Resultado Gerado |
---|---|---|
Vermelho: região do primeiro carro (xyxy: [0, 0, 426, 968]) Verde: região do segundo carro (xyxy: [426, 0, 853, 968]) Azul: região do terceiro carro (xyxy: [853, 0, 1280, 968]) | Alerta básico: “Três carros esportivos de alto desempenho, vermelho, azul e amarelo, correm lado a lado nas ruas de uma cidade” Solicitações regionais:
| |
Vermelho: região feminina (xyxy: [0, 0, 640, 968]) Verde: região da praia (xyxy: [640, 0, 1280, 968]) | Alerta básico: "Uma mulher caminhando por uma bela praia com uma vista panorâmica da costa." Solicitações regionais:
|
Usamos o commit anterior do repositório de difusores para garantir a reprodutibilidade, pois descobrimos que novas versões de difusores podem apresentar 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
Veja exemplo detalhado (incluindo LoRAs e ControlNets) em infer_flux_regional.py. Abaixo está um exemplo de início 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 nome em pipeline.transformer. attn_processors.keys():se 'transformer_blocks' em nome e nome.endswith("attn.processor"):attn_procs[name] = RegionalFluxAttnProcessor2_0()else:attn_procs[name] = pipeline.transformer.attn_processors[name]pipeline.transformer.set_attn_processor(attn_procs)## configurações geraisimage_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "Uma mulher idosa segura solenemente uma tocha ardente, enquanto uma batalha feroz acontece ao fundo, capturando tanto a força quanto a tragédia em uma cena de guerra histórica."background_prompt = "uma foto" # definido por padrão , mas se quiser enriquecer o plano de fundo, você pode configurá-lo para um promptregional_prompt_mask_pairs mais descritivo = {"0": {"description": "Uma mulher digna em vestes antigas está em primeiro plano, seu rosto iluminado pela tocha que ela segura no alto. Sua expressão é de determinação e tristeza, suas roupas e aparência refletem o período histórico. A tocha lança sombras dramáticas em suas feições, suas chamas dançando vibrantemente contra a escuridão.","mask": [128, 128, 640, 768] } }## configurações do fator de controle da regiãomask_inject_steps = 10 # maior significa controle mais forte, recomendado entre 5-10double_inject_blocks_interval = 1 # 1 significa controles mais fortes single_inject_blocks_interval = 1 # 1 significa controlbase_ratio mais forte = 0,2 # menor significa controlregional_prompts mais forte = []regional_masks = []background_mask = torch.ones((image_height, image_width))para região_idx, região em regional_prompt_mask_pairs.items():descrição = região['descrição']máscara = região['máscara']x1, y1, x2, y2 = máscaramáscara = tocha.zeros ((altura_da_imagem, largura_da_imagem))máscara[y1:y2, x1:x2] = 1.0background_mask -= maskregional_prompts.append(description)regional_masks.append(mask)# se as máscaras regionais não cobrirem a imagem inteira, anexe o prompt de plano de fundo e maskif background_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append (máscara_de_fundo)imagem = pipeline (prompt = base_prompt, largura = largura da imagem, altura = altura da imagem, mask_inject_steps = máscara_inject_steps, num_inference_steps = num_inference_steps, gerador = tocha.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"saída.jpg")
Nosso trabalho é patrocinado por HuggingFace e fal.ai. Obrigado!
Se você achar o Regional-Prompting-FLUX útil para suas pesquisas e aplicações, cite-nos usando este BibTeX:
@artigo{chen2024training, title={Solicitação regional sem treinamento para transformadores de difusão}, autor={Chen, Anthony e Xu, Jianjin e Zheng, Wenzhao e Dai, Gaole e Wang, Yida e Zhang, Renrui e Wang, Haofan e Zhang , Shanghang}, diário={pré-impressão arXiv arXiv:2411.02395}, ano={2024}}
Para qualquer dúvida, não hesite em contactar-nos através de [email protected].