カスタム拡散を使用すると、新しい概念 (~4-20) のいくつかの画像を指定して、安定した拡散などのテキストから画像への拡散モデルを微調整できます。この方法は高速(2つのA100 GPUで~6分)で、クロスアテンションレイヤーのモデルパラメータのサブセット、つまりキーと値の射影行列のみを微調整します。これにより、追加のコンセプトごとに追加のストレージが75MBに削減されます。
この方法では、さらに、新しいオブジェクト+新しい芸術的スタイル、複数の新しいオブジェクト、新しいオブジェクト+新しいカテゴリなど、複数の概念を組み合わせて使用できます。より視覚的な結果については、マルチコンセプトの結果を参照してください。
テキストから画像への拡散
のマルチコンセプトカスタマイズ ヌプール・クマリ, ビンリャン・チャン, リチャード・チャン, イーライ・シェヒトマン, ジュンヤン・ジュン
朱 arXivプレプリントarXiv:2212.04488
すべての結果は、安定した拡散v1-4モデルの微調整に基づいています。 シーン、ペット、身の具、スタイルなど、さまざまなカテゴリの画像と、さまざまな数のトレーニングサンプルの結果を表示します。 より多くの世代と並行メソッドとの比較については、当社のWebページとギャラリーを参照してください。
概念のユーザー提供の画像が少ないことを考えると、私たちの方法は、事前にトレーニングされたテキストから画像への拡散モデルを強化し、目に見えないコンテキストで概念の新世代を可能にします。 モデルの重みの小さなサブセット、つまり、拡散モデルのクロスアテンションレイヤーのテキストから潜在特徴へのキーと値のマッピングを微調整します。 また、この方法では、オーバーフィットを防ぐために、小さな正則化画像(200)のセットを使用します。個人カテゴリの場合は、カテゴリ名の前に新しい修飾子トークン V* を追加します (例: V* dog)。複数の概念については、2つの概念のデータセットで共同学習を行います。我々の手法では、最適化を使用して2つの微調整されたモデルをマージすることもできます。詳しくは論文をご覧ください。
git clone git@github.com:adobe-research/custom-diffusion.git cd custom-diffusion git clone https://github.com/CompVis/stable-diffusion.git cd stable-diffusion conda env create -f environment.yaml conda activate ldm pip install clip-retrieval
私たちのコードは、次の安定版拡散のコミットに基づいて開発されました。
#21f890f9da3cfbeaba8e2ac3c425ee9e998d5229
安定拡散モデルチェックポイントのダウンロードについては、こちらを参照してください。
データセット:論文で使用されているデータセットの一部をここで公開します。 UnSplashから撮影された画像はUnSplashライセンスの下にあります。ムーンゲートデータセットはこちらからダウンロードできます。
モデル:すべてのモデルはここからダウンロードできます。
正則化としての実像
## download dataset wget https://www.cs.cmu.edu/~custom-diffusion/assets/data.zip unzip data.zip ## run training (30 GB on 2 GPUs) bash scripts/finetune_real.sh "cat" data/cat real_reg/samples_cat cat finetune_addtoken.yaml <pretrained-model-path> ## save updated model weights python src/get_deltas.py --path logs/<folder-name> --newtoken 1 ## sample python sample.py --prompt "<new1> cat playing with a ball" --delta_ckpt logs/<folder-name>/checkpoints/delta_epoch\=000004.ckpt --ckpt <pretrained-model-path>
論文の結果は、正則化サンプルとして実際の画像を取得するためのクリップ検索に基づいていません。しかし、これも同様の結果につながります。
正則化として生成された画像
bash scripts/finetune_gen.sh "cat" data/cat gen_reg/samples_cat cat finetune_addtoken.yaml <pretrained-model-path>
合同研修
## run training (30 GB on 2 GPUs) bash scripts/finetune_joint.sh "wooden pot" data/wooden_pot real_reg/samples_wooden_pot \ "cat" data/cat real_reg/samples_cat \ wooden_pot+cat finetune_joint.yaml <pretrained-model-path> ## save updated model weights python src/get_deltas.py --path logs/<folder-name> --newtoken 2 ## sample python sample.py --prompt "the <new2> cat sculpture in the style of a <new1> wooden pot" --delta_ckpt logs/<folder-name>/checkpoints/delta_epoch\=000004.ckpt --ckpt <pretrained-model-path>
最適化ベースの重みのマージ
2 つの微調整されたモデルの重みと任意の 2 つのカテゴリを指定すると、次に示すように、重みをマージして 1 つのモデルを作成できます。
delta_ckpt1
delta_ckpt2
python src/composenW.py --paths <delta_ckpt1>+<delta_ckpt2> --categories "wooden pot+cat" --ckpt <pretrained-model-path> ## sample python sample.py --prompt "the <new2> cat sculpture in the style of a <new1> wooden pot" --delta_ckpt optimized_logs/<folder-name>/checkpoints/delta_epoch\=000000.ckpt --ckpt <pretrained-model-path>
## install requirements pip install accelerate pip install modelcards pip install transformers>=4.25.1 pip install deepspeed accelerate config export MODEL_NAME="CompVis/stable-diffusion-v1-4"
単一コンセプトの微調整
## launch training script (2 GPUs recommended, increase --max_train_steps to 500 if 1 GPU) accelerate launch src/diffuser_training.py \ --pretrained_model_name_or_path=$MODEL_NAME \ --instance_data_dir=./data/cat \ --class_data_dir=./real_reg/samples_cat/ \ --output_dir=./logs/cat \ --with_prior_preservation --real_prior --prior_loss_weight=1.0 \ --instance_prompt="photo of a <new1> cat" \ --class_prompt="cat" \ --resolution=512 \ --train_batch_size=2 \ --learning_rate=1e-5 \ --lr_warmup_steps=0 \ --max_train_steps=250 \ --num_class_images=200 \ --scale_lr \ --modifier_token "<new1>" ## sample python src/sample_diffuser.py --delta_ckpt logs/cat/delta.bin --ckpt "CompVis/stable-diffusion-v1-4" --prompt "<new1> cat playing with a ball"
マルチコンセプトの微調整
次のように、各概念に関する情報を含む json ファイルを提供します。
## launch training script (2 GPUs recommended, increase --max_train_steps to 1000 if 1 GPU) CUDA_VISIBLE_DEVICES=2,3 accelerate launch src/diffuser_training.py \ --pretrained_model_name_or_path=$MODEL_NAME \ --output_dir=./logs/cat_wooden_pot \ --concepts_list=./assets/concept_list.json \ --with_prior_preservation --real_prior --prior_loss_weight=1.0 \ --resolution=512 \ --train_batch_size=2 \ --learning_rate=1e-5 \ --lr_warmup_steps=0 \ --max_train_steps=500 \ --num_class_images=200 \ --scale_lr --hflip \ --modifier_token "<new1>+<new2>" ## sample python src/sample_diffuser.py --delta_ckpt logs/cat_wooden_pot/delta.bin --ckpt "CompVis/stable-diffusion-v1-4" --prompt "<new1> cat sitting inside a <new2> wooden pot and looking up"
上記のコードは、次の DreamBooth テキスト反転トレーニングスクリプトから変更されています。アクセラレートの設定方法については、こちらを参照してください。
人間の顔の微調整には、上記のディフューザートレーニングスクリプトで、または安定拡散トレーニングスクリプトでconfigを使用することをお勧めします。
learning_rate=5e-6
max_train_steps=750
finetune_face.yaml
私たちの論文に示されている他のカテゴリと比較して、学習率が低く、トレーニングが長く、人間の顔の画像が多いと、より良い結果が得られます。画像が少ないほど、クロスアテンションのすべてのパラメーターを微調整するとわずかに良くなり、 で有効にできます。
ディフューザートレーニングスクリプトを使用したリチャードチャンの14枚のクローズアップ写真を使用した微調整の結果の例。
--freeze_model "crossattn"
python src/compress.py --delta_ckpt <finetuned-delta-path> --ckpt <pretrained-model-path> ## sample python sample.py --prompt "<new1> cat playing with a ball" --delta_ckpt logs/<folder-name>/checkpoints/compressed_delta_epoch\=000004.ckpt --ckpt <pretrained-model-path> --compress
圧縮レベルが異なるサンプル生成。デフォルトでは、コードは上位60%の特異値を含む低ランク近似を保存し、~15MBのモデルを生成します。
@article{kumari2022customdiffusion, title={Multi-Concept Customization of Text-to-Image Diffusion}, author={Kumari, Nupur and Zhang, Bingliang and Zhang, Richard and Shechtman, Eli and Zhu, Jun-Yan}, journal = {arXiv}, year = {2022} }
有益なコメントと議論をしてくれたNick Kolkin、David Bau、Sheng-Yu Wang、Gaurav Parmar、John Nack、Sylvain Paris、そしてドラフトを校正してくれたAllie Chang、Chen Wu、Sumith Kulal、Minguk Kang、Yotam Nitzan、Taesung Parkに感謝します。また、アートワークを共有してくれたミア・タンとアーロン・ハーツマンにも感謝します。一部のデータセットは Unsplash からダウンロードされます。この作業の一部は、アドビのインターンシップ中にNupur Kumariによって行われました。この作業の一部はAdobe Inc.によってサポートされています。