prompt-to-prompt - プロンプト・ツー・プロンプト:潜在拡散と安定拡散の実装

(NULL)

Created at: 2022-10-03 17:58:43
Language: Jupyter Notebook
License: Apache-2.0

プロンプト・ツー・プロンプト:潜在拡散と安定拡散の実装

ティーザー

プロジェクトページ用紙

セットアップ

このコードは、Python 3.8、Pytorch 1.11で、ハギングフェイス/ディフューザーを介して事前にトレーニングされたモデルを使用してテストされました。具体的には、潜在拡散と安定拡散に対する手法を実装しました。追加の必須パッケージは、要件ファイルにリストされています。このコードはTesla V100 16GBでテストされましたが、少なくとも12GB VRAMを搭載した他のカードでも動作するはずです。

クイックスタート

開始するには、ノートブック (プロンプトからprompt_ldmとプロンプトからprompt_stable) を確認することをお勧めします。ノートブックには、潜在拡散安定拡散の上に、それぞれプロンプトツープロンプトの使用例がエンドツーエンドで含まれています。これらのノートブックを参照して、さまざまな種類のプロンプト編集の使用方法と API の理解について学習してください。

プロンプト編集

ノートブックでは、次の形式の抽象クラス オブジェクトを実装することによって、メイン ロジックを実行します。

AttentionControl

class AttentionControl(abc.ABC):
    @abc.abstractmethod
    def forward (self, attn, is_cross: bool, place_in_unet: str):
        raise NotImplementedError

このメソッドは、画像生成中に拡散モデルの各アテンションレイヤーで呼び出され、それを使用してアテンションの重みを変更します。私たちの方法(私たちの論文のセクション3を参照)は、上記の手順で画像を編集し、異なるプロンプト編集タイプごとに、注意の重みを異なる方法で変更します。

forward

このコードの一般的なフローは次のとおりですが、アテンション制御タイプに基づいてバリエーションがあります。

prompts = ["A painting of a squirrel eating a burger", ...]
controller = AttentionControl(prompts, ...)
run_and_display(prompts, controller, ...)

交換

この場合、ユーザーは元のプロンプトのトークンを他のユーザーと交換します (たとえば、プロンプトを に編集する、または )。このために、クラスを定義します。

"A painting of a squirrel eating a burger"
"A painting of a squirrel eating a lasagna"
"A painting of a lion eating a burger"
AttentionReplace

洗練

この場合、ユーザーはプロンプトに新しいトークンを追加します。たとえば、プロンプトを に編集します。このために、クラスを定義します。

"A painting of a squirrel eating a burger"
"A watercolor painting of a squirrel eating a burger"
AttentionEditRefine

再重量

この場合、ユーザーはプロンプト内の特定のトークンの重みを変更する、例えば、プロンプトに対して、単語が結果の画像に影響を与える程度を強化または弱める。このために、クラスを定義します。

"A photo of a poppy field at night"
night
AttentionReweight

アテンション制御オプション

  • cross_replace_steps
    : クロスアテンション・マップを編集するステップの割合を指定します。プロンプト内の異なる単語の分数を指定する辞書に設定することもできます。
    [str:float]
  • self_replace_steps
    : 自己注意マスプを置き換えるステップの割合を指定します。
  • local_blend
    (オプション): ローカル編集を行うために使用されるオブジェクト。 は、編集する画像内の領域に対応する各プロンプトの単語で初期化されます。
    LocalBlend
    LocalBlend
  • equalizer
    : アテンションの再重み付けにのみ使用されます。各クロスアテンション重みを乗算する係数のベクトル

引用

@article{hertz2022prompt,
  title={Prompt-to-Prompt Image Editing with Cross Attention Control},
  author={Hertz, Amir and Mokady, Ron and Tenenbaum, Jay and Aberman, Kfir and Pritch, Yael and Cohen-Or, Daniel},
  journal={arXiv preprint arXiv:2208.01626},
  year={2022}
}

免責事項

これは公式にサポートされている Google サービスではありません。