Buckets:
Stable Diffusion 3
Stable Diffusion 3 (SD3) была предложена в статье Scaling Rectified Flow Transformers for High-Resolution Image Synthesis Патрик Эссер, Сумит Кулал, Андреас Блаттман, Рахим Энтезари, Йонас Мюллер, Гарри Сайни, Ям Леви, Доминик Лоренц, Аксель Зорер, Фредерик Бёзел, Дастин Подель, Тим Докхорн, Сион Инглиш, Кайл Лейси, Алекс Гудвин, Янник Марек и Робин Ромбах.
Аннотация из статьи:
Модели диффузии создают данные из шума, инвертируя прямые пути преобразования данных в шум, и стали мощным методом генеративного моделирования для высокомерных перцептивных данных, таких как изображения и видео. Rectified flow — это недавняя формулировка генеративной модели, которая связывает данные и шум прямой линией. Несмотря на лучшие теоретические свойства и концептуальную простоту, этот подход пока не стал общепринятой практикой. В данной работе мы улучшаем существующие методы выборки шума для обучения моделей rectified flow, смещая их в сторону перцептивно значимых масштабов. В ходе крупномасштабного исследования мы демонстрируем превосходство этого подхода над устоявшимися формулировками диффузии при синтезе изображений по текстовому описанию высокого разрешения. Кроме того, мы представляем новую трансформерную архитектуру для генерации изображений по тексту, которая использует отдельные веса для двух модальностей и обеспечивает двунаправленный поток информации между токенами изображения и текста, улучшая понимание текста, типографику и оценки предпочтений людей. Мы показываем, что эта архитектура следует предсказуемым тенденциям масштабирования и что снижение потерь на валидации коррелирует с улучшением синтеза изображений по тексту, что подтверждается различными метриками и оценками людей.
Пример использования
Поскольку модель доступна по запросу, перед её использованием с diffusers вам необходимо перейти на страницу Stable Diffusion 3 Medium на Hugging Face, заполнить форму и принять условия доступа. После этого вам нужно выполнить вход, чтобы система знала, что вы приняли условия.
Используйте команду ниже для входа:
hf auth login
Пайплайн SD3 использует три текстовых энкодера для генерации изображения. Выгрузка моделей (model offloading) необходима для его работы на большинстве стандартных устройств. Для дополнительной экономии памяти используйте тип данных
torch.float16.
import torch
from diffusers import StableDiffusion3Pipeline
pipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3-medium-diffusers", dtype=torch.float16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
image = pipe(
prompt="a photo of a cat holding a sign that says hello world",
negative_prompt="",
num_inference_steps=28,
height=1024,
width=1024,
guidance_scale=7.0,
).images[0]
image.save("sd3_hello_world.png")
Примечание: Stable Diffusion 3.5 также можно запускать с помощью конвейера SD3, и все упомянутые оптимизации и техники применимы к нему. Всего в семействе SD3 существует три официальные модели:
stabilityai/stable-diffusion-3-medium-diffusersstabilityai/stable-diffusion-3.5-largestabilityai/stable-diffusion-3.5-large-turbo
Создание изображений по текстовому описанию с помощью IP-Adapters
IP-Adapter позволяет использовать изображения в качестве промпта для SD3 в дополнение к текстовому промпту. Это особенно полезно, когда нужно описать сложные концепции, которые трудно передать только текстом, и у вас есть референсные изображения. Для загрузки и использования IP-Adapter вам нужны:
image_encoder: Предобученная модель зрения, используемая для получения признаков изображения, как правило, это CLIP-кодировщик изображений.feature_extractor: процессор изображений, который подготавливает входное изображение для выбранногоimage_encoder.ip_adapter_id: контрольная точка, содержащая параметры слоёв кросс-внимания изображений и проекции изображений.
IP-Adapters обучаются для конкретной архитектуры модели, поэтому они также работают с дообученными вариантами базовой модели. Вы можете использовать функцию ~SD3IPAdapterMixin.set_ip_adapter_scale, чтобы настроить, насколько сильно вывод соответствует изображению-промпту. Чем выше значение, тем точнее модель следует изображению-промпту. Значение по умолчанию 0.5 обычно обеспечивает хороший баланс, позволяя модели учитывать текстовый и визуальный промпты с одинаковым весом.
import torch
from PIL import Image
from diffusers import StableDiffusion3Pipeline
from transformers import SiglipVisionModel, SiglipImageProcessor
image_encoder_id = "google/siglip-so400m-patch14-384"
ip_adapter_id = "InstantX/SD3.5-Large-IP-Adapter"
feature_extractor = SiglipImageProcessor.from_pretrained(
image_encoder_id,
dtype=torch.float16
)
image_encoder = SiglipVisionModel.from_pretrained(
image_encoder_id,
dtype=torch.float16
).to( "cuda") # or "mps", "xpu", "cpu"
pipe = StableDiffusion3Pipeline.from_pretrained(
"stabilityai/stable-diffusion-3.5-large",
dtype=torch.float16,
feature_extractor=feature_extractor,
image_encoder=image_encoder,
).to("cuda")
pipe.load_ip_adapter(ip_adapter_id)
pipe.set_ip_adapter_scale(0.6)
ref_img = Image.open("image.jpg").convert('RGB')
image = pipe(
width=1024,
height=1024,
prompt="a cat",
negative_prompt="lowres, low quality, worst quality",
num_inference_steps=24,
guidance_scale=5.0,
ip_adapter_image=ref_img
).images[0]
image.save("result.jpg")
Примеры IP-Adapter с промптом «a cat»
Ознакомьтесь с IP-Adapter, чтобы узнать больше о том, как работают IP-адаптеры.
Оптимизация памяти для SD3
SD3 использует три текстовых энкодера, один из которых — очень большая модель T5-XXL. Это затрудняет запуск модели на GPU с менее чем 24 ГБ видеопамяти, даже при использовании точности fp16. В следующем разделе описаны несколько оптимизаций памяти в Diffusers, которые упрощают запуск SD3 на оборудовании с ограниченными ресурсами.
Запуск вывода с выгрузкой модели
Самое базовое оптимизирование памяти, доступное в Diffusers, позволяет выгружать компоненты модели на CPU во время инференса, чтобы экономить память, при этом незначительно увеличивая задержку инференса. Выгрузка модели перемещает компонент модели на GPU только тогда, когда он должен быть выполнен, в то время как остальные компоненты остаются на CPU.
import torch
from diffusers import StableDiffusion3Pipeline
pipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3-medium-diffusers", dtype=torch.float16)
pipe.enable_model_cpu_offload()
image = pipe(
prompt="a photo of a cat holding a sign that says hello world",
negative_prompt="",
num_inference_steps=28,
height=1024,
width=1024,
guidance_scale=7.0,
).images[0]
image.save("sd3_hello_world.png")
Отключение текстового кодировщика T5 при выводе
Удаление требующего много памяти текстового кодировщика T5-XXL с 4,7 млрд параметров на этапе вывода может значительно снизить требования к памяти для SD3 с незначительной потерей производительности.
import torch
from diffusers import StableDiffusion3Pipeline
pipe = StableDiffusion3Pipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers",
text_encoder_3=None,
tokenizer_3=None,
dtype=torch.float16
)
pipe.to("cuda") # or "mps", "xpu", "cpu"
image = pipe(
prompt="a photo of a cat holding a sign that says hello world",
negative_prompt="",
num_inference_steps=28,
height=1024,
width=1024,
guidance_scale=7.0,
).images[0]
image.save("sd3_hello_world-no-T5.png")
Использование квантованной версии текстового энкодера T5
Мы можем использовать библиотеку bitsandbytes для загрузки и квантования текстового энкодера T5-XXL до 8-битной точности. Это позволяет продолжать использовать все три текстовых энкодера, лишь незначительно влияя на производительность.
Сначала установите библиотеку bitsandbytes.
pip install bitsandbytes
Затем загрузите модель T5-XXL с помощью BitsAndBytesConfig.
import torch
from diffusers import StableDiffusion3Pipeline
from transformers import T5EncoderModel, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model_id = "stabilityai/stable-diffusion-3-medium-diffusers"
text_encoder = T5EncoderModel.from_pretrained(
model_id,
subfolder="text_encoder_3",
quantization_config=quantization_config,
)
pipe = StableDiffusion3Pipeline.from_pretrained(
model_id,
text_encoder_3=text_encoder,
device_map="balanced",
dtype=torch.float16
)
image = pipe(
prompt="a photo of a cat holding a sign that says hello world",
negative_prompt="",
num_inference_steps=28,
height=1024,
width=1024,
guidance_scale=7.0,
).images[0]
image.save("sd3_hello_world-8bit-T5.png")
Сквозной скрипт можно найти здесь.
Оптимизация производительности для SD3
Использование Torch Compile для ускорения инференса
Использование скомпилированных компонентов в конвейере SD3 может ускорить инференс до 4 раз. Приведённый ниже фрагмент кода демонстрирует, как скомпилировать компоненты Transformer и VAE конвейера SD3.
import torch
from diffusers import StableDiffusion3Pipeline
torch.set_float32_matmul_precision("high")
torch._inductor.config.conv_1x1_as_mm = True
torch._inductor.config.coordinate_descent_tuning = True
torch._inductor.config.epilogue_fusion = False
torch._inductor.config.coordinate_descent_check_all_directions = True
pipe = StableDiffusion3Pipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
pipe.set_progress_bar_config(disable=True)
pipe.transformer.to(memory_format=torch.channels_last)
pipe.vae.to(memory_format=torch.channels_last)
pipe.transformer = torch.compile(pipe.transformer, mode="max-autotune", fullgraph=True)
pipe.vae.decode = torch.compile(pipe.vae.decode, mode="max-autotune", fullgraph=True)
# Warm Up
prompt = "a photo of a cat holding a sign that says hello world"
for _ in range(3):
_ = pipe(prompt=prompt, generator=torch.manual_seed(1))
# Run Inference
image = pipe(prompt=prompt, generator=torch.manual_seed(1)).images[0]
image.save("sd3_hello_world.png")
Полный скрипт доступен здесь.
Квантование
Квантование помогает снизить требования к памяти для очень больших моделей, храня веса модели в формате данных с меньшей точностью. Однако влияние квантования на качество видео может различаться в зависимости от используемой модели видео.
См. обзор Quantization, чтобы узнать больше о поддерживаемых бэкендах квантования и о том, как выбрать бэкенд, подходящий для вашей задачи. Пример ниже показывает, как загрузить квантованный StableDiffusion3Pipeline для инференса с помощью bitsandbytes.
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, SD3Transformer2DModel, StableDiffusion3Pipeline
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel
quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
"stabilityai/stable-diffusion-3.5-large",
subfolder="text_encoder_3",
quantization_config=quant_config,
dtype=torch.float16,
)
quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = SD3Transformer2DModel.from_pretrained(
"stabilityai/stable-diffusion-3.5-large",
subfolder="transformer",
quantization_config=quant_config,
dtype=torch.float16,
)
pipeline = StableDiffusion3Pipeline.from_pretrained(
"stabilityai/stable-diffusion-3.5-large",
text_encoder=text_encoder_8bit,
transformer=transformer_8bit,
dtype=torch.float16,
device_map="balanced",
)
prompt = "a tiny astronaut hatching from an egg on the moon"
image = pipeline(prompt, num_inference_steps=28, guidance_scale=7.0).images[0]
image.save("sd3.png")
Использование длинных промптов с текстовым энкодером T5
По умолчанию промпт текстового кодировщика T5 использует максимальную длину последовательности 256. Это значение можно изменить, установив max_sequence_length для принятия меньшего или большего количества токенов. Помните, что более длинные последовательности требуют дополнительных ресурсов и приводят к увеличению времени генерации, например, при пакетном выводе.
prompt = "A whimsical and creative image depicting a hybrid creature that is a mix of a waffle and a hippopotamus, basking in a river of melted butter amidst a breakfast-themed landscape. It features the distinctive, bulky body shape of a hippo. However, instead of the usual grey skin, the creature’s body resembles a golden-brown, crispy waffle fresh off the griddle. The skin is textured with the familiar grid pattern of a waffle, each square filled with a glistening sheen of syrup. The environment combines the natural habitat of a hippo with elements of a breakfast table setting, a river of warm, melted butter, with oversized utensils or plates peeking out from the lush, pancake-like foliage in the background, a towering pepper mill standing in for a tree. As the sun rises in this fantastical world, it casts a warm, buttery glow over the scene. The creature, content in its butter river, lets out a yawn. Nearby, a flock of birds take flight"
image = pipe(
prompt=prompt,
negative_prompt="",
num_inference_steps=28,
guidance_scale=4.5,
max_sequence_length=512,
).images[0]
Передача другого промпта в текстовый энкодер T5
Вы можете отправить разные промпты в текстовые энкодеры CLIP и текстовый энкодер T5, чтобы предотвратить усечение промпта текстовыми энкодерами CLIP и улучшить генерацию.
Промпт с CLIP Text Encoders по-прежнему обрезается до лимита в 77 токенов.
prompt = "A whimsical and creative image depicting a hybrid creature that is a mix of a waffle and a hippopotamus, basking in a river of melted butter amidst a breakfast-themed landscape. A river of warm, melted butter, pancake-like foliage in the background, a towering pepper mill standing in for a tree."
prompt_3 = "A whimsical and creative image depicting a hybrid creature that is a mix of a waffle and a hippopotamus, basking in a river of melted butter amidst a breakfast-themed landscape. It features the distinctive, bulky body shape of a hippo. However, instead of the usual grey skin, the creature’s body resembles a golden-brown, crispy waffle fresh off the griddle. The skin is textured with the familiar grid pattern of a waffle, each square filled with a glistening sheen of syrup. The environment combines the natural habitat of a hippo with elements of a breakfast table setting, a river of warm, melted butter, with oversized utensils or plates peeking out from the lush, pancake-like foliage in the background, a towering pepper mill standing in for a tree. As the sun rises in this fantastical world, it casts a warm, buttery glow over the scene. The creature, content in its butter river, lets out a yawn. Nearby, a flock of birds take flight"
image = pipe(
prompt=prompt,
prompt_3=prompt_3,
negative_prompt="",
num_inference_steps=28,
guidance_scale=4.5,
max_sequence_length=512,
).images[0]
Маленький AutoEncoder для Stable Diffusion 3
Tiny AutoEncoder for Stable Diffusion (TAESD3) — это компактная дистиллированная версия VAE для Stable Diffusion 3 от Ollin Boer Bohan, способная декодировать латенты StableDiffusion3Pipeline практически мгновенно.
Для использования со Stable Diffusion 3:
import torch
from diffusers import StableDiffusion3Pipeline, AutoencoderTiny
pipe = StableDiffusion3Pipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers", dtype=torch.float16
)
pipe.vae = AutoencoderTiny.from_pretrained("madebyollin/taesd3", dtype=torch.float16)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "slice of delicious New York-style berry cheesecake"
image = pipe(prompt, num_inference_steps=25).images[0]
image.save("cheesecake.png")
Загрузка исходных контрольных точек через from_single_file
Классы SD3Transformer2DModel и StableDiffusion3Pipeline поддерживают загрузку исходных контрольных точек с помощью метода from_single_file. Этот метод позволяет загрузить исходные файлы контрольных точек, которые использовались для обучения моделей.
Загрузка исходных контрольных точек для SD3Transformer2DModel
from diffusers import SD3Transformer2DModel
model = SD3Transformer2DModel.from_single_file("https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/sd3_medium.safetensors")
Загрузка единого контрольного пункта для StableDiffusion3Pipeline
Загрузка контрольной точки из одного файла без T5
import torch
from diffusers import StableDiffusion3Pipeline
pipe = StableDiffusion3Pipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/sd3_medium_incl_clips.safetensors",
dtype=torch.float16,
text_encoder_3=None
)
pipe.enable_model_cpu_offload()
image = pipe("a picture of a cat holding a sign that says hello world").images[0]
image.save('sd3-single-file.png')
Загрузка контрольной точки из одного файла с T5
В следующем примере загружается контрольная точка, сохранённая в формате 8-битного плавающего числа, что требует PyTorch 2.3 или более поздней версии.
import torch
from diffusers import StableDiffusion3Pipeline
pipe = StableDiffusion3Pipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/sd3_medium_incl_clips_t5xxlfp8.safetensors",
dtype=torch.float16,
)
pipe.enable_model_cpu_offload()
image = pipe("a picture of a cat holding a sign that says hello world").images[0]
image.save('sd3-single-file-t5-fp8.png')
Загрузка контрольной точки в одном файле для модели Stable Diffusion 3.5 Transformer
import torch
from diffusers import SD3Transformer2DModel, StableDiffusion3Pipeline
transformer = SD3Transformer2DModel.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-3.5-large-turbo/blob/main/sd3.5_large.safetensors",
dtype=torch.bfloat16,
)
pipe = StableDiffusion3Pipeline.from_pretrained(
"stabilityai/stable-diffusion-3.5-large",
transformer=transformer,
dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
image = pipe("a cat holding a sign that says hello world").images[0]
image.save("sd35.png")
StableDiffusion3Pipeline[[diffusers.StableDiffusion3Pipeline]]
diffusers.StableDiffusion3Pipeline[[diffusers.StableDiffusion3Pipeline]]
diffusers.StableDiffusion3Pipeline(transformer: SD3Transformer2DModel, scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, text_encoder_2: CLIPTextModelWithProjection, tokenizer_2: CLIPTokenizer, text_encoder_3: T5EncoderModel, tokenizer_3: T5Tokenizer, image_encoder: SiglipVisionModel = None, feature_extractor: SiglipImageProcessorPil = None)
Параметры:
transformer (SD3Transformer2DModel) : архитектура условного трансформера (MMDiT) для удаления шума из закодированных латентов изображения.
scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.
vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
text_encoder (CLIPTextModelWithProjection) : CLIP, а именно вариант clip-vit-large-patch14, с дополнительным слоем проекции, инициализированным диагональной матрицей размерности hidden_size.
text_encoder_2 (CLIPTextModelWithProjection) : CLIP, а именно вариант laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
text_encoder_3 (T5EncoderModel) : Замороженный текстовый энкодер. Stable Diffusion 3 использует T5, а именно вариант t5-v1_1-xxl.
tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.
tokenizer_2 (CLIPTokenizer) : Второй токенизатор класса CLIPTokenizer.
tokenizer_3 (T5TokenizerFast) : Токенизатор класса T5Tokenizer.
image_encoder (SiglipVisionModel, необязательный) : Предобученная модель зрения для IP Adapter.
feature_extractor (SiglipImageProcessor, необязательный) : Обработчик изображений для IP Adapter.
call[[diffusers.StableDiffusion3Pipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, prompt_3: str | list[str] | None = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 7.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, negative_prompt_3: str | list[str] | None = None, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, clip_skip: int | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 256, skip_guidance_layers: list[int] = None, skip_layer_guidance_scale: float = 2.8, skip_layer_guidance_stop: float = 0.2, skip_layer_guidance_start: float = 0.01, mu: float | None = None)
Параметры:
prompt (str или list[str], необязательный) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt
prompt_3 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_3 и text_encoder_3. Если не задано, вместо него будет использоваться prompt
height (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Высота генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов.
width (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов.
num_inference_steps (int, optional, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.
guidance_scale (float, optional, по умолчанию 7.0) : Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.
negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).
negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, вместо него используется negative_prompt
negative_prompt_3 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, для передачи в tokenizer_3 и text_encoder_3. Если не задан, вместо него используется negative_prompt
num_images_per_prompt (int, необязательный, по умолчанию 1) : Количество изображений, генерируемых на один запрос.
generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.
latents (torch.FloatTensor, необязательный) : Предварительно сгенерированные шумовые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Позволяет корректировать одну и ту же генерацию с помощью разных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.
prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
negative_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
pooled_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента входных данных prompt.
negative_pooled_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
ip_adapter_image (PipelineImageInput, необязательный) : Необязательное входное изображение для работы с IP-адаптерами.
ip_adapter_image_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательное эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.
output_type (str, необязательный, по умолчанию "pil") : Формат вывода для генерируемого изображения. Выберите между PIL: PIL.Image.Image или np.array.
return_dict (bool, необязательный, по умолчанию True) : Возвращать ли ~pipelines.stable_diffusion_3.StableDiffusion3PipelineOutput вместо обычного кортежа.
joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.
clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
callback_on_step_end (Callable, необязательный) : функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, как указано в callback_on_step_end_tensor_inputs.
callback_on_step_end_tensor_inputs (list, optional) : Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса pipeline.
max_sequence_length (int по умолчанию 256) : Максимальная длина последовательности, используемая с prompt.
skip_guidance_layers (list[int], optional) : Список целых чисел, указывающий слои, которые следует пропускать при применении guidance. Если не указан, для guidance будут использоваться все слои. Если указан, guidance будет применяться только к слоям, перечисленным в списке. Рекомендуемое значение от StabiltyAI для Stable Diffusion 3.5 Medium — [7, 8, 9].
skip_layer_guidance_scale (int, optional) : Масштаб руководства для слоёв, указанных в skip_guidance_layers. Руководство будет применено к слоям, указанным в skip_guidance_layers, с масштабом skip_layer_guidance_scale. Руководство будет применено к остальным слоям с масштабом 1.
skip_layer_guidance_stop (int, optional) : Шаг, на котором прекращается применение guidance для слоёв, указанных в skip_guidance_layers. Guidance применяется к слоям, указанным в skip_guidance_layers, до достижения доли, заданной в skip_layer_guidance_stop. Рекомендуемое значение от StabilityAI для Stable Diffusion 3.5 Medium — 0.2.
skip_layer_guidance_start (int, optional) : Шаг, с которого начнётся применение guidance для слоёв, указанных в skip_guidance_layers. Guidance будет применяться к слоям, указанным в skip_guidance_layers, начиная с доли, заданной в skip_layer_guidance_start. Рекомендуемое значение от StabiltyAI для Stable Diffusion 3.5 Medium — 0.01.
mu (float, необязательный) : значение mu, используемое для dynamic_shifting.
Возвращает: ~pipelines.stable_diffusion_3.StableDiffusion3PipelineOutput или tuple
~pipelines.stable_diffusion_3.StableDiffusion3PipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> import torch
>>> from diffusers import StableDiffusion3Pipeline
>>> pipe = StableDiffusion3Pipeline.from_pretrained(
... "stabilityai/stable-diffusion-3-medium-diffusers", torch_dtype=torch.float16
... )
>>> pipe.to("cuda")
>>> prompt = "A cat holding a sign that says hello world"
>>> image = pipe(prompt).images[0]
>>> image.save("sd3.png")
encode_image[[diffusers.StableDiffusion3Pipeline.encode_image]]
encode_image(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], device: device)
Параметры:
image (PipelineImageInput) : Входное изображение для кодирования.
device : (torch.device): Устройство Torch.
Возвращает: torch.Tensor
Представление признаков закодированного изображения.
Кодирует заданное изображение в представление признаков с использованием предварительно обученного кодировщика изображений.
encode_prompt[[diffusers.StableDiffusion3Pipeline.encode_prompt]]
encode_prompt(prompt: str | list[str], prompt_2: str | list[str], prompt_3: str | list[str], device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, negative_prompt_3: str | list[str] | None = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, clip_skip: int | None = None, max_sequence_length: int = 256, lora_scale: float | None = None)
Параметры:
prompt (str или list[str], необязательный) : промпт для кодирования
prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt
prompt_3 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_3 и text_encoder_3. Если не задано, во всех text-encoders используется prompt
device : (torch.device): устройство torch
num_images_per_prompt (int) : количество изображений, которые должны быть сгенерированы для каждого промпта
do_classifier_free_guidance (bool) : использовать ли классификаторное свободное наведение (classifier free guidance)
negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).
negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, negative_prompt используется во всех текстовых кодировщиках.
negative_prompt_3 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, для передачи в tokenizer_3 и text_encoder_3. Если не задан, negative_prompt используется во всех текстовых кодировщиках.
prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
negative_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
pooled_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента входных данных prompt.
negative_pooled_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
lora_scale (float, optional) : масштаб lora, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.
prepare_ip_adapter_image_embeds[[diffusers.StableDiffusion3Pipeline.prepare_ip_adapter_image_embeds]]
prepare_ip_adapter_image_embeds(ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: typing.Optional[torch.Tensor] = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True)
Параметры:
ip_adapter_image (PipelineImageInput, необязательный) : Входное изображение, из которого извлекаются признаки для IP-Adapter.
ip_adapter_image_embeds (torch.Tensor, необязательный) : Предварительно вычисленные эмбеддинги изображений.
device : (torch.device, необязательный): Устройство Torch.
num_images_per_prompt (int, по умолчанию 1) : Количество изображений, которые должны быть сгенерированы для каждого промпта.
do_classifier_free_guidance (bool, по умолчанию True) : Использовать ли classifier free guidance.
Готовит эмбеддинги изображений для использования в IP-Adapter.
Необходимо передать либо ip_adapter_image, либо ip_adapter_image_embeds.
Xet Storage Details
- Size:
- 53.4 kB
- Xet hash:
- edea9a9f35537683f328f278f908b93354c159484085baf8ae3897e4f91b5691
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.