陈东1,2 ·徐建进3 ·郑文兆4 ·戴高乐1 ·王亿达5 ·张仁瑞6 ·王浩凡2 ·张尚航1*
1北京大学 · 2 InstantX 团队 · 3卡内基梅隆大学 · 4加州大学伯克利分校 · 5理想汽车公司 · 6香港中文大学
扩散变压器的免训练区域提示(Regional-Prompting-FLUX)使扩散变压器(即 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]) | 基本提示: “素描风格:一只可爱的恐龙在卡通城市上空顽皮地吹着小火,呈现出欢快的场景。” 区域提示:
| |
红色:UFO 区域(xyxy:[320, 320, 640, 640]) | 基本提示: “一个可爱的卡通风格的UFO漂浮在阳光明媚的城市街道上,艺术风格融合了现实和插画元素” 后台提示: “一张照片” 区域提示:
|
地区面具 | 配置 | 生成结果 |
---|---|---|
红色:第一辆车区域(xyxy:[0, 0, 426, 968]) 绿色:第二辆车区域(xyxy:[426, 0, 853, 968]) 蓝色:第三辆车区域(xyxy:[853, 0, 1280, 968]) | 基本提示: “红、蓝、黄三辆高性能跑车,在城市街道上并肩竞速” 区域提示:
| |
红色:女性区域(xyxy:[0, 0, 640, 968]) 绿色:海滩区域(xyxy:[640, 0, 1280, 968]) | 基本提示: “一个女人沿着美丽的海滩散步,欣赏美丽的海岸景色。” 区域提示:
|
我们使用扩散器存储库之前的提交来确保可重复性,因为我们发现新的扩散器版本可能会遇到不同的结果。
# 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
请参阅 infer_flux_regional.py 中的详细示例(包括 LoRA 和 ControlNet)。下面是一个快速入门示例。
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 = {}用于 pipeline.transformer 中的名称。 attn_processors.keys():如果name 和 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)##常规设置image_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "一位古老的妇女庄严地站着,手持熊熊的火把,背景是一场激烈的战斗,捕捉历史战争场景中的力量和悲剧。"background_prompt = "a photo" # 默认设置,但如果想丰富背景,可以设置为更具描述性的提示regional_prompt_mask_pairs = {"0": {"description": "一位身着古袍的端庄女子站在前景中,她的脸被高举的火炬照亮。她的表情充满决心和悲伤,她的服装和外表反映了那个历史时期。火把在她的脸上投射出戏剧性的阴影,火焰在黑暗中充满活力地舞动。","mask": [128, 128, 640, 768] } }## 区域控制因子设置 mask_inject_steps = 10 # 越大表示控制越强,建议在 5-10 之间 double_inject_blocks_interval = 1 # 1 表示最强控制 single_inject_blocks_interval = 1 # 1 表示最强 controlbase_ratio = 0.2 # 较小表示更强 controlregional_prompts = []regional_masks = []background_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))mask[y1:y2, x1:x2] = 1.0background_mask -= maskregional_prompts.append(description)regional_masks.append(mask)# 如果区域蒙版没有覆盖整个图像,则附加背景提示和蒙版if background_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append(background_mask)image =管道(提示=基本提示,宽度=图像宽度, 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]image.save(f"output.jpg")
我们的工作由 HuggingFace 和 fal.ai 赞助。谢谢!
如果您发现 Regional-Prompting-FLUX 对您的研究和应用有用,请使用此 BibTeX 引用我们:
@article{chen2024training, title={免训练区域提示扩散变压器},author={Chen, Anthony and Xu,jianjin and Cheng, Wenzhao and Dai, Gaule and Wang, Yida and Zhang, Renrui and Wang, Hafan and Zhang , 上航}, 期刊={arXiv预印本arXiv:2411.02395}, 年={2024}}
如有任何疑问,请随时通过[email protected]联系我们。