Buckets:
T2I-Adapter
T2I-Adapter: Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models от Chong Mou, Xintao Wang, Liangbin Xie, Jian Zhang, Zhongang Qi, Ying Shan, Xiaohu Qie.
С помощью предобученных моделей мы можем передавать управляющие изображения (например, карту глубины) для управления генерацией изображений по тексту в Stable Diffusion, чтобы она следовала структуре изображения глубины и заполняла детали.
Аннотация к статье следующая:
Невероятная генеративная способность крупных текстово-изображательных (T2I) моделей продемонстрировала мощь в обучении сложным структурам и осмысленным семантикам. Однако опора исключительно на текстовые промпты не позволяет в полной мере использовать знания, усвоенные моделью, особенно когда требуется гибкий и точный контроль (например, над цветом и структурой). В данной статье мы стремимся «выявить» возможности, которые T2I-модели усвоили неявно, а затем явно использовать их для более детального управления генерацией. В частности, мы предлагаем обучать простые и лёгкие T2I-Adapters для согласования внутренних знаний T2I-моделей с внешними управляющими сигналами, при этом замораживая исходные крупные T2I-модели. Таким образом, мы можем обучать различные адаптеры в соответствии с разными условиями, достигая богатых эффектов управления и редактирования цвета и структуры результатов генерации. Кроме того, предложенные T2I-Adapters обладают привлекательными свойствами практической ценности, такими как композибельность и способность к обобщению. Обширные эксперименты показывают, что наш T2I-Adapter обеспечивает многообещающее качество генерации и широкий спектр применений.
Эта модель была добавлена участником сообщества HimariO ❤️ .
StableDiffusionAdapterPipeline[[diffusers.StableDiffusionAdapterPipeline]]
diffusers.StableDiffusionAdapterPipeline[[diffusers.StableDiffusionAdapterPipeline]]
diffusers.StableDiffusionAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, requires_safety_checker: bool = True)
Параметры:
adapter (T2IAdapter или MultiAdapter или list[T2IAdapter]) : Обеспечивает дополнительное условие для unet в процессе денойзинга. Если вы зададите несколько Adapter в виде списка, выходы каждого Adapter будут сложены вместе, чтобы создать одно объединенное дополнительное условие.
adapter_weights (list[float], optional, по умолчанию None) : список чисел с плавающей точкой, представляющий вес, который будет умножен на выход каждого адаптера перед их суммированием.
vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
text_encoder (CLIPTextModel) : Замороженный текстовый энкодер. Stable Diffusion использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.
tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.
unet (UNet2DConditionModel) : Условная архитектура U-Net для удаления шума из закодированных латентов изображения.
scheduler (SchedulerMixin) : планировщик, используемый в сочетании с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.
safety_checker (StableDiffusionSafetyChecker) : модуль классификации, оценивающий, могут ли сгенерированные изображения считаться оскорбительными или вредными. Подробности см. в карточке модели.
feature_extractor (CLIPImageProcessor) : Модель, извлекающая признаки из сгенерированных изображений для использования в качестве входных данных для safety_checker.
Пайплайн для генерации изображений по тексту с использованием Stable Diffusion, дополненный T2I-Adapter https://huggingface.co/papers/2302.08453
Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
call[[diffusers.StableDiffusionAdapterPipeline.call]]
__call__(prompt: str | list[str] = None, image: typing.Union[torch.Tensor, PIL.Image.Image, list[PIL.Image.Image]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, clip_skip: int | None = None)
Параметры:
prompt (str или list[str], необязательный) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
image (torch.Tensor, PIL.Image.Image, list[torch.Tensor] или list[PIL.Image.Image] или list[list[PIL.Image.Image]]) : Вводное условие для Adapter. Adapter использует это вводное условие для генерации направляющих сигналов для Unet. Если тип указан как torch.Tensor, значение передаётся в Adapter без изменений. Также в качестве изображения может приниматься PIL.Image.Image. Изображение управления автоматически масштабируется под размер выходного изображения.
height (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Высота генерируемого изображения в пикселях.
width (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях.
num_inference_steps (int, optional, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
timesteps (list[int], optional) : Пользовательские шаги для процесса денойзинга с планировщиками, поддерживающими аргумент timesteps в их методе set_timesteps. Если не определено, будет использоваться поведение по умолчанию при передаче num_inference_steps. Должны быть в порядке убывания.
sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.
guidance_scale (float, optional, по умолчанию 7.5) : Масштаб руководства, как определено в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.
negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. вместо этого. Если не задан, необходимо передать negative_prompt_embeds. вместо этого. Игнорируется, если не используется направляющее влияние (т. е. игнорируется, если guidance_scale меньше 1).
num_images_per_prompt (int, необязательный, по умолчанию 1) : Количество изображений, генерируемых на один запрос.
eta (float, optional, по умолчанию 0.0) : Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.
generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.
latents (torch.Tensor, необязательный) : Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы скорректировать одну и ту же генерацию с разными промптами. Если не предоставлены, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.
prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
output_type (str, необязательный, по умолчанию "pil") : Формат вывода для генерируемого изображения. Выберите между PIL: PIL.Image.Image или np.array.
return_dict (bool, необязательный, по умолчанию True) : Возвращать ли ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput вместо обычного кортежа.
callback (Callable, необязательный) : функция, которая будет вызываться каждые callback_steps шагов во время инференса. Функция будет вызвана со следующими аргументами: callback(step: int, timestep: int, latents: torch.Tensor).
callback_steps (int, optional, по умолчанию 1) : Частота вызова функции callback. Если не указано, callback будет вызываться на каждом шаге.
cross_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttnProcessor, определенный в self.processor в diffusers.models.attention_processor.
adapter_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) : Выходные данные адаптера умножаются на adapter_conditioning_scale перед добавлением к остаточному соединению в исходном unet. Если при инициализации указано несколько адаптеров, соответствующий масштаб можно задать в виде списка.
clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Возвращает: ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput или tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput if return_dict is True, otherwise a tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of bools denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the safety_checker`.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter
>>> image = load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )
>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)
>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
... "CompVis/stable-diffusion-v1-4",
... adapter=adapter,
... torch_dtype=torch.float16,
... )
>>> pipe.to("cuda")
>>> out_image = pipe(
... "At night, glowing cubes in front of the beach",
... image=color_palette,
... ).images[0]
enable_attention_slicing[[diffusers.StableDiffusionAdapterPipeline.enable_attention_slicing]]
enable_attention_slicing(slice_size: str | int = 'auto')
Параметры:
slice_size (str или int, необязательный, по умолчанию "auto") : Если указано "auto", вход для головок внимания делится пополам, и внимание вычисляется в два этапа. Если указано "max", для экономии максимального объёма памяти выполняется по одному срезу за раз. Если указано число, используется столько срезов, сколько получается от attention_head_dim // slice_size. В этом случае attention_head_dim должно быть кратным slice_size.
Включает послойный вычисление внимания. При включении этого параметра модуль внимания разбивает входной тензор на фрагменты для вычисления внимания в несколько шагов. Если используется более одной головы внимания, вычисления выполняются последовательно для каждой головы. Это полезно для экономии памяти ценой небольшого снижения скорости.
> ⚠️ Не включайте нарезку внимания, если вы уже используете
scaled_dot_product_attention(SDPA) из PyTorch > 2.0 или xFormers. Эти вычисления внимания уже очень экономны по памяти, поэтому вам не нужно включать > эту функцию. Если вы включите нарезку внимания (attention slicing) с SDPA или xFormers, это может привести к серьезному замедлению!
Примеры:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
disable_attention_slicing[[diffusers.StableDiffusionAdapterPipeline.disable_attention_slicing]]
disable_attention_slicing()
Отключает вычисление внимания с нарезкой. Если enable_attention_slicing был вызван ранее, внимание вычисляется за один шаг.
enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionAdapterPipeline.enable_xformers_memory_efficient_attention]]
enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)
Параметры:
attention_op (Callable, необязательный) : Переопределяет оператор по умолчанию None для использования в качестве аргумента op функции memory_efficient_attention() xFormers.
Включить энергоэффективное внимание от xFormers. При включении этого параметра следует ожидать снижение потребления памяти GPU и возможное ускорение во время инференса. Ускорение во время обучения не гарантируется.
> ⚠️ Если включены и memory efficient attention, и sliced attention, memory efficient attention имеет > приоритет.
Примеры:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionAdapterPipeline.disable_xformers_memory_efficient_attention]]
disable_xformers_memory_efficient_attention()
Отключить энергоэффективное внимание из xFormers.
encode_prompt[[diffusers.StableDiffusionAdapterPipeline.encode_prompt]]
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Параметры:
prompt (str или list[str], необязательный) : промпт для кодирования
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).
prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
lora_scale (float, необязательный) : Масштаб LoRA, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.
clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
get_guidance_scale_embedding[[diffusers.StableDiffusionAdapterPipeline.get_guidance_scale_embedding]]
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
Параметры:
w (torch.Tensor) : Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов.
embedding_dim (int, необязательный, по умолчанию 512) : Размерность генерируемых эмбеддингов.
dtype (torch.dtype, необязательный, по умолчанию torch.float32) : Тип данных для генерируемых эмбеддингов.
Возвращает: torch.Tensor
Векторы встраиваний с формой (len(w), embedding_dim).
StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]
diffusers.StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]
diffusers.StableDiffusionXLAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, force_zeros_for_empty_prompt: bool = True, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
Параметры:
adapter (T2IAdapter или MultiAdapter или list[T2IAdapter]) : Обеспечивает дополнительное условие для unet в процессе денойзинга. Если вы зададите несколько Adapter в виде списка, выходы каждого Adapter будут сложены вместе, чтобы создать одно объединенное дополнительное условие.
adapter_weights (list[float], optional, по умолчанию None) : список чисел с плавающей точкой, представляющий вес, который будет умножен на выход каждого адаптера перед их суммированием.
vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
text_encoder (CLIPTextModel) : Замороженный текстовый энкодер. Stable Diffusion использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.
tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.
unet (UNet2DConditionModel) : Условная архитектура U-Net для удаления шума из закодированных латентов изображения.
scheduler (SchedulerMixin) : планировщик, используемый в сочетании с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.
safety_checker (StableDiffusionSafetyChecker) : модуль классификации, оценивающий, могут ли сгенерированные изображения считаться оскорбительными или вредными. Подробности см. в карточке модели.
feature_extractor (CLIPImageProcessor) : Модель, извлекающая признаки из сгенерированных изображений для использования в качестве входных данных для safety_checker.
Пайплайн для генерации изображений по тексту с использованием Stable Diffusion, дополненный T2I-Adapter https://huggingface.co/papers/2302.08453
Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- from_single_file() для загрузки файлов
.ckpt - load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
- load_ip_adapter() для загрузки IP-адаптеров
call[[diffusers.StableDiffusionXLAdapterPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = 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: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] | None = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] | None = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, adapter_conditioning_factor: float = 1.0, clip_skip: int | None = None)
Параметры:
prompt (str или list[str], необязательный) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется prompt
image (torch.Tensor, PIL.Image.Image, list[torch.Tensor] или list[PIL.Image.Image] или list[list[PIL.Image.Image]]) : Вводное условие для Adapter. Adapter использует это вводное условие для генерации направляющих сигналов для Unet. Если тип указан как torch.Tensor, значение передаётся в Adapter без изменений. Также в качестве изображения может приниматься PIL.Image.Image. Изображение управления автоматически масштабируется под размер выходного изображения.
height (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Высота генерируемого изображения в пикселях. Значения ниже 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и чекпоинтов, которые не были специально дообучены на низких разрешениях.
width (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях. Значения менее 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.
num_inference_steps (int, optional, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
timesteps (list[int], optional) : Пользовательские шаги для процесса денойзинга с планировщиками, поддерживающими аргумент timesteps в их методе set_timesteps. Если не определено, будет использоваться поведение по умолчанию при передаче num_inference_steps. Должны быть в порядке убывания.
sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.
denoising_end (float, optional) : When specified, determines the fraction (between 0.0 and 1.0) of the total denoising process to be completed before it is intentionally prematurely terminated. As a result, the returned sample will still retain a substantial amount of noise as determined by the discrete timesteps selected by the scheduler. The denoising_end parameter should ideally be utilized when this pipeline forms a part of a "Mixture of Denoisers" multi-pipeline setup, as elaborated in Refining the Image Output
guidance_scale (float, optional, по умолчанию 5.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 используется в обоих текстовых кодировщиках
num_images_per_prompt (int, необязательный, по умолчанию 1) : Количество изображений, генерируемых на один запрос.
eta (float, optional, по умолчанию 0.0) : Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.
generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.
latents (torch.Tensor, необязательный) : Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы скорректировать одну и ту же генерацию с разными промптами. Если не предоставлены, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.
prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.
negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
ip_adapter_image : (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.
ip_adapter_image_embeds (list[torch.Tensor], необязательный) : Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (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.StableDiffusionAdapterPipelineOutput вместо обычного кортежа.
callback (Callable, необязательный) : функция, которая будет вызываться каждые callback_steps шагов во время инференса. Функция будет вызвана со следующими аргументами: callback(step: int, timestep: int, latents: torch.Tensor).
callback_steps (int, optional, по умолчанию 1) : Частота вызова функции callback. Если не указано, callback будет вызываться на каждом шаге.
cross_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.
guidance_rescale (float, optional, defaults to 0.0) : Guidance rescale factor proposed by Common Diffusion Noise Schedules and Sample Steps are Flawed guidance_scale is defined as φ in equation 16. of Common Diffusion Noise Schedules and Sample Steps are Flawed. Guidance rescale factor should fix overexposure when using zero terminal SNR.
original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Если original_size не совпадает с target_size, изображение будет выглядеть как уменьшенное или увеличенное. По умолчанию original_size равно (height, width), если не указано иное. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : crops_coords_top_left можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции crops_coords_top_left вниз. Как правило, хорошо центрированные изображения получаются при установке crops_coords_top_left в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
target_size (tuple[int], optional, по умолчанию (1024, 1024)) : В большинстве случаев target_size следует установить в желаемую высоту и ширину генерируемого изображения. Если не указано, по умолчанию будет (height, width). Часть микроусловий SDXL, описанная в разделе 2.2 https://huggingface.co/papers/2307.01952. раздел 2.2 https://huggingface.co/papers/2307.01952.
negative_original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного условия процесса генерации на основе конкретного разрешения изображения. Является частью микроусловия SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
negative_crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : Используется для негативного обусловливания процесса генерации на основе конкретных координат кадрирования. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
negative_target_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного обусловливания процесса генерации на основе целего разрешения изображения. В большинстве случаев должно совпадать с target_size. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
adapter_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) : Выходные данные адаптера умножаются на adapter_conditioning_scale перед добавлением к остаточному соединению в исходном unet. Если при инициализации указано несколько адаптеров, соответствующий масштаб можно задать в виде списка.
adapter_conditioning_factor (float, optional, по умолчанию 1.0) : Доля шагов, для которых должен применяться адаптер. Если adapter_conditioning_factor равно 0.0, адаптер не применяется вовсе. Если adapter_conditioning_factor равно 1.0, адаптер применяется для всех шагов. Если adapter_conditioning_factor равно 0.5, адаптер применяется для половины шагов.
clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Возвращает: ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput или tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> import torch
>>> from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler
>>> from diffusers.utils import load_image
>>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L")
>>> model_id = "stabilityai/stable-diffusion-xl-base-1.0"
>>> adapter = T2IAdapter.from_pretrained(
... "Adapter/t2iadapter",
... subfolder="sketch_sdxl_1.0",
... torch_dtype=torch.float16,
... adapter_type="full_adapter_xl",
... )
>>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler")
>>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
... model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler
... ).to("cuda")
>>> generator = torch.manual_seed(42)
>>> sketch_image_out = pipe(
... prompt="a photo of a dog in real world, high quality",
... negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality",
... image=sketch_image,
... generator=generator,
... guidance_scale=7.5,
... ).images[0]
enable_attention_slicing[[diffusers.StableDiffusionXLAdapterPipeline.enable_attention_slicing]]
enable_attention_slicing(slice_size: str | int = 'auto')
Параметры:
slice_size (str или int, необязательный, по умолчанию "auto") : Если указано "auto", вход для головок внимания делится пополам, и внимание вычисляется в два этапа. Если указано "max", для экономии максимального объёма памяти выполняется по одному срезу за раз. Если указано число, используется столько срезов, сколько получается от attention_head_dim // slice_size. В этом случае attention_head_dim должно быть кратным slice_size.
Включает послойный вычисление внимания. При включении этого параметра модуль внимания разбивает входной тензор на фрагменты для вычисления внимания в несколько шагов. Если используется более одной головы внимания, вычисления выполняются последовательно для каждой головы. Это полезно для экономии памяти ценой небольшого снижения скорости.
> ⚠️ Не включайте нарезку внимания, если вы уже используете
scaled_dot_product_attention(SDPA) из PyTorch > 2.0 или xFormers. Эти вычисления внимания уже очень экономны по памяти, поэтому вам не нужно включать > эту функцию. Если вы включите нарезку внимания (attention slicing) с SDPA или xFormers, это может привести к серьезному замедлению!
Примеры:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
disable_attention_slicing[[diffusers.StableDiffusionXLAdapterPipeline.disable_attention_slicing]]
disable_attention_slicing()
Отключает вычисление внимания с нарезкой. Если enable_attention_slicing был вызван ранее, внимание вычисляется за один шаг.
enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionXLAdapterPipeline.enable_xformers_memory_efficient_attention]]
enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)
Параметры:
attention_op (Callable, необязательный) : Переопределяет оператор по умолчанию None для использования в качестве аргумента op функции memory_efficient_attention() xFormers.
Включить энергоэффективное внимание от xFormers. При включении этого параметра следует ожидать снижение потребления памяти GPU и возможное ускорение во время инференса. Ускорение во время обучения не гарантируется.
> ⚠️ Если включены и memory efficient attention, и sliced attention, memory efficient attention имеет > приоритет.
Примеры:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionXLAdapterPipeline.disable_xformers_memory_efficient_attention]]
disable_xformers_memory_efficient_attention()
Отключить энергоэффективное внимание из xFormers.
encode_prompt[[diffusers.StableDiffusionXLAdapterPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Параметры:
prompt (str или list[str], необязательный) : промпт для кодирования
prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется 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 используется в обоих текстовых кодировщиках
prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.
negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
lora_scale (float, optional) : масштаб lora, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.
clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
get_guidance_scale_embedding[[diffusers.StableDiffusionXLAdapterPipeline.get_guidance_scale_embedding]]
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
Параметры:
w (torch.Tensor) : Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов.
embedding_dim (int, необязательный, по умолчанию 512) : Размерность генерируемых эмбеддингов.
dtype (torch.dtype, необязательный, по умолчанию torch.float32) : Тип данных для генерируемых эмбеддингов.
Возвращает: torch.Tensor
Векторы встраиваний с формой (len(w), embedding_dim).
Xet Storage Details
- Size:
- 69.3 kB
- Xet hash:
- b58fb1887b46eb7b22daecaa9ae804df383e47314a22b3a223951f81d696913d
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.