Diffusers documentation
Adaptadores legados
Adaptadores legados
Esses métodos ainda são suportados, especialmente em checkpoints da família Stable Diffusion. Para novos trabalhos, prefira LoRA, IP-Adapter e ControlNet.
T2I-Adapter
T2I-Adapter é um adaptador para geração controlada. Ele aprende um mapeamento de um sinal de controle (por exemplo, um mapa de profundidade ou bordas canny) para os recursos internos de um modelo pré-treinado e adiciona essa orientação durante a geração. Ele tem um papel semelhante ao de ControlNet, mas é um adaptador plugado mais leve.
Carregue um adaptador condicionado por controle e, em seguida, carregue o pipeline com from_pretrained() e passe-o com adapter=.
import torch
from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, AutoencoderKL
t2i_adapter = T2IAdapter.from_pretrained(
"TencentARC/t2i-adapter-canny-sdxl-1.0",
dtype=torch.float16,
)Gere uma imagem canny com opencv-python.
import cv2
import numpy as np
from PIL import Image
from diffusers.utils import load_image
original_image = load_image(
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/non-enhanced-prompt.png"
)
image = np.array(original_image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)Passe a imagem canny para o pipeline para gerar uma imagem.
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", dtype=torch.float16)
pipeline = StableDiffusionXLAdapterPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
adapter=t2i_adapter,
vae=vae,
dtype=torch.float16,
).to("cuda") # or "mps", "xpu", "cpu"
prompt = """
A photorealistic overhead image of a cat reclining sideways in a flamingo pool floatie holding a margarita.
The cat is floating leisurely in the pool and completely relaxed and happy.
"""
pipeline(
prompt,
image=canny_image,
num_inference_steps=100,
guidance_scale=10,
).images[0]
Veja também treinamento do T2I-Adapter.
MultiAdapter
Componha múltiplos controles (por exemplo, canny e depth) com MultiAdapter. Passe uma lista de adaptadores para MultiAdapter e, em seguida, passe as imagens de controle correspondentes como uma lista para o pipeline.
Componha múltiplos controles (por exemplo, canny e depth) com MultiAdapter. Passe uma lista de adaptadores para MultiAdapter e, em seguida, passe as imagens de controle correspondentes como uma lista para o pipeline.
import torch
from diffusers.utils import load_image
from diffusers import StableDiffusionXLAdapterPipeline, AutoencoderKL, MultiAdapter, T2IAdapter
canny_image = load_image(
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/canny-cat.png"
)
depth_image = load_image(
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl_depth_image.png"
)
controls = [canny_image, depth_image]
prompt = ["""
a relaxed rabbit sitting on a striped towel next to a pool with a tropical drink nearby,
bright sunny day, vacation scene, 35mm photograph, film, professional, 4k, highly detailed
"""]
adapters = MultiAdapter(
[
T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16),
T2IAdapter.from_pretrained("TencentARC/t2i-adapter-depth-midas-sdxl-1.0", dtype=torch.float16),
]
)Passe os adaptadores, o prompt e as imagens de controle para StableDiffusionXLAdapterPipeline. Use o parâmetro adapter_conditioning_scale para determinar quanto peso atribuir a cada controle.
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", dtype=torch.float16)
pipeline = StableDiffusionXLAdapterPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
dtype=torch.float16,
vae=vae,
adapter=adapters,
).to("cuda") # or "mps", "xpu", "cpu"
pipeline(
prompt,
image=controls,
height=1024,
width=1024,
adapter_conditioning_scale=[0.7, 0.7]
).images[0]
Inversão textual
Textual Inversion personaliza um modelo para um conceito a partir de 3 a 5 imagens, ajustando finamente os embeddings de palavras vinculados a um token único (<sks>). Em seguida, você pode usar esse token no seu prompt para gerar o conceito (por exemplo, pixel art).
Os pesos de Textual Inversion geralmente têm apenas alguns KBs, pois são apenas embeddings de palavras. Carregue-os após from_pretrained() com load_textual_inversion() e inclua o token único no prompt para acionar a geração.
import torch
from diffusers import AutoPipelineForText2Image
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"pipeline.load_textual_inversion("sd-concepts-library/gta5-artwork")
prompt = "A cute brown bear eating a slice of pizza, stunning color scheme, masterpiece, illustration, <gta5-artwork> style"
pipeline(prompt).images[0]
Para treinar embeddings, consulte Treinar inversão textual.
O Textual Inversion também pode ser treinado para aprender embeddings negativos para direcionar a geração longe de características indesejadas, como “blurry” (desfocado) ou “ugly” (feio), tornando-o útil para melhorar a qualidade da imagem.
EasyNegative é um embedding negativo amplamente utilizado que contém múltiplos conceitos negativos aprendidos. Carregue os embeddings negativos e especifique o nome do arquivo e o token associados aos embeddings negativos. Passe o token para negative_prompt no seu pipeline para ativá-lo.
import torch
from diffusers import AutoPipelineForText2Image
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
pipeline.load_textual_inversion(
"EvilEngine/easynegative",
weight_name="easynegative.safetensors",
token="easynegative"
)
prompt = "A cute brown bear eating a slice of pizza, stunning color scheme, masterpiece, illustration"
negative_prompt = "easynegative"
pipeline(prompt, negative_prompt=negative_prompt).images[0]