アンソニー・チェン1,2 ·ジェンジン・シュー3 ·ウェンジャオ・ジェン4 ·ガオレ・ダイ1 ·イーダ・ワン5 · レンルイ・チャン6 ·ハオファン・ワン2 ·シャンハン・チャン1*
1北京大学 · 2 InstantX チーム · 3カーネギーメロン大学 · 4 UC バークレー · 5 Li Auto Inc. · 6 CUHK
拡散トランスフォーマーのトレーニング不要の地域プロンプティング (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]) 緑: 2 番目の車両領域 (xyxy: [426, 0, 853, 968]) 青: 3 番目の車両領域 (xyxy: [853, 0, 1280, 968]) | 基本プロンプト: 「赤、青、黄色の 3 台の高性能スポーツカーが街路で並んでレースをしています。」 地域別のプロンプト:
| |
赤: 女性領域 (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():if 'transformer_blocks' in name and 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 = "写真" # デフォルトで設定されていますが、背景を充実させたい場合は、より説明的なプロンプトに設定できますregional_prompt_mask_pairs = {"0": {"description": "威厳のある写真古代のローブを着た女性が前景に立っており、彼女の顔は高く掲げた松明に照らされています。彼女の表現は決意と悲しみのひとつであり、彼女の服装や外観は歴史的時代を反映しています。トーチは彼女の顔全体に劇的な影を落とし、その炎は暗闇を背景に鮮やかに踊ります。","マスク": [128, 128, 640, 768] } }## 領域制御係数設定mask_inject_steps = 10 # 大きいほど強力な制御を意味し、5 ~ 10 の範囲で推奨double_inject_blocks_interval = 1 # 1 は最も強い controlsingle_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() の領域:説明 = 領域['説明']マスク = 領域['マスク']x1, y1, x2, y2 = マスクマスク = torch.zeros ((画像の高さ, 画像の幅))マスク[y1:y2, x1:x2] = 1.0background_mask -= Maskregional_prompts.append(description)regional_masks.append(mask)# 地域マスクが画像全体をカバーしない場合は、背景プロンプトとマスクを追加しますbackground_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append (背景マスク)画像 = 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}, ).images[0]image.save(f"output.jpg")
私たちの研究は、HuggingFace と fal.ai によって後援されています。ありがとう!
Regional-Prompting-FLUX があなたの研究や応用に役立つと思われる場合は、この BibTeX を使用して引用してください。
@article{chen2024training, title={拡散変圧器に対するトレーニング不要の地域プロンプト}、author={Chen、Anthony と Xu、Jianjin と Zheng、Wenzhao と Dai、Gaole と Wang、Yida と Zhang、Renrui と Wang、Haofan と Zhang 、上行}、ジャーナル={arXiv プレプリント arXiv:2411.02395}、年={2024}}
ご質問がございましたら、[email protected] までお気軽にお問い合わせください。