Buckets:
ControlNet со Stable Diffusion 3
StableDiffusion3ControlNetPipeline — это реализация ControlNet для Stable Diffusion 3.
ControlNet был представлен в статье Adding Conditional Control to Text-to-Image Diffusion Models авторами Lvmin Zhang, Anyi Rao и Maneesh Agrawala.
С помощью модели ControlNet можно передать дополнительное управляющее изображение для настройки и управления генерацией в Stable Diffusion. Например, если вы предоставите карту глубины, модель ControlNet сгенерирует изображение, сохраняющее пространственную информацию из карты глубины. Это более гибкий и точный способ управления процессом генерации изображений.
Аннотация из статьи:
Мы представляем ControlNet — архитектуру нейронной сети для добавления пространственного управления условиями к крупным предобученным диффузионным моделям «текст в изображение». ControlNet фиксирует готовые к производству крупные диффузионные модели и повторно использует их глубокие и устойчивые слои кодирования, предобученные на миллиардах изображений, в качестве мощного каркаса для обучения разнообразному набору условных контролей. Нейронная архитектура соединяется с «нулевыми свёртками» (слоями свёртки с нулевой инициализацией), которые постепенно наращивают параметры от нуля и гарантируют, что вредоносный шум не может повлиять на дообучение. Мы тестируем различные условные контроли, например, края, глубину, сегментацию, позу человека и т. д., с Stable Diffusion, используя одно или несколько условий, с промптами или без них. Мы показываем, что обучение ControlNet устойчиво как на малых (<50k), так и на больших (>1m) наборах данных. Обширные результаты демонстрируют, что ControlNet может способствовать более широкому применению для управления диффузионными моделями изображений.
This controlnet code is mainly implemented by The InstantX Team. The inpainting-related code was developed by The Alimama Creative Team. You can find pre-trained checkpoints for SD3-ControlNet in the table below:
| Тип ControlNet | Разработчик | Ссылка |
|---|---|---|
| Canny | Команда InstantX | Ссылка |
| Глубина | Команда InstantX | Ссылка |
| Поза | Команда InstantX | Ссылка |
| Плитка | Команда InstantX | Ссылка |
| Инпейнтинг | Команда AlimamaCreative | ссылка |
Обязательно ознакомьтесь с руководством по планировщикам, чтобы узнать, как исследовать баланс между скоростью и качеством планировщика, а также с разделом повторное использование компонентов в разных конвейерах, чтобы узнать, как эффективно загружать одни и те же компоненты в несколько конвейеров.
StableDiffusion3ControlNetPipeline[[diffusers.StableDiffusion3ControlNetPipeline]]
diffusers.StableDiffusion3ControlNetPipeline[[diffusers.StableDiffusion3ControlNetPipeline]]
diffusers.StableDiffusion3ControlNetPipeline(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, controlnet: diffusers.models.controlnets.controlnet_sd3.SD3ControlNetModel | list[diffusers.models.controlnets.controlnet_sd3.SD3ControlNetModel] | tuple[diffusers.models.controlnets.controlnet_sd3.SD3ControlNetModel] | diffusers.models.controlnets.controlnet_sd3.SD3MultiControlNetModel, image_encoder: transformers.models.siglip.modeling_siglip.SiglipVisionModel | None = None, feature_extractor: transformers.models.siglip.image_processing_pil_siglip.SiglipImageProcessorPil | None = 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.
controlnet (SD3ControlNetModel или list[SD3ControlNetModel] или SD3MultiControlNetModel) : Обеспечивает дополнительное условие для unet в процессе денойзинга. Если вы зададите несколько ControlNet в виде списка, выходы каждого ControlNet будут сложены вместе, чтобы создать одно объединённое дополнительное условие.
image_encoder (SiglipVisionModel, необязательный) : Предобученная модель зрения для IP Adapter.
feature_extractor (SiglipImageProcessor, необязательный) : Обработчик изображений для IP Adapter.
call[[diffusers.StableDiffusion3ControlNetPipeline.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, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, controlnet_conditioning_scale: float | list[float] = 1.0, controlnet_pooled_projections: typing.Optional[torch.FloatTensor] = None, 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)
Параметры:
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, по умолчанию 5.0) : Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.
control_guidance_start (float или list[float], необязательный, по умолчанию 0.0) : Доля от общего числа шагов, на которой ControlNet начинает применяться.
control_guidance_end (float или list[float], необязательный, по умолчанию 1.0) : Доля от общего числа шагов, на которой ControlNet прекращает применяться.
control_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], : list[list[torch.Tensor]], list[list[np.ndarray]] or list[list[PIL.Image.Image]]): Вводное условие ControlNet, задающее направление для unet при генерации. Если тип указан как torch.Tensor, значение передаётся в ControlNet без изменений. В качестве изображения также допускается PIL.Image.Image. Размеры выходного изображения по умолчанию совпадают с размерами image. Если переданы высота и/или ширина, image масштабируется соответственно. Если в init указано несколько ControlNet, изображения необходимо передавать в виде списка, чтобы каждый элемент списка мог быть корректно сгруппирован в батч для входа в один ControlNet.
controlnet_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) : Выходные данные ControlNet умножаются на controlnet_conditioning_scale перед добавлением к остаточному соединению в исходном unet. Если в init указано несколько ControlNet, соответствующий масштаб можно задать в виде списка.
controlnet_pooled_projections (torch.FloatTensor формы (batch_size, projection_dim)) : Векторы, полученные из эмбеддингов входных условий controlnet.
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_xl.StableDiffusionXLPipelineOutput вместо обычного кортежа.
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.
Возвращает: ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput или tuple
~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> import torch
>>> from diffusers import StableDiffusion3ControlNetPipeline
>>> from diffusers.models import SD3ControlNetModel, SD3MultiControlNetModel
>>> from diffusers.utils import load_image
>>> controlnet = SD3ControlNetModel.from_pretrained("InstantX/SD3-Controlnet-Canny", torch_dtype=torch.float16)
>>> pipe = StableDiffusion3ControlNetPipeline.from_pretrained(
... "stabilityai/stable-diffusion-3-medium-diffusers", controlnet=controlnet, torch_dtype=torch.float16
... )
>>> pipe.to("cuda")
>>> control_image = load_image(
... "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/bird_canny.png"
... )
>>> prompt = "A bird in space"
>>> image = pipe(
... prompt, control_image=control_image, height=1024, width=768, controlnet_conditioning_scale=0.7
... ).images[0]
>>> image.save("sd3.png")
encode_image[[diffusers.StableDiffusion3ControlNetPipeline.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.StableDiffusion3ControlNetPipeline.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.StableDiffusion3ControlNetPipeline.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.
StableDiffusion3ControlNetInpaintingPipeline[[diffusers.StableDiffusion3ControlNetInpaintingPipeline]]
diffusers.StableDiffusion3ControlNetInpaintingPipeline[[diffusers.StableDiffusion3ControlNetInpaintingPipeline]]
diffusers.StableDiffusion3ControlNetInpaintingPipeline(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, controlnet: diffusers.models.controlnets.controlnet_sd3.SD3ControlNetModel | list[diffusers.models.controlnets.controlnet_sd3.SD3ControlNetModel] | tuple[diffusers.models.controlnets.controlnet_sd3.SD3ControlNetModel] | diffusers.models.controlnets.controlnet_sd3.SD3MultiControlNetModel, image_encoder: SiglipModel = None, feature_extractor: transformers.models.siglip.image_processing_pil_siglip.SiglipImageProcessorPil | None = 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.
controlnet (SD3ControlNetModel или list[SD3ControlNetModel] или SD3MultiControlNetModel) : Обеспечивает дополнительное условие для transformer в процессе денойзинга. Если вы зададите несколько ControlNet в виде списка, выходы каждого ControlNet будут сложены вместе, чтобы создать одно объединённое дополнительное условие.
image_encoder (PreTrainedModel, необязательный) : Предобученная модель зрения для IP Adapter.
feature_extractor (BaseImageProcessor, необязательный) : Обработчик изображений для IP Adapter.
call[[diffusers.StableDiffusion3ControlNetInpaintingPipeline.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, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_mask: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, controlnet_conditioning_scale: float | list[float] = 1.0, controlnet_pooled_projections: typing.Optional[torch.FloatTensor] = None, 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)
Параметры:
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, по умолчанию 5.0) : Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.
control_guidance_start (float или list[float], необязательный, по умолчанию 0.0) : Доля от общего числа шагов, на которой ControlNet начинает применяться.
control_guidance_end (float или list[float], необязательный, по умолчанию 1.0) : Доля от общего числа шагов, на которой ControlNet прекращает применяться.
control_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений для инпейнтинга (какие части изображения следует замаскировать с помощью control_mask и перерисовать согласно prompt). Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если это тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W). Если это массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C).
control_mask (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray]) : Image, массив numpy или тензор, представляющий пакет изображений для маскирования image. Белые пиксели в маске перекрашиваются, а чёрные сохраняются. Если mask_image — это изображение PIL, оно преобразуется в одноцветный канал (яркость) перед использованием. Если это массив numpy или тензор pytorch, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма для тензора pytorch — (B, 1, H, W). А для массива numpy — (B, H, W, 1), (B, H, W), (H, W, 1) или (H, W).
controlnet_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) : Выходные данные ControlNet умножаются на controlnet_conditioning_scale перед добавлением к остаточному соединению в исходном unet. Если в init указано несколько ControlNet, соответствующий масштаб можно задать в виде списка.
controlnet_pooled_projections (torch.FloatTensor формы (batch_size, projection_dim)) : Векторы, полученные из эмбеддингов входных условий controlnet.
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_xl.StableDiffusionXLPipelineOutput вместо обычного кортежа.
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.
Возвращает: ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput или tuple
~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> import torch
>>> from diffusers.utils import load_image, check_min_version
>>> from diffusers.pipelines import StableDiffusion3ControlNetInpaintingPipeline
>>> from diffusers.models.controlnet_sd3 import SD3ControlNetModel
>>> controlnet = SD3ControlNetModel.from_pretrained(
... "alimama-creative/SD3-Controlnet-Inpainting", use_safetensors=True, extra_conditioning_channels=1
... )
>>> pipe = StableDiffusion3ControlNetInpaintingPipeline.from_pretrained(
... "stabilityai/stable-diffusion-3-medium-diffusers",
... controlnet=controlnet,
... torch_dtype=torch.float16,
... )
>>> pipe.text_encoder.to(torch.float16)
>>> pipe.controlnet.to(torch.float16)
>>> pipe.to("cuda")
>>> image = load_image(
... "https://huggingface.co/alimama-creative/SD3-Controlnet-Inpainting/resolve/main/images/dog.png"
... )
>>> mask = load_image(
... "https://huggingface.co/alimama-creative/SD3-Controlnet-Inpainting/resolve/main/images/dog_mask.png"
... )
>>> width = 1024
>>> height = 1024
>>> prompt = "A cat is sitting next to a puppy."
>>> generator = torch.Generator(device="cuda").manual_seed(24)
>>> res_image = pipe(
... negative_prompt="deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, mutated hands and fingers, disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, NSFW",
... prompt=prompt,
... height=height,
... width=width,
... control_image=image,
... control_mask=mask,
... num_inference_steps=28,
... generator=generator,
... controlnet_conditioning_scale=0.95,
... guidance_scale=7,
... ).images[0]
>>> res_image.save(f"sd3.png")
encode_image[[diffusers.StableDiffusion3ControlNetInpaintingPipeline.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.StableDiffusion3ControlNetInpaintingPipeline.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.StableDiffusion3ControlNetInpaintingPipeline.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.
StableDiffusion3PipelineOutput[[diffusers.pipelines.stable_diffusion_3.pipeline_output.StableDiffusion3PipelineOutput]]
diffusers.pipelines.stable_diffusion_3.pipeline_output.StableDiffusion3PipelineOutput[[diffusers.pipelines.stable_diffusion_3.pipeline_output.StableDiffusion3PipelineOutput]]
diffusers.pipelines.stable_diffusion_3.pipeline_output.StableDiffusion3PipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)
Параметры:
images (list[PIL.Image.Image] или np.ndarray) : список денойзированных изображений PIL длиной batch_size или массив numpy с формой (batch_size, height, width, num_channels). Изображения PIL или массив numpy представляют денойзированные изображения диффузионного конвейера.
Класс вывода для пайплайнов Stable Diffusion.
Xet Storage Details
- Size:
- 68.3 kB
- Xet hash:
- 4fc7bb4612ebd8992283919d23eeb149f2728d0bdece6673d8994fb642b08bd5
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.