Diffusers documentation

Adaptadores legados

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

and get access to the augmented documentation experience

to get started

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]
Original image
imagem original
Control image (Canny edges)
imagem canny
Generated image (T2I-Adapter + prompt)
imagem gerada

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]
Control image (Canny edges)
imagem canny
Control image (depth map)
mapa de profundidade
Generated image (MultiAdapter + prompt)
imagem gerada

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]
Update on GitHub