Diffusers documentation
Textual Inversion
Textual Inversion
Textual Inversionは、少数のサンプル画像から新しいテキスト埋め込みを学習することでモデルをパーソナライズするための学習手法です。学習によって生成されるファイルは非常に小さく(数KB程度)、新しい埋め込みはテキストエンコーダーに読み込むことができます。
TextualInversionLoaderMixin は、Diffusers および Automatic1111 から Textual Inversion の埋め込みをテキストエンコーダーに読み込み、その埋め込みを有効化する特別なトークンをロードする関数を提供します。
Textual Inversionの埋め込みの読み込み方法の詳細については、Textual Inversionの読み込みガイドを参照してください。
TextualInversionLoaderMixin
Textual Inversionのトークンと埋め込みを、トークナイザーとテキストエンコーダーに読み込みます。
load_textual_inversion
< source >( 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です。
- model id(例:
- 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形式です。
- 保存されたテキストインバージョンファイルは🤗 Diffusers形式ですが、
- 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
< source >( prompt: str | list[str]tokenizer: 'PreTrainedTokenizer' ) → str or list of str
マルチベクトルのテキストインバージョン埋め込みに対応する特殊トークルを含むプロンプトを処理し、各ベクトルに対応する複数の特殊トークルに置き換えます。プロンプトにテキストインバージョントークルが含まれていない場合、またはテキストインバージョントークルが単一ベクトルの場合は、入力プロンプトを返します。
unload_textual_inversion
< source >( 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
)