Diffusers documentation

Textual Inversion

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Textual Inversion

Textual Inversionは、少数のサンプル画像から新しいテキスト埋め込みを学習することでモデルをパーソナライズするための学習手法です。学習によって生成されるファイルは非常に小さく(数KB程度)、新しい埋め込みはテキストエンコーダーに読み込むことができます。

TextualInversionLoaderMixin は、Diffusers および Automatic1111 から Textual Inversion の埋め込みをテキストエンコーダーに読み込み、その埋め込みを有効化する特別なトークンをロードする関数を提供します。

Textual Inversionの埋め込みの読み込み方法の詳細については、Textual Inversionの読み込みガイドを参照してください。

TextualInversionLoaderMixin

class diffusers.loaders.TextualInversionLoaderMixin

< >

( )

Textual Inversionのトークンと埋め込みを、トークナイザーとテキストエンコーダーに読み込みます。

load_textual_inversion

< >

( pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]]token: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None**kwargs )

パラメータ

  • pretrained_model_name_or_path (str または os.PathLike または list[str or os.PathLike] または Dict または list[Dict]) — 次のいずれか、またはそれらのリストを指定できます:
    • model id(例: sd-concepts-library/low-poly-hd-logos-icons)の文字列で、Hub上でホストされている事前学習済みモデルを指定します。
    • テキストインバージョンの重みを含むディレクトリへのパス(例: ./my_text_inversion_directory/)。
    • テキストインバージョンの重みを含むファイル(例: ./my_text_inversions.pt)へのパス。
    • torch state dictです。
  • token (str または list[str]、省略可) — テキスト反転の重みに使用するトークンを上書きします。pretrained_model_name_or_path がリストの場合、token も同じ長さのリストである必要があります。
  • text_encoder (CLIPTextModel、任意) — 凍結されたテキストエンコーダー(clip-vit-large-patch14)。 指定しない場合、関数は self.tokenizer を使用します。
  • tokenizer (CLIPTokenizer、任意) — テキストをトークン化するためのCLIPTokenizerです。指定しない場合、関数はself.tokenizerを使用します。
  • weight_name (str, 省略可) — カスタム重みファイルの名前。次の場合に使用します:
    • 保存されたテキストインバージョンファイルは🤗 Diffusers形式ですが、text_inv.binのような特定の重み名で保存されています。
    • 保存されたテキストインバージョンファイルは、Automatic1111形式です。
  • cache_dir (str | os.PathLike, 任意) — 標準のキャッシュを使用しない場合、ダウンロードした事前学習モデルの構成がキャッシュされるディレクトリのパス。
  • force_download (bool、任意、デフォルトは False) — モデルの重みおよび設定ファイルを(再)ダウンロードすることを強制するかどうか。キャッシュされたバージョンが存在する場合でも、それらを無視してダウンロードします。
  • proxies (dict[str, str]、省略可) — プロトコルまたはエンドポイントごとに使用するプロキシサーバーの辞書です。例えば、{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'} のように指定します。各リクエストでこれらのプロキシが使用されます。
  • local_files_only (bool、任意、デフォルトは False) — ローカルのモデル重みと設定ファイルのみを読み込むかどうかを指定します。True に設定すると、モデルは Hub からダウンロードされません。
  • hf_token (str または bool、省略可) — リモートファイルの HTTP ベアラ認証に使用するトークンです。True の場合、diffusers-cli login で生成されたトークン(~/.huggingface に保存されています)が使用されます。
  • revision (str、任意、デフォルトは"main") — 使用する特定のモデルのバージョンです。ブランチ名、タグ名、コミット ID、または Git によって許可される任意の識別子を使用できます。
  • subfolder (str、任意、デフォルトは"") — Hub またはローカル上のより大きなモデルリポジトリ内での、モデルファイルのサブフォルダの場所。
  • mirror (str, 任意) — 中国でモデルをダウンロードする際に、アクセシビリティの問題を解決するためのミラーソースです。ソースの鮮度や安全性を保証するものではなく、詳細についてはミラーサイトをご参照ください。

StableDiffusionPipelineのテキストエンコーダーにTextual Inversionの埋め込みを読み込みます(🤗 Diffusers形式とAutomatic1111形式の両方がサポートされています)。

例:

🤗 Diffusers形式でTextual Inversion埋め込みベクトルを読み込むには:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("sd-concepts-library/cat-toy")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")

Automatic1111形式のTextual Inversion埋め込みベクトルを読み込むには、まずベクトルをダウンロードしてください(civitAIなどから)。その後、ベクトルを読み込みます。

ローカルで:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")

prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")

maybe_convert_prompt

< >

( prompt: str | list[str]tokenizer: 'PreTrainedTokenizer' ) → str or list of str

パラメータ

  • prompt (str または str のリスト) — 画像生成をガイドするためのプロンプト、またはプロンプトのリスト。
  • tokenizer (PreTrainedTokenizer) — プロンプトを入力トークンにエンコードする責任を持つトークナイザーです。

戻り値

str または str のリスト

変換されたプロンプト

マルチベクトルのテキストインバージョン埋め込みに対応する特殊トークルを含むプロンプトを処理し、各ベクトルに対応する複数の特殊トークルに置き換えます。プロンプトにテキストインバージョントークルが含まれていない場合、またはテキストインバージョントークルが単一ベクトルの場合は、入力プロンプトを返します。

unload_textual_inversion

< >

( tokens: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None )

StableDiffusionPipelineのテキストエンコーダーからTextual Inversionの埋め込みをアンロードします

例:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")

# Example 1
pipeline.load_textual_inversion("sd-concepts-library/gta5-artwork")
pipeline.load_textual_inversion("sd-concepts-library/moeb-style")

# Remove all token embeddings
pipeline.unload_textual_inversion()

# Example 2
pipeline.load_textual_inversion("sd-concepts-library/moeb-style")
pipeline.load_textual_inversion("sd-concepts-library/gta5-artwork")

# Remove just one token
pipeline.unload_textual_inversion("<moe-bius>")

# Example 3: unload from SDXL
pipeline = AutoPipelineForText2Image.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0")
embedding_path = hf_hub_download(
    repo_id="linoyts/web_y2k", filename="web_y2k_emb.safetensors", repo_type="model"
)

# load embeddings to the text encoders
state_dict = load_file(embedding_path)

# load embeddings of text_encoder 1 (CLIP ViT-L/14)
pipeline.load_textual_inversion(
    state_dict["clip_l"],
    tokens=["<s0>", "<s1>"],
    text_encoder=pipeline.text_encoder,
    tokenizer=pipeline.tokenizer,
)
# load embeddings of text_encoder 2 (CLIP ViT-G/14)
pipeline.load_textual_inversion(
    state_dict["clip_g"],
    tokens=["<s0>", "<s1>"],
    text_encoder=pipeline.text_encoder_2,
    tokenizer=pipeline.tokenizer_2,
)

# Unload explicitly from both text encoders and tokenizers
pipeline.unload_textual_inversion(
    tokens=["<s0>", "<s1>"], text_encoder=pipeline.text_encoder, tokenizer=pipeline.tokenizer
)
pipeline.unload_textual_inversion(
    tokens=["<s0>", "<s1>"], text_encoder=pipeline.text_encoder_2, tokenizer=pipeline.tokenizer_2
)
Update on GitHub