Diffusers documentation
DeepFloyd IF
DeepFloyd IF
Обзор
DeepFloyd IF — это новая передовая open-source модель генерации изображений по тексту, отличающаяся высокой степенью фотореализма и понимания языка. Модульная архитектура модели состоит из замороженного текстового энкодера и трёх каскадных пиксельных диффузионных модулей:
- Этап 1: базовая модель, генерирующая изображение размером 64x64 пикселя на основе текстового запроса,
- Этап 2: модель супер-разрешения 64x64 px => 256x256 px, и
- Этап 3: модель супер-разрешения 256x256 px => 1024x1024 px Этапы 1 и 2 используют замороженный текстовый энкодер на основе трансформера T5 для извлечения текстовых эмбеддингов, которые затем подаются в архитектуру UNet, усиленную механизмами cross-attention и attention pooling. Этап 3 — это модель x4 Upscaling от Stability AI. Результатом является высокоэффективная модель, превосходящая современные передовые модели и достигающая zero-shot FID-оценки 6.66 на наборе данных COCO. Наша работа подчеркивает потенциал более крупных архитектур UNet на первом этапе каскадных диффузионных моделей и демонстрирует перспективное будущее для синтеза изображений по тексту.
Использование
Прежде чем вы сможете использовать IF, вам необходимо принять условия его использования. Для этого:
- Убедитесь, что у вас есть аккаунт Hugging Face и вы вошли в систему.
- Примите лицензию на карточке модели DeepFloyd/IF-I-XL-v1.0. Принятие лицензии на карточке модели первого этапа автоматически подразумевает принятие для остальных моделей IF.
- Убедитесь, что вы вошли в систему локально. Установите
huggingface_hub:
pip install huggingface_hub --upgrade
запустите функцию входа в интерпретаторе Python:
from huggingface_hub import login
login()и введите ваш токен доступа к Hugging Face Hub.
Далее мы устанавливаем diffusers и зависимости:
pip install -q diffusers accelerate transformers
В следующих разделах приведены более подробные примеры использования IF. В частности:
- Генерация изображений по тексту
- Генерация изображений из изображений
- Инпейнтинг
- Повторное использование весов модели
- Оптимизация скорости
- Оптимизация памяти
Доступные контрольные точки
Этап 1
Этап 2
Этап 3
Генерация изображений по тексту
По умолчанию diffusers использует model cpu offloading, чтобы запускать весь пайплайн IF с использованием всего 14 ГБ видеопамяти.
from diffusers import DiffusionPipeline
from diffusers.utils import pt_to_pil, make_image_grid
import torch
# stage 1
stage_1 = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
stage_1.enable_model_cpu_offload()
# stage 2
stage_2 = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16
)
stage_2.enable_model_cpu_offload()
# stage 3
safety_modules = {
"feature_extractor": stage_1.feature_extractor,
"safety_checker": stage_1.safety_checker,
"watermarker": stage_1.watermarker,
}
stage_3 = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-x4-upscaler", **safety_modules, dtype=torch.float16
)
stage_3.enable_model_cpu_offload()
prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
generator = torch.manual_seed(1)
# text embeds
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)
# stage 1
stage_1_output = stage_1(
prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, generator=generator, output_type="pt"
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# stage 2
stage_2_output = stage_2(
image=stage_1_output,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_2_output)[0].save("./if_stage_II.png")
# stage 3
stage_3_output = stage_3(prompt=prompt, image=stage_2_output, noise_level=100, generator=generator).images
#stage_3_output[0].save("./if_stage_III.png")
make_image_grid([pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0], stage_3_output[0]], rows=1, rows=3)Генерация изображений из изображений с текстовым руководством
Те же веса модели IF можно использовать для перевода изображения в изображение с текстовым руководством или для создания вариаций изображения. В этом случае просто убедитесь, что вы загружаете веса с помощью пайплайнов IFImg2ImgPipeline и IFImg2ImgSuperResolutionPipeline.
Примечание: вы также можете напрямую перенести веса пайплайнов «текст в изображение» в пайплайны «изображение в изображение», не загружая их дважды, используя аргумент components, как описано здесь.
from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline, DiffusionPipeline
from diffusers.utils import pt_to_pil, load_image, make_image_grid
import torch
# download image
url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
original_image = load_image(url)
original_image = original_image.resize((768, 512))
# stage 1
stage_1 = IFImg2ImgPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
stage_1.enable_model_cpu_offload()
# stage 2
stage_2 = IFImg2ImgSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16
)
stage_2.enable_model_cpu_offload()
# stage 3
safety_modules = {
"feature_extractor": stage_1.feature_extractor,
"safety_checker": stage_1.safety_checker,
"watermarker": stage_1.watermarker,
}
stage_3 = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-x4-upscaler", **safety_modules, dtype=torch.float16
)
stage_3.enable_model_cpu_offload()
prompt = "A fantasy landscape in style minecraft"
generator = torch.manual_seed(1)
# text embeds
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)
# stage 1
stage_1_output = stage_1(
image=original_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# stage 2
stage_2_output = stage_2(
image=stage_1_output,
original_image=original_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_2_output)[0].save("./if_stage_II.png")
# stage 3
stage_3_output = stage_3(prompt=prompt, image=stage_2_output, generator=generator, noise_level=100).images
#stage_3_output[0].save("./if_stage_III.png")
make_image_grid([original_image, pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0], stage_3_output[0]], rows=1, rows=4)Генерация инпейнтинга по текстовому описанию
Те же веса модели IF можно использовать для перевода изображения в изображение с текстовым руководством или для создания вариаций изображения. В этом случае просто убедитесь, что вы загружаете веса с помощью пайплайнов IFInpaintingPipeline и IFInpaintingSuperResolutionPipeline.
Note: You can also directly move the weights of the text-to-image pipelines to the image-to-image pipelines
without loading them twice by making use of the ~DiffusionPipeline.components() function as explained here.
from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline, DiffusionPipeline
from diffusers.utils import pt_to_pil, load_image, make_image_grid
import torch
# download image
url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/person.png"
original_image = load_image(url)
# download mask
url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/glasses_mask.png"
mask_image = load_image(url)
# stage 1
stage_1 = IFInpaintingPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
stage_1.enable_model_cpu_offload()
# stage 2
stage_2 = IFInpaintingSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16
)
stage_2.enable_model_cpu_offload()
# stage 3
safety_modules = {
"feature_extractor": stage_1.feature_extractor,
"safety_checker": stage_1.safety_checker,
"watermarker": stage_1.watermarker,
}
stage_3 = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-x4-upscaler", **safety_modules, dtype=torch.float16
)
stage_3.enable_model_cpu_offload()
prompt = "blue sunglasses"
generator = torch.manual_seed(1)
# text embeds
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)
# stage 1
stage_1_output = stage_1(
image=original_image,
mask_image=mask_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# stage 2
stage_2_output = stage_2(
image=stage_1_output,
original_image=original_image,
mask_image=mask_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_II.png")
# stage 3
stage_3_output = stage_3(prompt=prompt, image=stage_2_output, generator=generator, noise_level=100).images
#stage_3_output[0].save("./if_stage_III.png")
make_image_grid([original_image, mask_image, pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0], stage_3_output[0]], rows=1, rows=5)Преобразование между различными конвейерами
Помимо загрузки с помощью from_pretrained, конвейеры можно загружать и напрямую друг из друга.
from diffusers import IFPipeline, IFSuperResolutionPipeline
pipe_1 = IFPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0")
pipe_2 = IFSuperResolutionPipeline.from_pretrained("DeepFloyd/IF-II-L-v1.0")
from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline
pipe_1 = IFImg2ImgPipeline(**pipe_1.components)
pipe_2 = IFImg2ImgSuperResolutionPipeline(**pipe_2.components)
from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline
pipe_1 = IFInpaintingPipeline(**pipe_1.components)
pipe_2 = IFInpaintingSuperResolutionPipeline(**pipe_2.components)Оптимизация для скорости
Самая простая оптимизация для ускорения работы IF — перенести все компоненты модели на GPU.
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.to("cuda") # or "mps", "xpu", "cpu"Вы также можете запускать процесс диффузии за меньшее количество шагов.
Это можно сделать с помощью аргумента num_inference_steps:
pipe("<prompt>", num_inference_steps=30)Или с аргументом timesteps:
from diffusers.pipelines.deepfloyd_if import fast27_timesteps
pipe("<prompt>", timesteps=fast27_timesteps)При создании вариаций изображения или инпейнтинге можно также уменьшить количество шагов с помощью аргумента strength. Аргумент strength определяет количество шума, добавляемого к входному изображению, что также влияет на число шагов в процессе денойзинга. Меньшее значение приводит к менее выраженным изменениям изображения, но ускоряет выполнение.
pipe = IFImg2ImgPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
image = pipe(image=image, prompt="<prompt>", strength=0.3).imagesВы также можете использовать torch.compile. Обратите внимание, что мы не проводили исчерпывающего тестирования torch.compile с IF, поэтому результаты могут отличаться от ожидаемых.
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
pipe.text_encoder = torch.compile(pipe.text_encoder, mode="reduce-overhead", fullgraph=True)
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)Оптимизация для памяти
При оптимизации под память GPU можно использовать стандартные API выгрузки на CPU в diffusers.
либо выгрузка модели на CPU,
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.enable_model_cpu_offload()или более агрессивное выделение на CPU по слоям.
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.enable_sequential_cpu_offload()Кроме того, T5 можно загрузить с точностью 8 бит
from transformers import T5EncoderModel
text_encoder = T5EncoderModel.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0", subfolder="text_encoder", device_map="auto", load_in_8bit=True, variant="8bit"
)
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0",
text_encoder=text_encoder, # pass the previously instantiated 8bit text encoder
unet=None,
device_map="auto",
)
prompt_embeds, negative_embeds = pipe.encode_prompt("<prompt>")Для машин с ограниченной оперативной памятью CPU, таких как бесплатный тариф Google Colab, где невозможно загрузить все компоненты модели в CPU одновременно, можно вручную загружать пайплайн только с текстовым энкодером или UNet в тот момент, когда соответствующие компоненты модели становятся необходимы.
from diffusers import IFPipeline, IFSuperResolutionPipeline
import torch
import gc
from transformers import T5EncoderModel
from diffusers.utils import pt_to_pil, make_image_grid
text_encoder = T5EncoderModel.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0", subfolder="text_encoder", device_map="auto", load_in_8bit=True, variant="8bit"
)
# text to image
pipe = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0",
text_encoder=text_encoder, # pass the previously instantiated 8bit text encoder
unet=None,
device_map="auto",
)
prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
# Remove the pipeline so we can re-load the pipeline with the unet
del text_encoder
del pipe
gc.collect()
torch.cuda.empty_cache()
pipe = IFPipeline.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16, device_map="auto"
)
generator = torch.Generator().manual_seed(0)
stage_1_output = pipe(
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
output_type="pt",
generator=generator,
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# Remove the pipeline so we can load the super-resolution pipeline
del pipe
gc.collect()
torch.cuda.empty_cache()
# First super resolution
pipe = IFSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16, device_map="auto"
)
generator = torch.Generator().manual_seed(0)
stage_2_output = pipe(
image=stage_1_output,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
output_type="pt",
generator=generator,
).images
#pt_to_pil(stage_2_output)[0].save("./if_stage_II.png")
make_image_grid([pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0]], rows=1, rows=2)Доступные конвейеры:
| Pipeline | Задачи | Colab |
|---|---|---|
| pipeline_if.py | Генерация изображений по тексту | - |
| pipeline_if_superresolution.py | Генерация изображений по тексту | - |
| pipeline_if_img2img.py | Генерация изображений из изображений | - |
| pipeline_if_img2img_superresolution.py | Генерация изображений из изображений | - |
| pipeline_if_inpainting.py | Генерация изображений из изображений | - |
| pipeline_if_inpainting_superresolution.py | Генерация изображений из изображений | - |
IFPipeline
класс diffusers.IFPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Nonenum_inference_steps: int = 100timesteps: list = Noneguidance_scale: float = 7.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1height: int | None = Nonewidth: int | None = Noneeta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = None ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - num_inference_steps (
int, необязательный, по умолчанию 100) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счет более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские timesteps для процесса денойзинга. Если не заданы, используются равноотстоящиеnum_inference_stepstimesteps. Должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 7.0) — Масштаб руководства, определенный в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счет снижения качества изображения. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - height (
int, необязательный, по умолчанию self.unet.config.sample_size) — Высота генерируемого изображения в пикселях. - width (
int, необязательный, по умолчанию self.unet.config.sample_size) — Ширина генерируемого изображения в пикселях. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - 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.IFPipelineOutputвместо обычного кортежа. - callback (
Callable, необязательный) — Функция, которая будет вызываться каждыеcallback_stepsшагов во время инференса. Функция будет вызываться со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback будет вызываться на каждом шаге. - clean_caption (
bool, необязательный, по умолчаниюTrue) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установкиbeautifulsoup4иftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor.
Возвращает
~pipelines.stable_diffusion.IFPipelineOutput или tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> from diffusers import IFPipeline, IFSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> pipe = IFPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16)
>>> pipe.enable_model_cpu_offload()
>>> prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, output_type="pt").images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image, prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, output_type="pt"
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> safety_modules = {
... "feature_extractor": pipe.feature_extractor,
... "safety_checker": pipe.safety_checker,
... "watermarker": pipe.watermarker,
... }
>>> super_res_2_pipe = DiffusionPipeline.from_pretrained(
... "stabilityai/stable-diffusion-x4-upscaler", **safety_modules, torch_dtype=torch.float16
... )
>>> super_res_2_pipe.enable_model_cpu_offload()
>>> image = super_res_2_pipe(
... prompt=prompt,
... image=image,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — использовать ли classifier free guidance - num_images_per_prompt (
int, необязательный, по умолчанию 1) — количество изображений, которые должны быть сгенерированы для каждого промпта - device — (
torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Игнорируется, если не используется направляющее значение (т. е. игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - clean_caption (bool, по умолчанию
False) — ЕслиTrue, функция предварительно обработает и очистит переданную подпись перед кодированием.
Кодирует промпт в скрытые состояния текстового энкодера.
IFSuperResolutionPipeline
класс diffusers.IFSuperResolutionPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulerimage_noising_scheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Noneheight: int = Nonewidth: int = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor] = Nonenum_inference_steps: int = 50timesteps: list = Noneguidance_scale: float = 4.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 250clean_caption: bool = True ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - height (
int, необязательный, по умолчанию None) — Высота генерируемого изображения в пикселях. - width (
int, необязательный, по умолчанию None) — Ширина генерируемого изображения в пикселях. - image (
PIL.Image.Image,np.ndarray,torch.Tensor) — Изображение, которое нужно увеличить. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - timesteps (
list[int], необязательный, по умолчанию None) — Пользовательские шаги для процесса удаления шума. Если не заданы, используются равномерно распределённыеnum_inference_stepsшага. Должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 4.0) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счёт снижения качества изображения. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - 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.IFPipelineOutputвместо обычного кортежа. - callback (
Callable, необязательный) — Функция, которая будет вызываться каждыеcallback_stepsшагов во время инференса. Функция будет вызываться со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback будет вызываться на каждом шаге. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor. - noise_level (
int, необязательный, по умолчанию 250) — Количество шума, добавляемого к увеличенному изображению. Должно находиться в диапазоне[0, 1000) - clean_caption (
bool, необязательный, по умолчаниюTrue) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установкиbeautifulsoup4иftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта.
Возвращает
~pipelines.stable_diffusion.IFPipelineOutput или tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> from diffusers import IFPipeline, IFSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> pipe = IFPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16)
>>> pipe.enable_model_cpu_offload()
>>> prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, output_type="pt").images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image, prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — использовать ли classifier free guidance - num_images_per_prompt (
int, необязательный, по умолчанию 1) — количество изображений, которые должны быть сгенерированы для каждого промпта - device — (
torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Игнорируется, если не используется направляющее значение (т. е. игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - clean_caption (bool, по умолчанию
False) — ЕслиTrue, функция предварительно обработает и очистит переданную подпись перед кодированием.
Кодирует промпт в скрытые состояния текстового энкодера.
IFImg2ImgPipeline
класс diffusers.IFImg2ImgPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 0.7num_inference_steps: int = 80timesteps: list = Noneguidance_scale: float = 10.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = None ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - strength (
float, необязательный, по умолчанию 0.7) — Концептуально указывает, насколько сильно трансформировать исходноеimage. Значение должно находиться в диапазоне от 0 до 1.imageиспользуется как отправная точка, при этом чем большеstrength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Еслиstrengthравно 1, добавленный шум будет максимальным, и процесс денойзинга будет выполняться в течение полного числа итераций, указанного вnum_inference_steps. Таким образом, значение 1 фактически игнорируетimage. - num_inference_steps (
int, необязательный, по умолчанию 80) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские timesteps для процесса денойзинга. Если не заданы, используются равноотстоящиеnum_inference_stepstimesteps. Должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 10.0) — Масштаб руководства, определенный в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счет снижения качества изображения. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - 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.IFPipelineOutputвместо обычного кортежа. - callback (
Callable, необязательный) — Функция, которая будет вызываться каждыеcallback_stepsшагов во время инференса. Функция будет вызываться со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback будет вызываться на каждом шаге. - clean_caption (
bool, необязательный, по умолчаниюTrue) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установкиbeautifulsoup4иftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor.
Возвращает
~pipelines.stable_diffusion.IFPipelineOutput или tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image.resize((768, 512))
>>> pipe = IFImg2ImgPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0",
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "A fantasy landscape in style minecraft"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFImg2ImgSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0",
... text_encoder=None,
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — использовать ли classifier free guidance - num_images_per_prompt (
int, необязательный, по умолчанию 1) — количество изображений, которые должны быть сгенерированы для каждого промпта - device — (
torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Игнорируется, если не используется направляющее значение (т. е. игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - clean_caption (bool, по умолчанию
False) — ЕслиTrue, функция предварительно обработает и очистит переданную подпись перед кодированием.
Кодирует промпт в скрытые состояния текстового энкодера.
IFImg2ImgSuperResolutionPipeline
класс diffusers.IFImg2ImgSuperResolutionPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulerimage_noising_scheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor]original_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 0.8prompt: str | list[str] = Nonenum_inference_steps: int = 50timesteps: list = Noneguidance_scale: float = 4.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 250clean_caption: bool = True ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
Параметры
- image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - original_image (
torch.TensorилиPIL.Image.Image) — Исходное изображение, от которого было полученоimage. - strength (
float, необязательный, по умолчанию 0.8) — Концептуально указывает, насколько сильно трансформировать исходноеimage. Значение должно находиться в диапазоне от 0 до 1.imageиспользуется как отправная точка, при этом чем большеstrength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Еслиstrengthравно 1, добавленный шум будет максимальным, и процесс денойзинга будет выполняться в течение полного числа итераций, указанного вnum_inference_steps. Таким образом, значение 1 фактически игнорируетimage. - prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские timesteps для процесса денойзинга. Если не заданы, используются равноотстоящиеnum_inference_stepstimesteps. Должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 4.0) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счёт снижения качества изображения. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - 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.IFPipelineOutputвместо обычного кортежа. - callback (
Callable, необязательный) — Функция, которая будет вызываться каждыеcallback_stepsшагов во время инференса. Функция будет вызываться со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback будет вызываться на каждом шаге. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor. - noise_level (
int, необязательный, по умолчанию 250) — Количество шума, добавляемого к увеличенному изображению. Должно находиться в диапазоне[0, 1000) - clean_caption (
bool, необязательный, по умолчаниюTrue) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установкиbeautifulsoup4иftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта.
Возвращает
~pipelines.stable_diffusion.IFPipelineOutput или tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image.resize((768, 512))
>>> pipe = IFImg2ImgPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0",
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "A fantasy landscape in style minecraft"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFImg2ImgSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0",
... text_encoder=None,
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — использовать ли classifier free guidance - num_images_per_prompt (
int, необязательный, по умолчанию 1) — количество изображений, которые должны быть сгенерированы для каждого промпта - device — (
torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Игнорируется, если не используется направляющее значение (т. е. игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - clean_caption (bool, по умолчанию
False) — ЕслиTrue, функция предварительно обработает и очистит переданную подпись перед кодированием.
Кодирует промпт в скрытые состояния текстового энкодера.
IFInpaintingPipeline
класс diffusers.IFInpaintingPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonemask_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 1.0num_inference_steps: int = 50timesteps: list = Noneguidance_scale: float = 7.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = None ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - mask_image (
PIL.Image.Image) —Imageили тензор, представляющий пакет изображений, для маскированияimage. Белые пиксели в маске будут перерисованы, а чёрные — сохранены. Еслиmask_image— это изображение PIL, оно будет преобразовано в одноцветный (яркостной) канал перед использованием. Если это тензор, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма —(B, H, W, 1). - strength (
float, необязательный, по умолчанию 1.0) — Концептуально указывает, насколько сильно трансформировать исходноеimage. Значение должно находиться в диапазоне от 0 до 1.imageиспользуется как отправная точка, при этом чем большеstrength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Когдаstrengthравно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного вnum_inference_steps. Таким образом, значение 1 фактически игнорируетimage. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские timesteps для процесса денойзинга. Если не заданы, используются равноотстоящиеnum_inference_stepstimesteps. Должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 7.0) — Масштаб руководства, определенный в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счет снижения качества изображения. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - 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.IFPipelineOutputвместо обычного кортежа. - callback (
Callable, необязательный) — Функция, которая будет вызываться каждыеcallback_stepsшагов во время инференса. Функция будет вызываться со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback будет вызываться на каждом шаге. - clean_caption (
bool, необязательный, по умолчаниюTrue) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установкиbeautifulsoup4иftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor.
Возвращает
~pipelines.stable_diffusion.IFPipelineOutput или tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/person.png"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/glasses_mask.png"
>>> response = requests.get(url)
>>> mask_image = Image.open(BytesIO(response.content))
>>> mask_image = mask_image
>>> pipe = IFInpaintingPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "blue sunglasses"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... mask_image=mask_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFInpaintingSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... mask_image=mask_image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — использовать ли classifier free guidance - num_images_per_prompt (
int, необязательный, по умолчанию 1) — количество изображений, которые должны быть сгенерированы для каждого промпта - device — (
torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Игнорируется, если не используется направляющее значение (т. е. игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - clean_caption (bool, по умолчанию
False) — ЕслиTrue, функция предварительно обработает и очистит переданную подпись перед кодированием.
Кодирует промпт в скрытые состояния текстового энкодера.
IFInpaintingSuperResolutionPipeline
класс diffusers.IFInpaintingSuperResolutionPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulerimage_noising_scheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor]original_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonemask_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 0.8prompt: str | list[str] = Nonenum_inference_steps: int = 100timesteps: list = Noneguidance_scale: float = 4.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 0clean_caption: bool = True ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
Параметры
- image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - original_image (
torch.TensorилиPIL.Image.Image) — Исходное изображение, от которого было полученоimage. - mask_image (
PIL.Image.Image) —Imageили тензор, представляющий пакет изображений, для маскированияimage. Белые пиксели в маске будут перерисованы, а чёрные — сохранены. Еслиmask_image— это изображение PIL, оно будет преобразовано в одноцветный (яркостной) канал перед использованием. Если это тензор, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма —(B, H, W, 1). - strength (
float, необязательный, по умолчанию 0.8) — Концептуально указывает, насколько сильно трансформировать исходноеimage. Значение должно находиться в диапазоне от 0 до 1.imageиспользуется как отправная точка, при этом чем большеstrength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Еслиstrengthравно 1, добавленный шум будет максимальным, и процесс денойзинга будет выполняться в течение полного числа итераций, указанного вnum_inference_steps. Таким образом, значение 1 фактически игнорируетimage. - prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - num_inference_steps (
int, необязательный, по умолчанию 100) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счет более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские timesteps для процесса денойзинга. Если не заданы, используются равноотстоящиеnum_inference_stepstimesteps. Должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 4.0) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счёт снижения качества изображения. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - 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.IFPipelineOutputвместо обычного кортежа. - callback (
Callable, необязательный) — Функция, которая будет вызываться каждыеcallback_stepsшагов во время инференса. Функция будет вызываться со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback будет вызываться на каждом шаге. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor. - noise_level (
int, необязательный, по умолчанию 0) — Количество шума, добавляемого к увеличенному изображению. Должно находиться в диапазоне[0, 1000) - clean_caption (
bool, необязательный, по умолчаниюTrue) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установкиbeautifulsoup4иftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта.
Возвращает
~pipelines.stable_diffusion.IFPipelineOutput или tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/person.png"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/glasses_mask.png"
>>> response = requests.get(url)
>>> mask_image = Image.open(BytesIO(response.content))
>>> mask_image = mask_image
>>> pipe = IFInpaintingPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "blue sunglasses"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... mask_image=mask_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFInpaintingSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... mask_image=mask_image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — использовать ли classifier free guidance - num_images_per_prompt (
int, необязательный, по умолчанию 1) — количество изображений, которые должны быть сгенерированы для каждого промпта - device — (
torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Если не задан, необходимо передатьnegative_prompt_embeds. вместо этого. Игнорируется, если не используется направляющее значение (т. е. игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - clean_caption (bool, по умолчанию
False) — ЕслиTrue, функция предварительно обработает и очистит переданную подпись перед кодированием.
Кодирует промпт в скрытые состояния текстового энкодера.