Diffusers documentation
Inversion textuelle
Inversion textuelle
Textual Inversion est une méthode d’entraînement permettant de personnaliser des modèles en apprenant de nouvelles embeddings de texte à partir de quelques images d’exemple. Le fichier généré par l’entraînement est extrêmement petit (quelques Ko) et les nouvelles embeddings peuvent être chargées dans l’encodeur de texte.
TextualInversionLoaderMixin fournit une fonction pour charger les embeddings Textual Inversion depuis Diffusers et Automatic1111 dans le text encoder, ainsi qu’un jeton spécial pour activer les embeddings.
Pour en savoir plus sur la manière de charger les embeddings Textual Inversion, consultez le guide de chargement Textual Inversion.
TextualInversionLoaderMixin
Chargez les jetons et les plongements de Textual Inversion dans le tokenizer et l’encodeur de texte.
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 )
Paramètres
- pretrained_model_name_or_path (
strouos.PathLikeoulist[str or os.PathLike]ouDictoulist[Dict]) — Peut être l'un des éléments suivants ou une liste de ceux-ci :- Une chaîne de caractères, l'identifiant du modèle (par exemple
sd-concepts-library/low-poly-hd-logos-icons) d'un modèle pré-entraîné hébergé sur le Hub. - Un chemin vers un dossier (par exemple
./my_text_inversion_directory/) contenant les poids de l'inversion textuelle. - Un chemin vers un fichier (par exemple
./my_text_inversions.pt) contenant les poids de l'inversion textuelle. - Un dictionnaire d'état torch.
- Une chaîne de caractères, l'identifiant du modèle (par exemple
- token (
stroulist[str], facultatif) — Remplace le jeton à utiliser pour les poids d'inversion textuelle. Sipretrained_model_name_or_pathest une liste, alorstokendoit également être une liste de même longueur. - text_encoder (CLIPTextModel, facultatif) — Encodeur de texte figé (clip-vit-large-patch14). Si non spécifié, la fonction utilisera self.tokenizer.
- tokenizer (CLIPTokenizer, facultatif) —
Un
CLIPTokenizerpour tokeniser le texte. S'il n'est pas spécifié, la fonction utilisera self.tokenizer. - weight_name (
str, facultatif) — Nom d'un fichier de poids personnalisé. À utiliser lorsque :- Le fichier d'inversion textuelle enregistré est au format 🤗 Diffusers, mais il a été enregistré sous un nom de poids spécifique tel que
text_inv.bin. - Le fichier d'inversion textuelle enregistré est au format Automatic1111.
- Le fichier d'inversion textuelle enregistré est au format 🤗 Diffusers, mais il a été enregistré sous un nom de poids spécifique tel que
- cache_dir (
str | os.PathLike, facultatif) — Chemin vers un répertoire où la configuration d'un modèle pré-entraîné téléchargé est mise en cache si le cache standard n'est pas utilisé. - force_download (
bool, facultatif, par défautFalse) — Indique s'il faut forcer le (re)téléchargement des poids du modèle et des fichiers de configuration, en ignorant les versions mises en cache si elles existent. - proxies (
dict[str, str], facultatif) — Un dictionnaire de serveurs proxy à utiliser par protocole ou point de terminaison, par exemple,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Les proxys sont utilisés pour chaque requête. - local_files_only (
bool, facultatif, par défautFalse) — Indique s'il faut charger uniquement les poids et les fichiers de configuration du modèle en local. Si défini surTrue, le modèle ne sera pas téléchargé depuis le Hub. - hf_token (
strou bool, facultatif) — Le jeton à utiliser comme autorisation bearer HTTP pour les fichiers distants. SiTrue, le jeton généré pardiffusers-cli login(stocké dans~/.huggingface) est utilisé. - revision (
str, facultatif, par défaut"main") — La version spécifique du modèle à utiliser. Il peut s’agir d’un nom de branche, d’un nom de tag, d’un identifiant de commit ou de tout identifiant autorisé par Git. - subfolder (
str, facultatif, par défaut"") — L’emplacement du sous-dossier d’un fichier de modèle au sein d’un dépôt de modèle plus large sur le Hub ou en local. - mirror (
str, facultatif) — Source miroir pour résoudre les problèmes d’accessibilité lors du téléchargement d’un modèle en Chine. Nous ne garantissons ni la réactivité ni la sécurité de la source ; veuillez consulter le site miroir pour plus d’informations.
Chargez les embeddings de Textual Inversion dans l’encodeur de texte de StableDiffusionPipeline (les formats 🤗 Diffusers et Automatic1111 sont pris en charge).
Exemple :
Pour charger un vecteur d'intégration de Textual Inversion au format 🤗 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")Pour charger un vecteur d’incorporation de Textual Inversion au format Automatic1111, assurez-vous d’abord de télécharger le vecteur (par exemple depuis civitAI), puis chargez le vecteur
localement :
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
Traite les invites qui incluent un jeton spécial correspondant à un embedding d'inversion textuelle multi-vecteurs, à remplacer par plusieurs jetons spéciaux, chacun correspondant à l'un des vecteurs. Si l'invite ne contient aucun jeton d'inversion textuelle ou si le jeton d'inversion textuelle est un vecteur unique, l'invite d'entrée est renvoyée.
unload_textual_inversion
< source >( tokens: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None )
Décharger les embeddings de Textual Inversion du text encoder de StableDiffusionPipeline
Exemple :
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
)