Diffusers documentation

Устаревшие адаптеры

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

Устаревшие адаптеры

Эти методы по-прежнему поддерживаются, особенно для чекпоинтов семейства Stable Diffusion. Для новых работ рекомендуется использовать LoRA, IP-Adapter и ControlNet.

T2I-Adapter

T2I-Adapter — это адаптер для управляемой генерации. Он обучает отображение управляющего сигнала (например, карты глубины или канни-контуров) во внутренние признаки предобученной модели и добавляет это руководство в процессе генерации. По своей роли он похож на ControlNet, но представляет собой более лёгкий подключаемый адаптер.

Загрузите адаптер с управлением по условию, затем загрузите конвейер с помощью from_pretrained() и передайте его с параметром adapter=.

import torch
from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, AutoencoderKL

t2i_adapter = T2IAdapter.from_pretrained(
    "TencentARC/t2i-adapter-canny-sdxl-1.0",
    dtype=torch.float16,
)

Сгенерируйте изображение с эффектом canny с помощью 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)

Передайте изображение canny в конвейер для генерации изображения.

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
original image
Control image (Canny edges)
canny image
Generated image (T2I-Adapter + prompt)
сгенерированное изображение

См. также обучение T2I-Adapter.

MultiAdapter

Составляйте несколько контролей (например, canny и depth) с помощью MultiAdapter. Передайте список адаптеров в MultiAdapter, затем передайте соответствующие контрольные изображения в виде списка в пайплайн.

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),
    ]
)

Передайте адаптеры, промпт и управляющие изображения в StableDiffusionXLAdapterPipeline. Используйте параметр adapter_conditioning_scale, чтобы определить вес, который следует назначить каждому управлению.

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)
canny image
Control image (depth map)
карта глубины
Generated image (MultiAdapter + prompt)
сгенерированное изображение

Textual Inversion

Textual Inversion персонализирует модель под концепцию по 3–5 изображениям, обучая эмбеддинги слов, связанные с уникальным токеном (<sks>). Затем вы можете использовать этот токен в промпте, чтобы генерировать концепцию (например, пиксель-арт).

Веса Textual Inversion обычно занимают всего несколько КБ, поскольку представляют собой лишь эмбеддинги слов. Загружайте их после from_pretrained() с помощью load_textual_inversion() и включайте уникальный токен в промпт для запуска генерации.

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]

Чтобы обучить эмбеддинги, см. Обучение текстовой инверсии.

Textual Inversion также можно обучать для получения отрицательных эмбеддингов, чтобы направлять генерацию в сторону, противоположную нежелательным характеристикам, таким как «размытость» или «некрасивость», что делает его полезным для улучшения качества изображений.

EasyNegative — это широко используемое отрицательное вложение, содержащее несколько выученных отрицательных концепций. Загрузите отрицательные вложения и укажите имя файла и токен, связанные с отрицательными вложениями. Передайте токен в negative_prompt в вашем конвейере, чтобы активировать его.

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