textual_inversion - テキスト反転を使用したテキストから画像への生成のパーソナライズ

()

Created at: 2022-08-03 02:07:08
Language: Jupyter Notebook

画像は一言で表す価値があります: テキスト反転を使用したテキストから画像への生成のパーソナライズ

arXiv

プロジェクトサイト

画像は一言で表す価値があります:テキスト反転を使用したテキストから画像生成
パーソナライズ1テルアビブ大学、2 NVIDIA

要約:
テキストから画像へのモデルは、自然言語による作成を導く前例のない自由を提供します。しかし、特定のユニークなコンセプトの画像を生成したり、それらの外観を変更したり、新しい役割や斬新なシーンでそれらを構成したりするために、そのような自由をどのように行使できるかは不明です. 言い換えれば、言語誘導モデルを使用して、猫を絵に変えたりお気に入りのおもちゃに基づいて新製品を想像したりするにはどうすればよいでしょうか? ここでは、そのような創造的な自由を可能にするシンプルなアプローチを紹介します。オブジェクトやスタイルなど、ユーザーが提供する概念の 3 ~ 5 枚の画像のみを使用して、凍結されたテキストから画像へのモデルの埋め込みスペースで新しい「単語」を介してそれを表現することを学びます。これらの「単語」は、自然言語文に構成でき、直感的な方法で作成します。特に、ユニークで多様な概念をキャプチャするには、単一の単語の埋め込みで十分であるという証拠が見つかりました。私たちのアプローチを幅広いベースラインと比較し、さまざまなアプリケーションやタスクにわたって概念をより忠実に表現できることを示します。

説明

このリポジトリには、Textual Inversion ペーパーの公式コード、データ、およびサンプルの反転が含まれています。

アップデート

2022/08/21 (C)コード公開!

TODO:

  • [x]コードをリリース!
  • [x] 勾配の格納/チェックポイントを最適化します。メモリ要件、トレーニング時間を最大 55% 削減
  • [ ] データセットを解放する
  • [ ] 事前トレーニング済みの埋め込みをリリースする
  • [ ] 安定拡散のサポートを追加

設定

私たちのコードは、潜在拡散モデル (LDM)に基づいて構築され、要件を共有しています。環境をセットアップするには、次を実行してください。

conda env create -f environment.yaml
conda activate ldm

また、 LDM プロジェクト ページから入手できる公式の LDM text-to-image チェックポイントも必要です。

現在、モデルは次を実行してダウンロードできます。

mkdir -p models/ldm/text2img-large/
wget -O models/ldm/text2img-large/model.ckpt https://ommer-lab.com/files/latent-diffusion/nitro/txt2img-f8-large/model.ckpt

使用法

反転

画像セットを反転するには、次を実行します。

python main.py --base configs/latent-diffusion/txt2img-1p4B-finetune.yaml 
               -t 
               --actual_resume /path/to/pretrained/model.ckpt 
               -n <run_name> 
               --gpus 0, 
               --data_root /path/to/directory/with/images
               --init_word <initialization_word>

ここで、初期化ワードは、オブジェクトの単一トークンの大まかな説明 (たとえば、'toy'、'painting'、'sculpture') である必要があります。入力が複数のトークンで構成されている場合は、トークンを置き換えるように求められます。

この論文では、5k のトレーニング反復を使用しています。ただし、一部の概念 (特にスタイル) は、はるかに高速に収束できます。

複数の GPU で実行するには、コンマ区切りの GPU インデックスのリストを --gpu 引数に指定します (例:

--gpus 0,3,7,8
)

埋め込みと出力画像はログ ディレクトリに保存されます。

概念を示すプレースホルダー文字列の変更など、その他のオプションについては、を参照

configs/latent-diffusion/txt2img-1p4B-finetune.yaml
してください (デフォルトは「*」)。

重要:すべてのトレーニング セットの画像は直立している必要があります。携帯電話でキャプチャした画像を使用している場合は、出力画像ディレクトリにあるinputs_gs*.jpg ファイルをチェックし、向きが正しいことを確認してください。多くの携帯電話は、90 度回転して画像をキャプチャし、画像メタデータでこれを示します。Windows はこれらを正しく解析しますが、PIL は解析しません。したがって、それらを手動で修正する (例えば、ペイントに貼り付けて再保存する) か、メタデータの解析が追加されるまで待つ必要があります。

世代

学習した概念の新しいイメージを生成するには、次を実行します。

python scripts/txt2img.py --ddim_eta 0.0 
                          --n_samples 8 
                          --n_iter 2 
                          --scale 10.0 
                          --ddim_steps 50 
                          --embedding_path /path/to/logs/trained_model/checkpoints/embeddings_gs-5049.pt 
                          --ckpt_path /path/to/pretrained/model.ckpt 
                          --prompt "a photo of *"

ここで、* は反転中に使用されるプレースホルダー文字列です。

チェックポイントのマージ

LDM 埋め込みチェックポイントは、次を実行して単一のファイルにマージできます。

python merge_embeddings.py 
--manager_ckpts /path/to/first/embedding.pt /path/to/second/embedding.pt [...]
--output_path /path/to/output/embedding.pt

チェックポイントに競合するプレースホルダー文字列が含まれている場合、新しいプレースホルダーを選択するよう求められます。マージされたチェックポイントは、後で複数の概念を一度に表示するために使用できます (「@ のスタイルの * の写真」)。

事前トレーニング済みのモデル / データ

近日公開

安定拡散

Stable Diffusion のサポートは進行中の作業であり、間もなく完了します™。

ヒントとコツ

  • プロンプトに「の写真」を追加すると、通常、ターゲットの一貫性が向上します。
  • 結果はシードセンシティブになる可能性があります。モデルに満足できない場合は、(
    --seed <#>
    プロンプトに追加して) 新しいシードで再反転してみてください。

引用

私たちの仕事を利用する場合は、私たちの論文を引用してください:

@misc{gal2022textual,
      doi = {10.48550/ARXIV.2208.01618},
      url = {https://arxiv.org/abs/2208.01618},
      author = {Gal, Rinon and Alaluf, Yuval and Atzmon, Yuval and Patashnik, Or and Bermano, Amit H. and Chechik, Gal and Cohen-Or, Daniel},
      title = {An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion},
      publisher = {arXiv},
      year = {2022},
      primaryClass={cs.CV}
}

結果

ここにいくつかのサンプル結果があります。詳細については、プロジェクト ページにアクセスするか、論文をお読みください。