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 Universitas Peking · 2 Tim InstantX · 3 Universitas Carnegie Mellon · 4 UC Berkeley · 5 Li Auto Inc. · 6 CUHK
Prompt Regional untuk Transformator Difusi (Regional-Prompting-FLUX) yang bebas pelatihan mengaktifkan Transformator Difusi (yaitu, FLUX) dengan kemampuan menghasilkan komposisi teks-ke-gambar yang terperinci dengan cara yang bebas pelatihan. Secara empiris, kami menunjukkan bahwa metode kami sangat efektif dan kompatibel dengan LoRA dan ControlNet.
Kami menyimpulkan dengan kecepatan yang jauh lebih cepat dibandingkan implementasi berbasis RPG, namun menggunakan lebih sedikit memori GPU .
[2024/11/05] Kami merilis kodenya, silakan mencobanya!
[2024/11/05] Kami merilis laporan teknis!
Masker Daerah | Konfigurasi | Hasil yang Dihasilkan |
---|---|---|
Merah: Wilayah koktail (xyxy: [450, 560, 960, 900]) Hijau: Wilayah tabel (xyxy: [320, 900, 1280, 1280]) Biru: Latar Belakang | Perintah Dasar: "Koktail tropis di atas meja kayu di pantai saat matahari terbenam." Perintah Latar Belakang: "Sebuah foto" Anjuran Regional:
| |
Merah: Wilayah pelangi (xyxy: [0, 0, 1280, 256]) Hijau: Wilayah kapal (xyxy: [0, 256, 1280, 520]) Kuning: Wilayah ikan (xyxy: [0, 520, 640, 768]) Biru: Wilayah harta karun (xyxy: [640, 520, 1280, 768]) | Perintah Dasar: "Sebuah kapal megah berlayar di bawah pelangi saat makhluk laut yang hidup meluncur melalui perairan kristal di bawahnya, mewujudkan keajaiban alam, sementara peti harta karun kuno berkarat tersembunyi di dasar laut." Anjuran Regional:
| |
Merah: Wanita dengan wilayah obor (xyxy: [128, 128, 640, 768]) Hijau: Latar Belakang | Perintah Dasar: "Seorang wanita kuno berdiri dengan khidmat memegang obor yang menyala-nyala, sementara pertempuran sengit terjadi di latar belakang, menangkap kekuatan dan tragedi dalam adegan perang bersejarah." Perintah Latar Belakang: "Sebuah foto." Anjuran Regional:
| |
Merah: Wilayah anjing (assets/demo_custom_0_mask_0.png) Hijau: Wilayah kucing (assets/demo_custom_0_mask_1.png) Biru: Latar Belakang | Perintah Dasar: "anjing dan kucing duduk di rumput hijau subur, di luar ruangan yang cerah." Perintah Latar Belakang: "Sebuah foto" Anjuran Regional:
| Catatan: Pembuatan dengan segmentasi mask adalah fungsi eksperimental, gambar yang dihasilkan tidak dibatasi secara sempurna berdasarkan wilayah, kami berasumsi hal ini karena mask mengalami degradasi selama proses downsampling. |
Masker Daerah | Konfigurasi | Hasil yang Dihasilkan |
---|---|---|
Merah: Wilayah Dinosaurus (xyxy: [0, 0, 640, 1280]) Biru: Wilayah kota (xyxy: [640, 0, 1280, 1280]) | Perintah Dasar: "Gaya sketsa: Seekor dinosaurus lucu dengan riang meniupkan kepulan api kecil ke kota kartun dalam pemandangan yang ceria." Anjuran Regional:
| |
Merah: wilayah UFO (xyxy: [320, 320, 640, 640]) | Perintah Dasar: "UFO bergaya kartun lucu melayang di atas jalan kota yang cerah, gaya artistik memadukan elemen realitas dan ilustrasi" Perintah Latar Belakang: "Sebuah foto" Anjuran Regional:
|
Masker Daerah | Konfigurasi | Hasil yang Dihasilkan |
---|---|---|
Merah: Wilayah mobil pertama (xyxy: [0, 0, 426, 968]) Hijau: Wilayah mobil kedua (xyxy: [426, 0, 853, 968]) Biru: Wilayah mobil ketiga (xyxy: [853, 0, 1280, 968]) | Perintah Dasar: "Tiga mobil sport berperforma tinggi, merah, biru, dan kuning, berpacu berdampingan di jalanan kota" Anjuran Regional:
| |
Merah: Wilayah wanita (xyxy: [0, 0, 640, 968]) Hijau: Wilayah pantai (xyxy: [640, 0, 1280, 968]) | Perintah Dasar: "Seorang wanita berjalan di sepanjang pantai yang indah dengan pemandangan pantai yang indah." Anjuran Regional:
|
Kami menggunakan komitmen sebelumnya dari repo diffuser untuk memastikan reproduktifitas, karena kami menemukan versi diffuser baru mungkin memberikan hasil yang berbeda.
# 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
Lihat contoh detail (termasuk LoRA dan ControlNets) di infer_flux_regional.py. Di bawah ini adalah contoh memulai cepat.
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 = {}untuk nama di pipeline.transformer.attn_processors.keys():if 'transformer_blocks' dalam nama dan nama.endswith("attn.processor"):attn_procs[nama] = RegionalFluxAttnProcessor2_0()else:attn_procs[nama] = pipeline.transformer.attn_processors[name]pipeline.transformer.set_attn_processor(attn_procs)## pengaturan umumimage_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "Seorang wanita kuno berdiri dengan khidmat sambil memegang obor yang menyala-nyala, sementara pertempuran sengit terjadi di latar belakang, menangkap kekuatan dan tragedi di dalamnya adegan perang bersejarah."background_prompt = "sebuah foto" # disetel secara default, namun jika Anda ingin memperkaya latar belakang, Anda dapat menyetelnya ke promptregional_prompt_mask_pairs = {"0": {"description": "Seorang wanita bermartabat di jubah kuno berdiri di latar depan, wajahnya diterangi oleh obor yang dia pegang tinggi-tinggi. Ekspresinya menunjukkan tekad dan kesedihan, pakaian dan penampilannya mencerminkan periode sejarah. Obornya menghasilkan bayangan dramatis di seluruh wajahnya, nyala apinya menari dengan cemerlang melawan kegelapan.","mask": [128, 128, 640, 768] } }## pengaturan faktor kontrol wilayahmask_inject_steps = 10 # lebih besar berarti kontrol lebih kuat, direkomendasikan antara 5-10double_inject_blocks_interval = 1 # 1 berarti kontrol terkuatsingle_inject_blocks_interval = 1 # 1 berarti rasio_basis kontrol terkuat = 0.2 # lebih kecil berarti kontrol lebih kuatregional_prompts = []regional_masks = []background_mask = torch.ones((image_height, image_width))untuk region_idx, region di regional_prompt_mask_pairs.items():description = region['description']mask = region['mask']x1, y1, x2, y2 = maskmask = torch.zeros ((tinggi_gambar, lebar_gambar))topeng[y1:y2, x1:x2] = 1.0background_mask -= maskregional_prompts.append(description)regional_masks.append(mask)# jika masker regional tidak menutupi keseluruhan gambar, tambahkan prompt latar belakang dan maskif background_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append (background_mask)gambar = 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}, ).gambar[0]gambar.simpan(f"output.jpg")
Pekerjaan kami disponsori oleh HuggingFace dan fal.ai. Terima kasih!
Jika menurut Anda Regional-Prompting-FLUX berguna untuk penelitian dan aplikasi Anda, harap kutip kami menggunakan BibTeX ini:
@article{chen2024training, title={Anjuran Regional Bebas Pelatihan untuk Transformator Difusi}, author={Chen, Anthony dan Xu, Jianjin dan Zheng, Wenzhao dan Dai, Gaole dan Wang, Yida dan Zhang, Renrui dan Wang, Haofan dan Zhang , Shanghang}, jurnal={arXiv pracetak arXiv:2411.02395}, tahun={2024}}
Untuk pertanyaan apa pun, jangan ragu untuk menghubungi kami melalui [email protected].