Diffusers 文档

文本反演

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

文本反演

文本反演是一种通过从少量示例图像中学习新的文本嵌入来个性化模型的训练方法。从训练生成的文件非常小(几 KB),并且新的嵌入可以加载到文本编码器中。

TextualInversionLoaderMixin 提供了一个函数,用于将文本反演嵌入从 Diffusers 和 Automatic1111 加载到文本编码器中,并加载一个特殊 token 以激活嵌入。

要了解有关如何加载文本反演嵌入的更多信息,请参阅文本反演加载指南。

TextualInversionLoaderMixin

class diffusers.loaders.TextualInversionLoaderMixin

< >

( )

将文本反演 token 和嵌入加载到分词器和文本编码器。

load_textual_inversion

< >

( pretrained_model_name_or_path: typing.Union[str, typing.List[str], typing.Dict[str, torch.Tensor], typing.List[typing.Dict[str, torch.Tensor]]] token: typing.Union[typing.List[str], str, NoneType] = None tokenizer: typing.Optional[ForwardRef('PreTrainedTokenizer')] = None text_encoder: typing.Optional[ForwardRef('PreTrainedModel')] = None **kwargs )

参数

  • pretrained_model_name_or_path (stros.PathLikeList[str or os.PathLike]DictList[Dict]) — 可以是以下之一或它们的列表:

    • 一个字符串,预训练模型的模型 ID(例如 sd-concepts-library/low-poly-hd-logos-icons),托管在 Hub 上。
    • 一个目录的路径(例如 ./my_text_inversion_directory/),其中包含文本反演权重。
    • 一个文件的路径(例如 ./my_text_inversions.pt),其中包含文本反演权重。
    • 一个 torch 状态字典
  • token (strList[str], 可选) — 覆盖用于文本反演权重的 token。如果 pretrained_model_name_or_path 是一个列表,则 token 也必须是长度相等的列表。
  • text_encoder (CLIPTextModel, 可选) — 冻结的文本编码器 (clip-vit-large-patch14)。如果未指定,函数将采用 self.tokenizer。
  • tokenizer (CLIPTokenizer, 可选) — 一个 CLIPTokenizer 用于 token 化文本。如果未指定,函数将采用 self.tokenizer。
  • weight_name (str, 可选) — 自定义权重文件的名称。当以下情况时应使用此项:

    • 保存的文本反演文件是 🤗 Diffusers 格式,但以特定权重名称(例如 text_inv.bin)保存。
    • 保存的文本反演文件是 Automatic1111 格式。
  • cache_dir (Union[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 下载模型。
  • token (strbool, 可选) — 用作远程文件 HTTP Bearer 授权的令牌。 如果为 True,则使用从 diffusers-cli login 生成的令牌(存储在 ~/.huggingface 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。 它可以是分支名称、标签名称、提交 ID 或 Git 允许的任何标识符。
  • subfolder (str, 可选, 默认为 "") — Hub 上或本地的较大模型仓库中模型文件的子文件夹位置。
  • mirror (str, 可选) — 镜像源,用于解决在中国下载模型时的可访问性问题。 我们不保证来源的及时性或安全性,您应参考镜像站点以获取更多信息。

将 Textual Inversion 嵌入加载到 StableDiffusionPipeline 的文本编码器中(支持 🤗 Diffusers 和 Automatic1111 格式)。

示例

加载 🤗 Diffusers 格式的 Textual Inversion 嵌入向量

from diffusers import StableDiffusionPipeline
import torch

model_id = "runwayml/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 = "runwayml/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: typing.Union[str, typing.List[str]] tokenizer: PreTrainedTokenizer ) strstr 列表

参数

  • prompt (strstr 列表) — 用于引导图像生成的提示或提示列表。
  • tokenizer (PreTrainedTokenizer) — 负责将提示编码为输入令牌的分词器。

返回值

strstr 列表

转换后的提示

处理包含与多向量文本反演嵌入对应的特殊令牌的提示,以替换为每个向量对应的一个或多个特殊令牌。 如果提示没有文本反演令牌,或者文本反演令牌是单向量,则返回输入提示。

unload_textual_inversion

< >

( tokens: typing.Union[typing.List[str], str, NoneType] = None tokenizer: typing.Optional[ForwardRef('PreTrainedTokenizer')] = None text_encoder: typing.Optional[ForwardRef('PreTrainedModel')] = None )

StableDiffusionPipeline 的文本编码器中卸载 Textual Inversion 嵌入

示例

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained("runwayml/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
)
< > 在 GitHub 上更新