Diffusers documentation

Inversão textual

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

and get access to the augmented documentation experience

to get started

Inversão textual

Textual Inversion é um método de treinamento para personalizar modelos aprendendo novos embeddings de texto a partir de algumas imagens de exemplo. O arquivo gerado pelo treinamento é extremamente pequeno (alguns KBs) e os novos embeddings podem ser carregados no codificador de texto.

TextualInversionLoaderMixin fornece uma função para carregar embeddings de Textual Inversion do Diffusers e do Automatic1111 no text encoder e para carregar um token especial para ativar os embeddings.

Para saber mais sobre como carregar embeddings de Textual Inversion, consulte o guia de carregamento de Textual Inversion.

TextualInversionLoaderMixin

classe diffusers.loaders.TextualInversionLoaderMixin

< >

( )

Carregue os tokens e incorporações de Textual Inversion no tokenizer e no codificador de texto.

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 )

Parâmetros

  • pretrained_model_name_or_path (str ou os.PathLike ou list[str or os.PathLike] ou Dict ou list[Dict]) — Pode ser um dos seguintes ou uma lista deles:
    • Uma string, o id do modelo (por exemplo, sd-concepts-library/low-poly-hd-logos-icons) de um modelo pré-treinado hospedado no Hub.
    • Um caminho para um diretório (por exemplo, ./my_text_inversion_directory/) contendo os pesos de inversão textual.
    • Um caminho para um arquivo (por exemplo, ./my_text_inversions.pt) contendo pesos de inversão textual.
    • Um torch state dict.
  • token (str ou list[str], opcional) — Substitui o token a ser usado para os pesos de inversão textual. Se pretrained_model_name_or_path for uma lista, então token também deve ser uma lista de comprimento igual.
  • text_encoder (CLIPTextModel, opcional) — Codificador de texto congelado (clip-vit-large-patch14). Se não for especificado, a função utilizará self.tokenizer.
  • tokenizer (CLIPTokenizer, opcional) — Um CLIPTokenizer para tokenizar texto. Se não for especificado, a função usará self.tokenizer.
  • weight_name (str, opcional) — Nome de um arquivo de pesos personalizado. Isso deve ser usado quando:
    • O arquivo de inversão textual salvo está no formato 🤗 Diffusers, mas foi salvo sob um nome de peso específico, como text_inv.bin.
    • O arquivo de inversão textual salvo está no formato Automatic1111.
  • cache_dir (str | os.PathLike, opcional) — Caminho para um diretório onde a configuração de um modelo pré-treinado baixado é armazenada em cache, caso o cache padrão não seja utilizado.
  • force_download (bool, opcional, padrão False) — Se deve forçar o (re-)download dos pesos do modelo e dos arquivos de configuração, sobrescrevendo as versões em cache, caso existam.
  • proxies (dict[str, str], opcional) — Um dicionário de servidores proxy a serem usados por protocolo ou endpoint, por exemplo, {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Os proxies são usados em cada solicitação.
  • local_files_only (bool, opcional, padrão False) — Se deve carregar apenas os pesos e arquivos de configuração do modelo localmente. Se definido como True, o modelo não será baixado do Hub.
  • hf_token (str ou bool, opcional) — O token a ser usado como autorização de bearer HTTP para arquivos remotos. Se True, o token gerado a partir de diffusers-cli login (armazenado em ~/.huggingface) é utilizado.
  • revision (str, opcional, padrão "main") — A versão específica do modelo a ser usada. Pode ser o nome de um branch, o nome de uma tag, um id de commit ou qualquer identificador permitido pelo Git.
  • subfolder (str, opcional, padrão "") — A localização da subpasta de um arquivo de modelo dentro de um repositório de modelo maior no Hub ou localmente.
  • mirror (str, opcional) — Espelho de origem para resolver problemas de acessibilidade se você estiver baixando um modelo na China. Não garantimos a atualidade ou a segurança da origem, e você deve consultar o site do espelho para obter mais informações.

Carregue os embeddings de Textual Inversion no codificador de texto do StableDiffusionPipeline (os formatos 🤗 Diffusers e Automatic1111 são suportados).

Exemplo:

Para carregar um vetor de incorporação de Inversão Textual no formato 🤗 Diffusers:

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")

Para carregar um vetor de incorporação de Inversão Textual no formato Automatic1111, certifique-se de baixar o vetor primeiro (por exemplo, do civitAI) e, em seguida, carregar o vetor

localmente:

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")

talvez_converta_prompt

< >

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

Parâmetros

  • prompt (str ou lista de str) — O prompt ou os prompts para orientar a geração da imagem.
  • tokenizer (PreTrainedTokenizer) — O tokenizer responsável por codificar o prompt em tokens de entrada.

Retorna

str ou lista de str

O prompt convertido

Processa prompts que incluem um token especial correspondente a uma incorporação de inversão textual multivetor a ser substituída por múltiplos tokens especiais, cada um correspondente a um dos vetores. Se o prompt não tiver um token de inversão textual ou se o token de inversão textual for de um único vetor, o prompt de entrada é retornado.

unload_textual_inversion

< >

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

Descarregar os embeddings de Textual Inversion do codificador de texto de StableDiffusionPipeline

Exemplo:

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