HuggingFace Diffusers 0.12 : 訓練 : Textual Inversion

HuggingFace Diffusers 0.12 : 訓練 : Textual Inversion (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 02/17/2023 (v0.12.1)

* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

 

HuggingFace Diffusers 0.12 : 訓練 : Textual Inversion

Textual Inversion は、テキスト-to-画像変換パイプラインを制御するために後で利用できる方法で、少ない数のサンプル画像から新規の概念を獲得するテクニックです。パイプラインのテキストエンコーダの埋め込み空間で新しい「単語」を学習することによりそれを行います。そしてこれらの特別な単語は結果としての画像の非常にきめ細かい制御を実現するテキストプロンプト內で使用できます。

3-5 画像だけを使用して、個人向けの (= personalized) 画像生成のために Stable Diffusion のようなモデルに新しい概念を教えることができます (画像ソース)。

このテクニックは An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion で紹介されました。この論文は 潜在的拡散モデル を使用してコンセプトを実演していますが、それ以来このアイデアは Stable Diffusion のような他のバリエーションにも適用されています。

 

How It Works

>


textual inversion ブログ記事 からのアーキテクチャ概要

テキストプロンプトが拡散モデルで使用できるようになる前に、それはまずは数値表現に処理されなければなりません。これは通常はテキストのトークン化、各トークンの埋め込みへの変換、そしてそれら埋め込みをモデルに供給することを伴います (通常は transformer)、その出力は拡散モデルに対する条件付けとして使用されます。

Textual inversion は新しいトークンの埋め込み (上の図の v*) を学習します。(この新しい埋め込みにマップされるトークンを含む) プロンプトは generator モデルへの入力として 1 つまたはそれ以上の訓練画像のノイズありバージョンと併せて使用され、このモデルは画像のノイズ除去バージョンを予測することを試みます。埋め込みはこのタスクにおいてモデルがどの程度上手くやるかに基づいて最適化されます – 訓練画像により示されるオブジェクトやスタイルをより良く捕捉する埋め込みは拡散モデルに有用な情報を与えてより低いノイズ除去損失という結果になります。様々なプロンプトと画像バリエーションによる多くのステップ (通常は数千) の後で、学習された埋め込みは (教えられている) 新しい概念の特質を望ましくは捕捉する必要があります。

 

使用方法

貴方自身の textual inversion を訓練するには、ここのサンプルスクリプト を見てください。

また訓練用のノートブックもあります : Colab

そして推論用のもの : Colab

貴方自身で訓練したコンセプトの使用に加えて、新しい Stable Diffusion 公開コンセプト・ライブラリ に訓練済み textual inversion の (コミュニティが作成した) コレクションがあります、これらは上の推論ノートブックから利用することもできます。時間とともにより多くのサンプルが追加されてこれが有用なリソースに成長することを願っています。

 

例 : ローカル実行

ここ の textual_inversion.py スクリプトは stable diffusion に対して訓練手順を実装してそれを適応させる方法を示しています。

 

依存関係のインストール

スクリプトを実行する前に、ライブラリの training 依存関係を確実にインストールしてください :

pip install diffusers[training] accelerate transformers

そして 🤗 Accelerate 環境を以下で初期化します :

accelerate config

 

猫の toy サンプル

重みをダウンロードしたり使用する前にモデルライセンスを承認する必要があります。このサンプルではモデル・バージョン v1-4 を使用しますので、そのカード にアクセスし、ライセンスを読んで (同意するなら) チェックボックをチェックする必要があります。

貴方は 🤗 Hugging Face ハブの登録ユーザである必要があり、コードが動作するにはアクセストークンを使用する必要もあります。アクセストークンの詳細は、ドキュメントのこのセクション を参照してください。

トークンを認証するには以下のコマンドを実行します :

huggingface-cli login

レポジトリを既にクローンしている場合は、これらのステップを進む必要はありません。続くコマンドから –use_auth_token arg を単純に除去できます。

 
そしてデータセットを取得しましょう。ここ から 3-4 画像をダウンロードしてそれらをディレクトリにセーブします。これが私たちの訓練データです。

そして以下を使用して訓練を起動します :

export MODEL_NAME="runwayml/stable-diffusion-v1-5"
export DATA_DIR="path-to-dir-containing-images"

accelerate launch textual_inversion.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --train_data_dir=$DATA_DIR \
  --learnable_property="object" \
  --placeholder_token="" --initializer_token="toy" \
  --resolution=512 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --max_train_steps=3000 \
  --learning_rate=5.0e-04 --scale_lr \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --output_dir="textual_inversion_cat"

A full training run takes ~1 hour on one V100 GPU.

 

推論

上のコマンドを使用してモデルを訓練したら、推論は単純に StableDiffusionPipeline を使用して行なうことができます。プロンプトで placeholder_token を含めることを確実にしてください。

from diffusers import StableDiffusionPipeline

model_id = "path-to-your-trained-model"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50, guidance_scale=7.5).images[0]

image.save("cat-backpack.png")

 

以上