แอนโทนี่ เฉิน 1,2 · ซูเจียนจิน 3 · เหวินจ้าว เจิ้ง 4 · เกาเล่อ ได 1 · อี๋ต๋า หวาง 5 · เหรินรุย จาง 6 · เฮาฟาน หวาง 2 · ซางหาง จาง 1*
1 มหาวิทยาลัยปักกิ่ง · 2 ทีม InstantX · 3 มหาวิทยาลัยคาร์เนกีเมลลอน · 4 UC Berkeley · 5 Li Auto Inc. · 6 CUHK
การแจ้งเตือนระดับภูมิภาคที่ไม่ต้องฝึกอบรมสำหรับ Diffusion Transformers (Regional-Prompting-FLUX) ช่วยให้ Diffusion Transformers (เช่น FLUX) มีความสามารถในการสร้างข้อความเป็นภาพที่จัดองค์ประกอบแบบค้นหาเกรนในลักษณะที่ไม่ต้องฝึกอบรม จากเชิงประจักษ์ เราแสดงให้เห็นว่าวิธีการของเรามีประสิทธิภาพสูงและเข้ากันได้กับ LoRA และ ControlNet
เราอนุมานด้วยความเร็ว ที่เร็วกว่าการใช้งานแบบ RPG มาก แต่ใช้ หน่วยความจำ GPU น้อยกว่า
[2024/11/05] เราปล่อยโค้ดแล้ว ลองใช้ได้เลย!
[2024/11/05] เราเผยแพร่รายงานทางเทคนิค!
หน้ากากระดับภูมิภาค | การกำหนดค่า | ผลลัพธ์ที่สร้างขึ้น |
---|---|---|
สีแดง: บริเวณค็อกเทล (xyxy: [450, 560, 960, 900]) สีเขียว: ขอบเขตของตาราง (xyxy: [320, 900, 1280, 1280]) สีฟ้า: พื้นหลัง | พรอมต์ฐาน: "ค็อกเทลเขตร้อนบนโต๊ะไม้ที่ชายหาดในช่วงพระอาทิตย์ตก" พรอมต์พื้นหลัง: "รูปถ่าย" คำแนะนำระดับภูมิภาค:
| |
สีแดง: บริเวณสายรุ้ง (xyxy: [0, 0, 1280, 256]) สีเขียว: ภูมิภาคของการจัดส่ง (xyxy: [0, 256, 1280, 520]) สีเหลือง: บริเวณปลา (xyxy: [0, 520, 640, 768]) สีน้ำเงิน: โซนสมบัติ (xyxy: [640, 520, 1280, 768]) | พรอมต์ฐาน: "เรืออันงดงามแล่นไปใต้สายรุ้งในขณะที่สัตว์ทะเลที่มีชีวิตชีวาแล่นผ่านน้ำทะเลใสด้านล่าง รวบรวมความมหัศจรรย์ของธรรมชาติ ในขณะที่หีบสมบัติโบราณที่เป็นสนิมซ่อนอยู่บนพื้นมหาสมุทร" คำแนะนำระดับภูมิภาค:
| |
สีแดง: ผู้หญิงที่มีบริเวณคบเพลิง (xyxy: [128, 128, 640, 768]) สีเขียว: พื้นหลัง | พรอมต์ฐาน: “หญิงโบราณยืนถือคบเพลิงที่ลุกโชนอย่างเคร่งขรึม ในขณะที่การต่อสู้อันดุเดือดดุเดือดในเบื้องหลัง รวบรวมทั้งความแข็งแกร่งและโศกนาฏกรรมในฉากสงครามประวัติศาสตร์” พรอมต์พื้นหลัง: "รูปถ่าย" คำแนะนำระดับภูมิภาค:
| |
สีแดง: บริเวณสุนัข (assets/demo_custom_0_mask_0.png) สีเขียว: ภูมิภาคแมว (assets/demo_custom_0_mask_1.png) สีฟ้า: พื้นหลัง | พรอมต์ฐาน: "สุนัขและแมวนั่งอยู่บนหญ้าสีเขียวชอุ่ม ในบรรยากาศกลางแจ้งที่มีแสงแดดสดใส" พรอมต์พื้นหลัง: "รูปถ่าย" คำแนะนำระดับภูมิภาค:
| หมายเหตุ: การสร้างด้วยมาสก์การแบ่งส่วนเป็นฟังก์ชันทดลอง รูปภาพที่สร้างขึ้นไม่ได้ถูกจำกัดอย่างสมบูรณ์ตามภูมิภาค เราสันนิษฐานว่าเป็นเพราะมาสก์ได้รับความเสื่อมโทรมในระหว่างกระบวนการสุ่มตัวอย่าง |
หน้ากากระดับภูมิภาค | การกำหนดค่า | ผลลัพธ์ที่สร้างขึ้น |
---|---|---|
สีแดง: ขอบเขตไดโนเสาร์ (xyxy: [0, 0, 640, 1280]) สีน้ำเงิน: ขอบเขตเมือง (xyxy: [640, 0, 1280, 1280]) | พรอมต์ฐาน: "รูปแบบร่าง: ไดโนเสาร์น่ารักพ่นไฟเล็กๆ พ่นเหนือเมืองการ์ตูนในฉากที่ร่าเริง" คำแนะนำระดับภูมิภาค:
| |
สีแดง: เขตยูเอฟโอ (xyxy: [320, 320, 640, 640]) | พรอมต์ฐาน: "ยูเอฟโอสไตล์การ์ตูนน่ารักที่ลอยอยู่เหนือถนนในเมืองที่มีแสงแดดสดใส สไตล์ศิลปะผสมผสานความเป็นจริงและองค์ประกอบภาพประกอบ" พรอมต์พื้นหลัง: "รูปถ่าย" คำแนะนำระดับภูมิภาค:
|
หน้ากากระดับภูมิภาค | การกำหนดค่า | ผลลัพธ์ที่สร้างขึ้น |
---|---|---|
สีแดง: ภูมิภาครถคันแรก (xyxy: [0, 0, 426, 968]) สีเขียว: ภูมิภาครถคันที่สอง (xyxy: [426, 0, 853, 968]) สีน้ำเงิน: ภูมิภาคของรถยนต์คันที่สาม (xyxy: [853, 0, 1280, 968]) | พรอมต์ฐาน: "รถสปอร์ตสมรรถนะสูง 3 คัน สีแดง น้ำเงิน และเหลือง แข่งขันกันบนถนนในเมือง" คำแนะนำระดับภูมิภาค:
| |
สีแดง: ภูมิภาคผู้หญิง (xyxy: [0, 0, 640, 968]) สีเขียว: บริเวณชายหาด (xyxy: [640, 0, 1280, 968]) | พรอมต์ฐาน: “ผู้หญิงคนหนึ่งกำลังเดินไปตามชายหาดที่สวยงามพร้อมทิวทัศน์ชายฝั่งอันงดงาม” คำแนะนำระดับภูมิภาค:
|
เราใช้การคอมมิตก่อนหน้านี้จาก repo ของ diffusers เพื่อให้มั่นใจถึงความสามารถในการทำซ้ำ เนื่องจากเราพบว่าเวอร์ชันของ diffusers ใหม่อาจได้รับผลลัพธ์ที่แตกต่างออกไป
# 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
ดูตัวอย่างโดยละเอียด (รวมถึง LoRA และ ControlNets) ใน infer_flux_regional.py ด้านล่างนี้คือตัวอย่างการเริ่มต้นอย่างรวดเร็ว
นำเข้า torchfrom Pipeline_flux_regional นำเข้า RegionalFluxPipeline, RegionalFluxAttnProcessor2_0pipeline = RegionalFluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", torch_dtype=torch.bfloat16).to("cuda")attn_procs = {}สำหรับชื่อในไปป์ไลน์.transformer attn_processors.keys():ถ้า 'transformer_blocks' ในชื่อและ name.endswith("attn.processor"):attn_procs[name] = RegionalFluxAttnProcessor2_0()else:attn_procs[name] =ไปป์ไลน์.transformer.attn_processors[ชื่อ]pipeline.transformer.set_attn_processor(attn_procs)## การตั้งค่าทั่วไป image_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "หญิงโบราณยืนถือคบเพลิงที่ลุกโชนอย่างเคร่งขรึม ในขณะที่การต่อสู้อันดุเดือดดุเดือดในเบื้องหลัง จับภาพทั้งความแข็งแกร่งและโศกนาฏกรรมในฉากสงครามประวัติศาสตร์"Background_prompt = "ภาพถ่าย" # ตั้งค่าตามค่าเริ่มต้น แต่ หากคุณต้องการเพิ่มพื้นหลัง คุณสามารถตั้งค่าเป็น promptregional_prompt_mask_pairs ที่สื่อความหมายได้มากขึ้น {"0": {"description": "สตรีผู้สง่างามในชุดคลุมโบราณยืนอยู่เบื้องหน้า ใบหน้าของเธอสว่างไสวด้วยคบเพลิงที่เธอชูไว้สูง การแสดงออกของเธอคือความมุ่งมั่นและความโศกเศร้า เสื้อผ้าและรูปลักษณ์ของเธอสะท้อนถึงช่วงเวลาทางประวัติศาสตร์ คบเพลิงทอดเงาอันน่าทึ่งไปทั่วใบหน้าของเธอ เปลวไฟที่เต้นอย่างมีชีวิตชีวาท่ามกลางความมืด"หน้ากาก": [128, 128, 640, 768] - }## ปัจจัยการควบคุมภูมิภาค settingsmask_inject_steps = 10 # ใหญ่หมายถึงการควบคุมที่แข็งแกร่งขึ้น แนะนำระหว่าง 5-10double_inject_blocks_interval = 1 # 1 หมายถึงการควบคุมที่แข็งแกร่งที่สุด single_inject_blocks_interval = 1 # 1 หมายถึงการควบคุมฐานที่แข็งแกร่งที่สุด = 0.2 # เล็กหมายถึงการควบคุมที่แข็งแกร่งregional_prompts = []regional_masks = []พื้นหลัง_mask = torch.ones((image_height, image_width))สำหรับregion_idx ภูมิภาคในregional_prompt_mask_pairs.items():description = ภูมิภาค['description']mask = ภูมิภาค['mask']x1, y1, x2, y2 = maskmask = torch.zeros ((image_height, image_width))มาสก์[y1:y2, x1:x2] = 1.0พื้นหลัง_มาสก์ -= maskregional_prompts.append(description)regional_masks.append(mask)# หากมาสก์ระดับภูมิภาคไม่ครอบคลุมทั้งภาพ ให้ต่อท้ายพร้อมท์พื้นหลังและmaskif )image =ไปป์ไลน์(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": ภูมิภาค_prompts, "regional_masks": ภูมิภาค_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")
งานของเราได้รับการสนับสนุนโดย HuggingFace และ fal.ai ขอบคุณ!
หากคุณพบว่า Regional-Prompting-FLUX มีประโยชน์สำหรับการวิจัยและการสมัครของคุณ โปรดอ้างอิงโดยใช้ BibTeX นี้:
@article{chen2024training, title={Training-free Regional Prompting for Diffusion Transformers}, ผู้แต่ง={Chen, Anthony และ Xu, Jianjin และ Zheng, Wenzhao และ Dai, Gaole และ Wang, Yida และ Zhang, Renrui และ Wang, Haofan และ Zhang , Shanghang}, วารสาร={arXiv พิมพ์ล่วงหน้า arXiv:2411.02395}, ปี={2024}}
หากมีคำถามใดๆ โปรดติดต่อเราผ่านทาง [email protected]