Diffusers documentation
Модели латентной консистентности
Модели латентной консистентности
Модели латентной согласованности (LCM) были предложены в работе Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference авторами Simian Luo, Yiqin Tan, Longbo Huang, Jian Li и Hang Zhao.
Аннотация к статье приведена ниже:
Модели латентной диффузии (LDM) достигли выдающихся результатов в синтезе изображений высокого разрешения. Однако итеративный процесс выборки вычислительно затратен и приводит к медленной генерации. Вдохновлённые моделями согласованности (song et al.), мы предлагаем латентные модели согласованности (LCM), которые обеспечивают быстрое выведение с минимальным числом шагов для любых предобученных LDM, включая Stable Diffusion (rombach et al). Рассматривая управляемый обратный процесс диффузии как решение расширенного обыкновенного дифференциального уравнения потока вероятностей (PF-ODE), LCM спроектированы так, чтобы напрямую предсказывать решение такого ОДУ в латентном пространстве, что снижает необходимость в множественных итерациях и позволяет осуществлять быструю выборку с высокой точностью. Эффективно дистиллированные из предобученных диффузионных моделей с классификаторно-свободным управлением, высококачественная LCM 768 x 768 с 2~4 шагами требует всего 32 часов GPU A100 для обучения. Кроме того, мы вводим латентную согласованную дообучение (LCF), новый метод, разработанный специально для дообучения LCM на пользовательских наборах изображений. Оценка на наборе данных LAION-5B-Aesthetics показывает, что LCM достигают передовых результатов в генерации изображений по тексту с выведением за несколько шагов. Страница проекта: this https URL.
Демо для чекпоинта SimianLuo/LCM_Dreamshaper_v7 можно найти здесь.
Пайплайны были предоставлены luosiallen, nagolinc и dg845.
LCM и LCM-LoRA доступны для Stable Diffusion v1.5, Stable Diffusion XL и модели SSD-1B. Их контрольные точки можно найти в коллекциях Latent Consistency.
Текст в изображение
Чтобы использовать LCM, необходимо загрузить контрольную точку LCM для поддерживаемой вами модели в UNet2DConditionModel и заменить планировщик на LCMScheduler. После этого вы можете использовать конвейер как обычно, передавая текстовый промпт для генерации изображения всего за 4 шага.
При использовании LCM следует учитывать несколько моментов:
- Как правило, размер батча удваивается внутри конвейера для classifier-free guidance. Однако LCM применяет guidance с помощью guidance embeddings и не требует удвоения размера батча, что приводит к более быстрому инференсу. Недостаток в том, что negative prompts не работают с LCM, поскольку они не оказывают никакого влияния на процесс денойзинга.
- Оптимальный диапазон для
guidance_scaleсоставляет [3., 13.], так как именно с этими значениями обучалась UNet. Однако в большинстве случаев также эффективно отключитьguidance_scale, установив значение 1.0.
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch
unet = UNet2DConditionModel.from_pretrained(
"latent-consistency/lcm-sdxl",
dtype=torch.float16,
variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(0)
image = pipe(
prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image
Чтобы использовать LCM-LoRAs, необходимо заменить планировщик на LCMScheduler и загрузить веса LCM-LoRA с помощью метода load_lora_weights(). После этого можно использовать пайплайн как обычно, передавая текстовый промпт для генерации изображения всего за 4 шага.
При использовании LCM-LoRAs следует учитывать несколько моментов:
- Как правило, размер батча удваивается внутри конвейера для classifier-free guidance. Однако LCM применяет guidance с помощью guidance embeddings и не требует удвоения размера батча, что приводит к более быстрому инференсу. Недостаток в том, что negative prompts не работают с LCM, поскольку они не оказывают никакого влияния на процесс денойзинга.
- Вы можете использовать guidance с LCM-LoRAs, но он очень чувствителен к высоким значениям
guidance_scale, что может привести к артефактам на сгенерированном изображении. Лучшие значения, которые мы нашли, находятся в диапазоне [1.0, 2.0]. - Замените stabilityai/stable-diffusion-xl-base-1.0 на любую дообученную модель. Например, попробуйте использовать чекпоинт animagine-xl для генерации аниме-изображений с помощью SDXL.
import torch
from diffusers import DiffusionPipeline, LCMScheduler
pipe = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
variant="fp16",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")
prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(42)
image = pipe(
prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=1.0
).images[0]
image
Изображение в изображение
Чтобы использовать LCM для преобразования изображения в изображение, необходимо загрузить контрольную точку LCM для поддерживаемой вами модели в UNet2DConditionModel и заменить планировщик на LCMScheduler. После этого вы можете использовать конвейер как обычно, передавая текстовый промпт и исходное изображение, чтобы сгенерировать изображение всего за 4 шага.
Экспериментируйте с различными значениями
num_inference_steps,strengthиguidance_scale, чтобы получить наилучшие результаты.
import torch
from diffusers import AutoPipelineForImage2Image, UNet2DConditionModel, LCMScheduler
from diffusers.utils import load_image
unet = UNet2DConditionModel.from_pretrained(
"SimianLuo/LCM_Dreamshaper_v7",
subfolder="unet",
dtype=torch.float16,
)
pipe = AutoPipelineForImage2Image.from_pretrained(
"Lykon/dreamshaper-7",
unet=unet,
dtype=torch.float16,
variant="fp16",
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png")
prompt = "Astronauts in a jungle, cold color palette, muted colors, detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
prompt,
image=init_image,
num_inference_steps=4,
guidance_scale=7.5,
strength=0.5,
generator=generator
).images[0]
image
Чтобы использовать LCM-LoRAs для задачи image-to-image, необходимо заменить планировщик на LCMScheduler и загрузить веса LCM-LoRA с помощью метода load_lora_weights(). После этого можно использовать пайплайн как обычно, передав текстовый промпт и исходное изображение, чтобы сгенерировать изображение всего за 4 шага.
Экспериментируйте с различными значениями
num_inference_steps,strengthиguidance_scale, чтобы получить наилучшие результаты.
import torch
from diffusers import AutoPipelineForImage2Image, LCMScheduler
from diffusers.utils import make_image_grid, load_image
pipe = AutoPipelineForImage2Image.from_pretrained(
"Lykon/dreamshaper-7",
dtype=torch.float16,
variant="fp16",
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png")
prompt = "Astronauts in a jungle, cold color palette, muted colors, detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
prompt,
image=init_image,
num_inference_steps=4,
guidance_scale=1,
strength=0.6,
generator=generator
).images[0]
image
Инпейнтинг
Чтобы использовать LCM-LoRAs для inpainting, необходимо заменить планировщик на LCMScheduler и загрузить веса LCM-LoRA с помощью метода load_lora_weights(). После этого можно использовать пайплайн как обычно, передав текстовый промпт, исходное изображение и маску, чтобы сгенерировать изображение всего за 4 шага.
import torch
from diffusers import AutoPipelineForInpainting, LCMScheduler
from diffusers.utils import load_image, make_image_grid
pipe = AutoPipelineForInpainting.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-inpainting",
dtype=torch.float16,
variant="fp16",
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint.png")
mask_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint_mask.png")
prompt = "concept art digital painting of an elven castle, inspired by lord of the rings, highly detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
prompt=prompt,
image=init_image,
mask_image=mask_image,
generator=generator,
num_inference_steps=4,
guidance_scale=4,
).images[0]
image
Адаптеры
LCM совместимы с адаптерами, такими как LoRA, ControlNet, T2I-Adapter и AnimateDiff. Вы можете использовать скорость LCM в этих адаптерах для генерации изображений в определённом стиле или для условного управления моделью на основе другого входа, например, canny-изображения.
LoRA
LoRA-адаптеры можно быстро дообучить, чтобы они освоили новый стиль по нескольким изображениям, и подключить к предобученной модели для генерации изображений в этом стиле.
Загрузите контрольную точку LCM для поддерживаемой вами модели в UNet2DConditionModel и замените планировщик на LCMScheduler. После этого вы можете использовать метод load_lora_weights() для загрузки весов LoRA в LCM и генерации стилизованного изображения за несколько шагов.
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch
unet = UNet2DConditionModel.from_pretrained(
"latent-consistency/lcm-sdxl",
dtype=torch.float16,
variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")
prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(
prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image
Замените планировщик на LCMScheduler. Затем с помощью метода load_lora_weights() загрузите веса LCM-LoRA и стилевой LoRA, который вы хотите использовать. Соедините оба адаптера LoRA с помощью метода ~loaders.UNet2DConditionLoadersMixin.set_adapters и сгенерируйте стилизованное изображение за несколько шагов.
import torch
from diffusers import DiffusionPipeline, LCMScheduler
pipe = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
variant="fp16",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl", adapter_name="lcm")
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")
pipe.set_adapters(["lcm", "papercut"], adapter_weights=[1.0, 0.8])
prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(prompt, num_inference_steps=4, guidance_scale=1, generator=generator).images[0]
image
ControlNet
ControlNet — это адаптеры, которые можно обучать на разнообразных входных данных, таких как канни-контур, оценка позы или глубина. ControlNet можно вставить в конвейер, чтобы обеспечить модели дополнительное условие и контроль для более точной генерации.
Дополнительные модели ControlNet, обученные на других входных данных, можно найти в репозитории lllyasviel.
Загрузите модель ControlNet, обученную на canny-изображениях, и передайте её в ControlNetModel. Затем загрузите модель LCM в StableDiffusionControlNetPipeline и замените планировщик на LCMScheduler. Теперь передайте canny-изображение в конвейер и сгенерируйте изображение.
Экспериментируйте с различными значениями
num_inference_steps,controlnet_conditioning_scale,cross_attention_kwargsиguidance_scale, чтобы получить наилучшие результаты.
import torch
import cv2
import numpy as np
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, LCMScheduler
from diffusers.utils import load_image, make_image_grid
image = load_image(
"https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((512, 512))
image = np.array(image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"SimianLuo/LCM_Dreamshaper_v7",
controlnet=controlnet,
dtype=torch.float16,
safety_checker=None,
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
generator = torch.manual_seed(0)
image = pipe(
"the mona lisa",
image=canny_image,
num_inference_steps=4,
generator=generator,
).images[0]
make_image_grid([canny_image, image], rows=1, cols=2)
Загрузите модель ControlNet, обученную на canny-изображениях, и передайте её в ControlNetModel. Затем вы можете загрузить модель Stable Diffusion v1.5 в StableDiffusionControlNetPipeline и заменить планировщик на LCMScheduler. Используйте метод load_lora_weights() для загрузки весов LCM-LoRA, передайте canny-изображение в конвейер и сгенерируйте изображение.
Экспериментируйте с различными значениями
num_inference_steps,controlnet_conditioning_scale,cross_attention_kwargsиguidance_scale, чтобы получить наилучшие результаты.
import torch
import cv2
import numpy as np
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, LCMScheduler
from diffusers.utils import load_image
image = load_image(
"https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((512, 512))
image = np.array(image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5",
controlnet=controlnet,
dtype=torch.float16,
safety_checker=None,
variant="fp16"
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")
generator = torch.manual_seed(0)
image = pipe(
"the mona lisa",
image=canny_image,
num_inference_steps=4,
guidance_scale=1.5,
controlnet_conditioning_scale=0.8,
cross_attention_kwargs={"scale": 1},
generator=generator,
).images[0]
image
T2I-Adapter
T2I-Adapter — это ещё более лёгкий адаптер, чем ControlNet, который обеспечивает дополнительный вход для условного управления предобученной моделью. Он работает быстрее, чем ControlNet, но результаты могут быть немного хуже.
Дополнительные контрольные точки T2I-Adapter, обученные на других входных данных, можно найти в репозитории TencentArc.
Загрузите T2IAdapter, обученный на canny-изображениях, и передайте его в StableDiffusionXLAdapterPipeline. Затем загрузите контрольную точку LCM в UNet2DConditionModel и замените планировщик на LCMScheduler. Теперь передайте canny-изображение в конвейер и сгенерируйте изображение.
import torch
import cv2
import numpy as np
from PIL import Image
from diffusers import StableDiffusionXLAdapterPipeline, UNet2DConditionModel, T2IAdapter, LCMScheduler
from diffusers.utils import load_image, make_image_grid
# detect the canny map in low resolution to avoid high-frequency details
image = load_image(
"https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((384, 384))
image = np.array(image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image).resize((1024, 1216))
adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda") # or "mps", "xpu", "cpu"
unet = UNet2DConditionModel.from_pretrained(
"latent-consistency/lcm-sdxl",
dtype=torch.float16,
variant="fp16",
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
unet=unet,
adapter=adapter,
dtype=torch.float16,
variant="fp16",
).to("cuda")
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
prompt = "the mona lisa, 4k picture, high quality"
negative_prompt = "extra digit, fewer digits, cropped, worst quality, low quality, glitch, deformed, mutated, ugly, disfigured"
generator = torch.manual_seed(0)
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
image=canny_image,
num_inference_steps=4,
guidance_scale=5,
adapter_conditioning_scale=0.8,
adapter_conditioning_factor=1,
generator=generator,
).images[0]
Загрузите T2IAdapter, обученный на canny-изображениях, и передайте его в StableDiffusionXLAdapterPipeline. Замените планировщик на LCMScheduler и используйте метод load_lora_weights() для загрузки весов LCM-LoRA. Передайте canny-изображение в конвейер и сгенерируйте изображение.
import torch
import cv2
import numpy as np
from PIL import Image
from diffusers import StableDiffusionXLAdapterPipeline, UNet2DConditionModel, T2IAdapter, LCMScheduler
from diffusers.utils import load_image, make_image_grid
# detect the canny map in low resolution to avoid high-frequency details
image = load_image(
"https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((384, 384))
image = np.array(image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image).resize((1024, 1024))
adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda") # or "mps", "xpu", "cpu"
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
adapter=adapter,
dtype=torch.float16,
variant="fp16",
).to("cuda")
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")
prompt = "the mona lisa, 4k picture, high quality"
negative_prompt = "extra digit, fewer digits, cropped, worst quality, low quality, glitch, deformed, mutated, ugly, disfigured"
generator = torch.manual_seed(0)
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
image=canny_image,
num_inference_steps=4,
guidance_scale=1.5,
adapter_conditioning_scale=0.8,
adapter_conditioning_factor=1,
generator=generator,
).images[0]
AnimateDiff
AnimateDiff — это адаптер, добавляющий движение к изображению. Его можно использовать с большинством моделей Stable Diffusion, фактически превращая их в модели «генерации видео». Для получения хороших результатов с моделью видео обычно требуется генерация нескольких кадров (16–24), что может быть очень медленным процессом для обычной модели Stable Diffusion. LCM-LoRA позволяет ускорить этот процесс, требуя всего 4–8 шагов для каждого кадра.
Загрузите AnimateDiffPipeline и передайте в него MotionAdapter. Затем замените планировщик на LCMScheduler и объедините оба адаптера LoRA с помощью метода ~loaders.UNet2DConditionLoadersMixin.set_adapters. Теперь вы можете передать промпт в пайплайн и сгенерировать анимированное изображение.
import torch
from diffusers import MotionAdapter, AnimateDiffPipeline, DDIMScheduler, LCMScheduler
from diffusers.utils import export_to_gif
adapter = MotionAdapter.from_pretrained("guoyww/animatediff-motion-adapter-v1-5")
pipe = AnimateDiffPipeline.from_pretrained(
"frankjoshua/toonyou_beta6",
motion_adapter=adapter,
).to("cuda") # or "mps", "xpu", "cpu"
# set scheduler
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
# load LCM-LoRA
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5", adapter_name="lcm")
pipe.load_lora_weights("guoyww/animatediff-motion-lora-zoom-in", weight_name="diffusion_pytorch_model.safetensors", adapter_name="motion-lora")
pipe.set_adapters(["lcm", "motion-lora"], adapter_weights=[0.55, 1.2])
prompt = "best quality, masterpiece, 1girl, looking at viewer, blurry background, upper body, contemporary, dress"
generator = torch.manual_seed(0)
frames = pipe(
prompt=prompt,
num_inference_steps=5,
guidance_scale=1.25,
cross_attention_kwargs={"scale": 1},
num_frames=24,
generator=generator
).frames[0]
export_to_gif(frames, "animation.gif")
LatentConsistencyModelPipeline
класс diffusers.LatentConsistencyModelPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: LCMSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilimage_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = Nonerequires_safety_checker: bool = True )
Параметры
- vae (AutoencoderKL) — модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
- text_encoder (CLIPTextModel) — Замороженный текстовый энкодер (clip-vit-large-patch14).
- tokenizer (CLIPTokenizer) —
CLIPTokenizerдля токенизации текста. - unet (UNet2DConditionModel) —
UNet2DConditionModelдля удаления шума из закодированных латентов изображения. - scheduler (SchedulerMixin) —
планировщик, используемый в связке с
unetдля удаления шума из закодированных латентов изображения. В настоящее время поддерживается только LCMScheduler. - safety_checker (
StableDiffusionSafetyChecker) — модуль классификации, оценивающий, могут ли сгенерированные изображения считаться оскорбительными или вредными. Подробнее о потенциальных рисках модели см. в карточке модели. - feature_extractor (CLIPImageProcessor) —
CLIPImageProcessorдля извлечения признаков из сгенерированных изображений; используется как вход дляsafety_checker. - requires_safety_checker (
bool, необязательный, по умолчаниюTrue) — Указывает, требуется ли конвейеру компонент проверки безопасности.
Пайплайн для генерации изображений по тексту с использованием латентной модели согласованности.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
- from_single_file() для загрузки файлов
.ckpt - load_ip_adapter() для загрузки IP-адаптеров
__call__
< source >( prompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 4original_inference_steps: int = Nonetimesteps: list = Noneguidance_scale: float = 8.5num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embeds. - height (
int, необязательный, по умолчаниюself.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях. - width (
int, необязательный, по умолчаниюself.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - original_inference_steps (
int, необязательный) — Исходное количество шагов инференса, используемое для построения линейно распределённого расписания временных шагов, из которого мы выбираемnum_inference_stepsравномерно распределённых временных шагов в качестве итогового расписания, следуя методу Skipping-Step из статьи (см. раздел 4.3). Если не задано, по умолчанию используется атрибутoriginal_inference_stepsпланировщика. - timesteps (
list[int], необязательный) — Пользовательские шаги для процесса удаления шума. Если не заданы, используются равномерно распределенныеnum_inference_stepsшага из исходного расписания шагов обучения/дистилляции LCM. Значения должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 7.5) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовымprompt, ценой снижения качества изображения. Guidance scale активируется, когдаguidance_scale > 1. Обратите внимание, что в оригинальной статье о latent consistency models используется другая формулировка CFG, где значения guidance scale уменьшены на 1 (поэтому в формулировке из статьи CFG активируется, когдаguidance_scale > 0). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргумента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.Imageиnp.array. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать StableDiffusionPipelineOutput вместо обычного кортежа. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processor. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя. - callback_on_step_end (
Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsбудет содержать список всех тензоров, как указано вcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна.
Возвращает
StableDiffusionPipelineOutput или tuple
Если return_dict равно True, возвращается StableDiffusionPipelineOutput,
в противном случае возвращается tuple, где первый элемент — это список с сгенерированными изображениями, а
второй элемент — это список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение
контент, нежелательный для работы (nsfw).
Функция вызова конвейера для генерации.
Примеры:
>>> from diffusers import DiffusionPipeline
>>> import torch
>>> pipe = DiffusionPipeline.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)
>>> prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(prompt=prompt, num_inference_steps=num_inference_steps, guidance_scale=8.0).images
>>> images[0].save("image.png")enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
Параметры
- s1 (
float) — Коэффициент масштабирования для этапа 1, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления. - s2 (
float) — Коэффициент масштабирования для этапа 2, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления. - b1 (
float) — Коэффициент масштабирования для этапа 1, усиливающий вклад признаков базовой модели. - b2 (
float) — Коэффициент масштабирования для этапа 2, усиливающий вклад признаков базовой модели.
Включает механизм FreeU, как описано в https://huggingface.co/papers/2309.11497.
Суффиксы после коэффициентов масштабирования обозначают этапы, на которых они применяются.
Сочетания значений, которые хорошо работают для различных пайплайнов, таких как Stable Diffusion v1, v2 и Stable Diffusion XL, приведены в официальном репозитории.
Отключает механизм FreeU, если он включен.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_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 (
strorlist[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, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Параметры
- w (
torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings). - embedding_dim (
int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов. - dtype (
torch.dtype, необязательный, по умолчаниюtorch.float32) — Тип данных для генерируемых эмбеддингов.
Возвращает
torch.Tensor
Векторы встраиваний с формой (len(w), embedding_dim).
LatentConsistencyModelImg2ImgPipeline
класс diffusers.LatentConsistencyModelImg2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: LCMSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilimage_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = Nonerequires_safety_checker: bool = True )
Параметры
- vae (AutoencoderKL) — модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
- text_encoder (CLIPTextModel) — Замороженный текстовый энкодер (clip-vit-large-patch14).
- tokenizer (CLIPTokenizer) —
CLIPTokenizerдля токенизации текста. - unet (UNet2DConditionModel) —
UNet2DConditionModelдля удаления шума из закодированных латентов изображения. - scheduler (SchedulerMixin) —
планировщик, используемый в связке с
unetдля удаления шума из закодированных латентов изображения. В настоящее время поддерживается только LCMScheduler. - safety_checker (
StableDiffusionSafetyChecker) — модуль классификации, оценивающий, могут ли сгенерированные изображения считаться оскорбительными или вредными. Подробнее о потенциальных рисках модели см. в карточке модели. - feature_extractor (CLIPImageProcessor) —
CLIPImageProcessorдля извлечения признаков из сгенерированных изображений; используется как вход дляsafety_checker. - requires_safety_checker (
bool, необязательный, по умолчаниюTrue) — Указывает, требуется ли конвейеру компонент проверки безопасности.
Пайплайн для генерации изображений по изображению с использованием латентной модели согласованности.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
- from_single_file() для загрузки файлов
.ckpt - load_ip_adapter() для загрузки IP-адаптеров
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonenum_inference_steps: int = 4strength: float = 0.8original_inference_steps: int = Nonetimesteps: list = Noneguidance_scale: float = 8.5num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embeds. - image (
torch.Tensor,PIL.Image.Image,np.ndarray,list[torch.Tensor],list[PIL.Image.Image]илиlist[np.ndarray]) —Imageили тензор, представляющий пакет изображений, используемый в качестве начальной точки. Также можно передавать латенты изображений в качествеimage, но при прямой передаче латентов они не кодируются повторно. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - strength (
float, необязательный, по умолчанию 0.8) — Определяет степень трансформации исходногоimage. Значение должно находиться в диапазоне от 0 до 1.imageиспользуется как стартовая точка, и чем вышеstrength, тем больше шума добавляется. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Когдаstrengthравно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного вnum_inference_steps. Значение 1 по сути игнорируетimage. - original_inference_steps (
int, необязательный) — Исходное количество шагов инференса, используемое для построения линейно распределённого расписания временных шагов, из которого мы выбираемnum_inference_stepsравномерно распределённых временных шагов в качестве итогового расписания, следуя методу Skipping-Step из статьи (см. раздел 4.3). Если не задано, по умолчанию используется атрибутoriginal_inference_stepsпланировщика. - timesteps (
list[int], необязательный) — Пользовательские шаги для процесса удаления шума. Если не заданы, используются равномерно распределенныеnum_inference_stepsшага из исходного расписания шагов обучения/дистилляции LCM. Значения должны быть в порядке убывания. - guidance_scale (
float, необязательный, по умолчанию 7.5) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовымprompt, ценой снижения качества изображения. Guidance scale активируется, когдаguidance_scale > 1. Обратите внимание, что в оригинальной статье о latent consistency models используется другая формулировка CFG, где значения guidance scale уменьшены на 1 (поэтому в формулировке из статьи CFG активируется, когдаguidance_scale > 0). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргумента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.Imageиnp.array. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать StableDiffusionPipelineOutput вместо обычного кортежа. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processor. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя. - callback_on_step_end (
Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsбудет содержать список всех тензоров, как указано вcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна.
Возвращает
StableDiffusionPipelineOutput или tuple
Если return_dict равно True, возвращается StableDiffusionPipelineOutput,
в противном случае возвращается tuple, где первый элемент — это список с сгенерированными изображениями, а
второй элемент — это список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение
контент, нежелательный для работы (nsfw).
Функция вызова конвейера для генерации.
Примеры:
>>> from diffusers import AutoPipelineForImage2Image
>>> import torch
>>> import PIL
>>> pipe = AutoPipelineForImage2Image.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)
>>> prompt = "High altitude snowy mountains"
>>> image = PIL.Image.open("./snowy_mountains.png")
>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(
... prompt=prompt, image=image, num_inference_steps=num_inference_steps, guidance_scale=8.0
... ).images
>>> images[0].save("image.png")enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
Параметры
- s1 (
float) — Коэффициент масштабирования для этапа 1, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления. - s2 (
float) — Коэффициент масштабирования для этапа 2, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления. - b1 (
float) — Коэффициент масштабирования для этапа 1, усиливающий вклад признаков базовой модели. - b2 (
float) — Коэффициент масштабирования для этапа 2, усиливающий вклад признаков базовой модели.
Включает механизм FreeU, как описано в https://huggingface.co/papers/2309.11497.
Суффиксы после коэффициентов масштабирования обозначают этапы, на которых они применяются.
Сочетания значений, которые хорошо работают для различных пайплайнов, таких как Stable Diffusion v1, v2 и Stable Diffusion XL, приведены в официальном репозитории.
Отключает механизм FreeU, если он включен.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_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 (
strorlist[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, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Параметры
- w (
torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings). - embedding_dim (
int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов. - dtype (
torch.dtype, необязательный, по умолчаниюtorch.float32) — Тип данных для генерируемых эмбеддингов.
Возвращает
torch.Tensor
Векторы встраиваний с формой (len(w), embedding_dim).
StableDiffusionPipelineOutput
класс diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
Параметры
- images (
list[PIL.Image.Image]илиnp.ndarray) — список денойзированных изображений PIL длинойbatch_sizeили массив NumPy формы(batch_size, height, width, num_channels). - nsfw_content_detected (
list[bool]) — список, указывающий, содержит ли соответствующее сгенерированное изображение контент, непригодный для рабочего места (nsfw), илиNone, если проверка безопасности не могла быть выполнена.
Класс вывода для пайплайнов Stable Diffusion.