LEDITS++
LEDITS++由Manuel Brack, Felix Friedrich, Katharina Kornmeier, Linoy Tsaban, Patrick Schramowski, Kristian Kersting, Apolinário Passos在LEDITS++: 使用文本到图像模型进行无限的图像编辑中提出。
论文摘要如下
文本到图像扩散模型最近因其从纯文本输入中生成高保真图像的能力而备受关注。后续的研究试图利用并应用其能力进行实际图像编辑。然而,现有的图像到图像方法往往是低效的、不精确的,且适用性有限。它们要么需要耗时费力的微调,要么与输入图像偏差过大,以及/或缺乏对多个同时编辑的支持。为解决这些问题,我们介绍了LEDITS++,一种高效、通用且精确的文本图像操作技术。LEDITS++的新颖逆方法无需调整或优化,并在少数扩散步骤中产生高保真结果。其次,我们的方法支持多个同时编辑,且架构无关。第三,我们使用一种新颖的隐式掩码技术,将更改限制在相关图像区域。我们提出新的TEDBench++基准作为我们的全面评估的一部分。我们的结果表明LEDITS++的能力及其相对于先前方法的改进。项目页面可在https://leditsplusplus-project.static.hf.space找到。
我们提供基于不同预训练模型的两个不同的管道。
LEditsPPPipelineStableDiffusion
class diffusers.LEditsPPPipelineStableDiffusion
< source( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer unet: UNet2DConditionModel scheduler: Union safety_checker: StableDiffusionSafetyChecker feature_extractor: CLIPImageProcessor requires_safety_checker: bool = True )
参数
- vae (AutoencoderKL) — 用于将图像编码和解码到潜在表示的可变量自编码器 (VAE) 模型。
- text_encoder (CLIPTextModel) — 冻结的文本编码器。Stable Diffusion 使用 CLIP 的文本部分,特别是 clip-vit-large-patch14 变体。
- tokenizer (CLIPTokenizer) — CLIPTokenizer 类的词形转换器。
- unet (UNet2DConditionModel) — 用于去噪编码图像隐元的条件 U-Net 架构。
- scheduler (DPMSolverMultistepScheduler 或 DDIMScheduler) — 与
unet
结合使用以去噪编码图像隐元的调度器。可以是 DPMSolverMultistepScheduler 或 DDIMScheduler 之一。如果传递了其他调度器,则它将自动设置为 DPMSolverMultistepScheduler。 - safety_checker (
StableDiffusionSafetyChecker
) — 评估生成的图像是否可能被视为冒犯性或有害的分类模块。请参阅模型卡片获取详细信息。
使用 LEDits++ 和 Stable Diffusion 进行文本图像编辑的流程。
该模型继承了自 DiffusionPipeline 并构建在 StableDiffusionPipeline 上。查看超类文档,了解所有流程通用方法(下载、保存、在特定设备上运行等)。
__call__
( negative_prompt: 联合 = None generator: 联合 = None output_type: 可选 = 'pil' return_dict: 布尔 = True editing_prompt: 联合 = None editing_prompt_embeds: 可选 = None negative_prompt_embeds: 可选 = None reverse_editing_direction: 联合 = False edit_guidance_scale: 联合 = 5 edit_warmup_steps: 联合 = 0 edit_cooldown_steps: 联合 = None edit_threshold: 联合 = 0.9 user_mask: 可选 = None sem_guidance: 可选 = None use_cross_attn_mask: 布尔 = False use_intersect_mask: 布尔 = True attn_store_steps: 可选 = [] store_averaged_over_steps: 布尔 = True cross_attention_kwargs: 可选 = None guidance_rescale: 浮点 = 0.0 clip_skip: 可选 = None LEditsPPDiffusionPipelineOutput 或 tuple
) → LEditsPPDiffusionPipelineOutput 或 tuple
参数
- negative_prompt (
str
或List[str]
,可选) — 不引导图像生成的提示或提示列表。当不需要引导时将被忽略(即,如果guidance_scale
小于1
,则会被忽略)。 - generator (
torch.Generator
,可选) — 一个或多个用于使生成确定性 torch 生成器。 - output_type (
str
,可选,默认为"pil"
) — 生成的图像的输出格式。选择之间 PIL:PIL.Image.Image
或np.array
。 - return_dict (
bool
, optional, defaults toTrue
) — Whether or not to return a LEditsPPDiffusionPipelineOutput instead of a plain tuple. - editing_prompt (
str
orList[str]
, optional) — The prompt or prompts to guide the image generation. The image is reconstructed by settingediting_prompt = None
. Guidance direction of prompt should be specified viareverse_editing_direction
. - editing_prompt_embeds (
torch.Tensor>
, optional) — Pre-computed embeddings to use for guiding the image generation. Guidance direction of embedding should be specified viareverse_editing_direction
. - negative_prompt_embeds (
torch.Tensor
, 可选) —— 预生成的负文本嵌入。可用于轻松调整文本输入(提示加权)。如果没有提供,将根据negative_prompt
输入参数生成negativePrompt_embeds
。 - reverse_editing_direction (
bool
或List[bool]
, 可选, 默认为False
) —— 是否应增加或减少editing_prompt
中的相应提示。 - edit_guidance_scale (
float
或List[float]
, 可选, 默认为 5) —— 指引图像生成的指导尺度。如果提供列表值,则应与editing_prompt
对应。edit_guidance_scale
定义为 LEDITS++ Paper 方程式 (12) 中的s_e
。 - edit_warmup_steps (
float
或List[float]
,可选,默认为 10) — 不应用指导的扩散步骤数量(针对每个提示)。 - edit_cooldown_steps (
float
或List[float]
,可选,默认为None
) — 不再应用指导的扩散步骤数量(针对每个提示)。 - edit_threshold (
float
或List[float]
,可选,默认为 0.9) — 指导的掩码阈值。阈值应该与修改的图像区域成正比。‘edit_threshold’ 在LEDITS++ 论文的方程 12 中定义为 ‘λ’。 - user_mask (
torch.Tensor
, 可选) — 用户提供的掩码,以便更好地控制编辑过程。当LEDITS++的隐式掩码不符合用户喜好时,这很有用。 - sem_guidance (
List[torch.Tensor]
, 可选) — 在生成过程中应用的预生成指导向量的列表。列表长度必须与num_inference_steps
的长度对应。 - use_cross_attn_mask (
bool
, 默认False
) — 是否使用交叉注意力掩码。当use_intersect_mask设置为true时,始终使用交叉注意力掩码。交叉注意力掩码定义为文章12中的方程‘M^1’ LEDITS++论文。 - use_intersect_mask (
bool
, 默认值为True
) — 是否将掩码项计算为交叉注意力掩码和从噪声估计中导出的掩码的交集。交叉注意力掩码定义为方程12中的‘M^1’,从噪声估计中导出的掩码定义为‘M^2’。 - attn_store_steps (
List[int]
, 可选) — 在哪些步骤中存储注意力图到注意力存储中。仅用于可视化目的。 - store_averaged_over_steps (
bool
, 默认值为True
) — 是否储存‘attn_store_steps’的注意力图的平均值。如果为False,则单独存储每个步骤的注意力图。仅用于可视化目的。 - cross_attention_kwargs (
dict
,可选) — 当指定时,作为kwargs字典传递到在self.processor
中定义的AttentionProcessor
。 - guidance_rescale (
float
,可选,默认为0.0) — 根据Common Diffusion Noise Schedules and Sample Steps are Flawed中的指南,调整指导因素的缩放因子。缩放因子应修复使用零终端SNR时过度曝光的问题。 - 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 (
列表
, 可选) — 用于callback_on_step_end
函数的张量输入列表。列表中指定的张量将作为callback_kwargs
参数传递。您只能包含您管道类._callback_tensor_inputs
属性中列出的变量。
返回值
LEditsPPDiffusionPipelineOutput 如果 return_dict
为 True,否则为一个 元组。当返回一个元组时,第一个元素是一个生成图像的列表,第二个元素是根据
bool 列表,表示对应的生成图像是否可能代表“不适合工作”内容。safety_checker
判定的
调用管道进行编辑的函数。必须先调用 invert() 方法。编辑将始终针对最后反转的图像执行。
示例
>>> import PIL
>>> import requests
>>> import torch
>>> from io import BytesIO
>>> from diffusers import LEditsPPPipelineStableDiffusion
>>> from diffusers.utils import load_image
>>> pipe = LEditsPPPipelineStableDiffusion.from_pretrained(
... "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/cherry_blossom.png"
>>> image = load_image(img_url).convert("RGB")
>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.1)
>>> edited_image = pipe(
... editing_prompt=["cherry blossom"], edit_guidance_scale=10.0, edit_threshold=0.75
... ).images[0]
反转
< source >( image: Union source_prompt: str = '' source_guidance_scale: float = 3.5 num_inversion_steps: int = 30 skip: float = 0.15 generator: Optional = None cross_attention_kwargs: Optional = None clip_skip: Optional = None height: Optional = None width: Optional = None resize_mode: Optional = 'default' crops_coords: Optional = None ) → LEditsPPInversionPipelineOutput
参数
- image (
PipelineImageInput
) — 输入由于图像编辑所需,多个输入图像必须默认为相同的纵横比。 - source_prompt (
str
, 默认为""
) — 描述将用于逆变换引导的输入图像的提示。如果source_prompt
为""
,则禁用引导。 - source_guidance_scale (
float
, 默认为3.5
) — 逆变换期间的引导强度。 - num_inversion_steps (
int
, 默认为30
) — 执行逆变换的总步数(在丢弃初始skip
步之后)。 - skip (
float
, 默认为0.15
) — 逆变换和后续生成将忽略的初始步骤的部分。较小的值将导致对输入图像的更强更改。skip
必须在0
和1
之间。 - generator (
torch.Generator
, 可选) — 用于使反转确定性的torch.Generator
。 - cross_attention_kwargs (
dict
, 可选) — 如果指定,这个 kwargs 字典会被传递给在self.processor
中定义的AttentionProcessor
。 - clip_skip (
int
, 可选) — 在计算提示嵌入时从 CLIP 跳过的层数量。值为 1 表示使用预最终层的输出进行提示嵌入计算。 - 高度 (
int
, 可选, 默认为) — 预处理图像中的高度。如果为 None
,将使用get_default_height_width()
获取默认高度。 - 宽度 (
int
, 可选, 默认为None
) -- 预处理中的宽度。如果为None
,将使用get_default_height_width()
获取默认宽度。 - resize_mode (
str
, 可选, 默认为default
) — 调整模式,可以是default
或fill
。如果为default
,将以指定宽度和高度调整图像,可能不会保持原始宽高比。如果为fill
,将调整图像以适应指定宽度和高度,保持宽高比,并在尺寸内中心对齐图像,用图像数据填充空白。如果为crop
,将调整图像以适应指定宽度和高度,保持宽高比,并在尺寸内中心对齐图像,裁剪多余部分。注意,fill 和 crop 模式仅支持 PIL 图像输入。 - crops_coords (
列表[Tuple[int, int, int, int]]
, 可选, 默认为None
) — 批处理中每张图像的裁剪坐标。如果为None
,则不裁剪图像。
输出将包含调整大小后的输入图像(组)及其相应的VAE重建。
对于图像反演功能的管道,如LEDITS++论文中所述。LEDITS++ 论文。如果调度器设置为DDIMScheduler,将执行edit-friendly DPDM中提出的反转。
encode_prompt
< 源 >( device num_images_per_prompt enable_edit_guidance negative_prompt = None editing_prompt = None negative_prompt_embeds: Optional = None editing_prompt_embeds: Optional = None lora_scale: Optional = None clip_skip: Optional = None )
参数
- num_images_per_prompt (
int
) — 每个提示应该生成的图像数量 - enable_edit_guidance (
bool
) — 是否执行任何编辑或重建输入图像 - negative_prompt (
str
或List[str]
,可选) — 不指导图像生成的提示或提示。如果没有定义,必须传递negative_prompt_embeds
。在未使用引导时(即当guidance_scale
小于1
时)将被忽略。 - 编辑提示 (
str
或List[str]
, 可选) — 要编码的编辑提示。如果没有定义,则需要传递editing_prompt_embeds
。 - 编辑提示嵌入 (
torch.Tensor
, 可选) — 预生成的文本嵌入。可以用于轻松调整文本输入,例如提示加权。如果没有提供,则将从prompt
输入参数生成文本嵌入。 - 负提示嵌入 (
torch.Tensor
, 可选) — 预生成的负文本嵌入。可以用于轻松调整文本输入,例如提示加权。如果没有提供,则将从negative_prompt
输入参数生成负提示嵌入。 - lora_scale (
float
, 可选) — 如果加载了LoRA层,将应用于文本编码器所有LoRA层的LoRA缩放值。 - clip_skip (
int
, 可选) — 在计算提示嵌入时从CLIP中跳过的层数。值为1表示将使用预最终层的输出计算提示嵌入。
将提示编码为文本编码器隐藏状态。
LEditsPPPipelineStableDiffusionXL
类 diffusers.LEditsPPPipelineStableDiffusionXL
参数
- text_encoder (CLIPTextModel) —— 冻结文本编码器。Stable Diffusion XL 使用 CLIP 中文本部分的CLIP,具体是 clip-vit-large-patch14 变体。
- text_encoder_2 (CLIPTextModelWithProjection) —— 第二个冻结文本编码器。Stable Diffusion XL 使用 CLIP 的文本和池部分,具体是 CLIP 的 laion/CLIP-ViT-bigG-14-laion2B-39B-b160k 变体。
- tokenizer (CLIPTokenizer) —— 类 CLIPTokenizer 的分词器。
- tokenizer_2 (CLIPTokenizer) — CLIPTokenizer 的第二个分词器。
- unet (UNet2DConditionModel) — 用于消除编码图像隐变量的条件 U-Net 架构。
- scheduler (DPMSolverMultistepScheduler 或 DDIMScheduler) — 与
unet
配合使用的调度器,用于消除编码图像隐变量。可以是 DPMSolverMultistepScheduler 或 DDIMScheduler 之一。如果传入其他调度器,它将自动设置为 DPMSolverMultistepScheduler。 - force_zeros_for_empty_prompt (
bool
, 可选,默认为"True"
) — 是否应将负面提示嵌入强制设置为 0。另请参阅stabilityai/stable-diffusion-xl-base-1-0
的配置。 - add_watermarker (
bool
, 可选) — 是否使用 invisible_watermark 库 对输出图像添加水印。如果未定义,当包已安装时将默认为 True,否则不使用水印。
使用 LEDits++ 与 Stable Diffusion XL 进行文本图像编辑的管道。
此模型继承自 DiffusionPipeline 并基于 StableDiffusionXLPipeline。请检查超类文档,了解为所有管道实现的基本方法(下载、保存、在特定设备上运行等)。
此外,管道继承以下加载方法:
- LoRA: LEditsPPPipelineStableDiffusionXL.load_lora_weights()
- Ckpt: loaders.FromSingleFileMixin.from_single_file()
以及以下保存方法:
- LoRA:
loaders.StableDiffusionXLPipeline.save_lora_weights
__call__
< source >( denoising_end: Optional = None negative_prompt: Union = None negative_prompt_2: Union = None negative_prompt_embeds: Optional = None negative_pooled_prompt_embeds: Optional = None ip_adapter_image: Union = None output_type: Optional = 'pil' return_dict: bool = True cross_attention_kwargs: Optional = None guidance_rescale: float = 0.0 crops_coords_top_left: Tuple = (0, 0) target_size: Optional = None editing_prompt: Union = None editing_prompt_embeddings: Optional = None editing_pooled_prompt_embeds: Optional = None reverse_editing_direction: Union = False edit_guidance_scale: Union = 5 edit_warmup_steps: Union = 0 edit_cooldown_steps: Union = None edit_threshold: Union = 0.9 sem_guidance: Optional = None use_cross_attn_mask: bool = False use_intersect_mask: bool = False user_mask: Optional = None attn_store_steps: Optional = [] store_averaged_over_steps: bool = True clip_skip: Optional = None callback_on_step_end: Optional = None callback_on_step_end_tensor_inputs: List = ['latents'] **kwargs ) → LEditsPPDiffusionPipelineOutput or tuple
参数
- denoising_end (
float
, optional) — 当指定时,确定在目标提前终止之前需要完成的整个去噪过程的分数(介于 0.0 和 1.0 之间)。因此,返回的样本仍将保留大量由调度器选择的离散时间步决定的噪声。理想情况下,当此管道作为“混合去噪器”多管道设置的一部分时,应使用 denoising_end 参数,如[**Refining the Image - negative_prompt (
str
或List[str]
, optional) — 不用于引导图像生成的提示或提示。如果未定义,请代替传递negative_prompt_embeds
。如果不使用引导(即,如果guidance_scale
小于1
),则忽略。 - negative_prompt_2 (
str
或List[str]
, optional) — 不用于引导图像生成、将发送到tokenizer_2
和text_encoder_2
的提示或提示。如果未定义,则同时在两个文本编码器中使用negative_prompt
。 - negative_prompt_embeds(《torch.Tensor》,可选)—— 预生成的负面文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,则将从“negative_prompt”输入参数生成negative_prompt_embeds。
- negative_pooled_prompt_embeds(《torch.Tensor》,可选)—— 预生成的负面聚合文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,则将从“negative_prompt”输入参数生成pooled negative_prompt_embeds。ip_adapter_image——《PipelineImageInput》,可选):与IP适配器一起工作的可选图像输入。
- output_type(《str》,可选,默认为“pil”》)—— 生成的图像的输出格式。在PIL(《PIL.Image.Image》)或《np.array》之间选择。
- return_dict (布尔类型, 可选, 默认为True) — 是否返回一个 plain tuple 而不是一个
~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput
对象。 - callback (调用函数, 可选) — 在推理过程中的每
callback_steps
步骤将被调用的函数。该函数将接收以下参数:callback(step: int, timestep: int, latents: torch.Tensor)
。 - callback_steps (整数, 可选, 默认为1) —
callback
函数将被调用的时间间隔。如果未指定,则每一步都会调用回调函数。 - cross_attention_kwargs (
dict
, 可选) — 如果指定,则此kwargs字典将被传递给AttentionProcessor
,在diffusers.models.attention_processor
的self.processor
下定义。 - guidance_rescale (
float
, 可选, 默认为 0.7) — 由《Common Diffusion Noise Schedules and Sample Steps are Flawed》论文中提出的引导缩放因子。《Common Diffusion Noise Schedules and Sample Steps are Flawed》中的guidance_scale
定义为方程16中的φ
。引导缩放因子应解决使用零终端SNR时的过度曝光问题。 - crops_coords_top_left (
Tuple[int]
, 可选, 默认为 (0, 0)) — 可以使用crops_coords_top_left
生成从位置crops_coords_top_left
向下“裁剪”的图像。通常通过将crops_coords_top_left
设置为(0, 0)来获得位置良好的居中图像。这是SDXL微条件的一部分,如在https://huggingface.co/papers/2307.01952的第2.2节中解释。 - target_size (
Tuple[int]
, 可选,默认为 (1024, 1024)) — 对于大多数情况,应当在target_size
中设置期望生成的图像的宽度和高度。如果未指定,将默认为(width, height)
。这是 SDXL 的微条件的一部分,详见第 2.2 节中的解释,链接:https://huggingface.co/papers/2307.01952。 - editing_prompt (
str
或List[str]
, 可选) — 用于引导图像生成的提示或提示列表。通过将editing_prompt
设置为 None,重建图像。应通过reverse_editing_direction
指定提示的引导方向。 - editing_prompt_embeddings (
torch.Tensor
, 可选) — 预生成的编辑文本嵌入。可用于轻松调整文本输入,例如提示加权。如果未提供,则从editing_prompt
输入参数生成 editing_prompt_embeddings。 - editing_pooled_prompt_embeddings (
torch.Tensor
, 可选) — 预生成的编辑池化文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,将根据editing_prompt
输入参数生成editing_prompt_embeddings
。 - reverse_editing_direction (
bool
或List[bool]
, 可选, 默认为False
) — 是否应增加或减少editing_prompt
中相应的提示。 - edit_guidance_scale (
float
或List[float]
, 可选, 默认为 5) — 指导图像生成的指导缩放比例。如果提供列表值,应与editing_prompt
对应。edit_guidance_scale
是 LEDITS++ 论文 第 12 个公式的s_e
。 - edit_warmup_steps (
float
或List[float]
,可选,默认为 10)— 对于每个提示的扩散步数,指导不应用的数量。 - edit_cooldown_steps (
float
或List[float]
,可选,默认为None
)— 对于每个提示的扩散步数,之后指导不再应用的数量。 - edit_threshold (
float
或List[float]
,可选,默认为 0.9)— 指导的遮罩阈值。阈值应与修改的图像区域成比例。‘edit_threshold’ 是根据 LEDITS++ 论文 中的方程 12 定义的。 - sem_guidance (
List[torch.Tensor]
,可选)— 生成时应用的前生成指导向量列表。列表长度必须与num_inference_steps
对应。use_cross_attn_mask — 是否使用交叉注意力掩码。当 use_intersect_mask 设置为真时,始终使用交叉注意力掩码。交叉注意力掩码定义为 LEDITS++ 论文 第 12 式的 'M^1'。use_intersect_mask — 是否将掩码术语计算为交叉注意力掩码和从噪声估计中导出的掩码的交集。交叉注意力掩码定义为 'M^1',从噪声估计中导出的掩码定义为 'M^2',详见 LEDITS++ 论文 第 12 式。user_mask — 用户提供的掩码,可以更好地控制编辑过程。当 LEDITS++ 的隐式掩码不符合用户偏好时,这非常有用。attn_store_steps — 在 AttentionStore 中存储注意力图的步骤。仅用于可视化。store_averaged_over_steps — 是否将 'attn_store_steps' 的注意力图存储为在扩散步骤中平均的值。如果为 False,则单独存储每个步骤的注意力图。仅用于可视化。 - 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 (
列表
, 可选) ——callback_on_step_end
函数的输入张量列表。列表中的张量将作为callback_kwargs
参数传递。您只能包含您的pipeline类的._callback_tensor_inputs
属性中列出的变量。
返回值
当return_dict
为True时为LEditsPPDiffusionPipelineOutput,否则为`tuple`。当返回一个`tuple`时,第一个元素包含生成的图像列表。
调用pipeline进行编辑的功能。必须先调用<码 diffusers.LEditsPPPipelineStableDiffusionXL.invert>方法。编辑将始终针对最后反演的图像执行。
示例
>>> import torch
>>> import PIL
>>> import requests
>>> from io import BytesIO
>>> from diffusers import LEditsPPPipelineStableDiffusionXL
>>> pipe = LEditsPPPipelineStableDiffusionXL.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> def download_image(url):
... response = requests.get(url)
... return PIL.Image.open(BytesIO(response.content)).convert("RGB")
>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/tennis.jpg"
>>> image = download_image(img_url)
>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.2)
>>> edited_image = pipe(
... editing_prompt=["tennis ball", "tomato"],
... reverse_editing_direction=[True, False],
... edit_guidance_scale=[5.0, 10.0],
... edit_threshold=[0.9, 0.85],
... ).images[0]
反转
< 源代码 >( image: Union source_prompt: str = '' source_guidance_scale = 3.5 negative_prompt: str = None negative_prompt_2: str = None num_inversion_steps: int = 50 skip: float = 0.15 generator: Optional = None crops_coords_top_left: Tuple = (0, 0) num_zero_noise_steps: int = 3 cross_attention_kwargs: Optional = None ) → LEditsPPInversionPipelineOutput
参数
- image (
PipelineImageInput
) — 输入待编辑的图像(s)。多个输入图像必须默认具有相同的纵横比。 - source_prompt (
str
, 默认为""
) — 描述输入图像的提示,它将在反转过程中用作指导。如果source_prompt
为""
,则禁用指导。 - num_inversion_steps (
int
, 默认为50
) — 忽略初始的skip
步骤后,执行的总翻转步骤数。 - skip (
float
, 默认为0.15
) — 将会被忽略用于翻转和随后生成的初始步骤的一部分。较小的值会导致对输入图像的更大改变。skip
必须在0
和1
之间。 - generator (
torch.Generator
, 可选) — 一个用于使翻转确定性化的torch.Generator
。 - crops_coords_top_left (
Tuple[int]
, 可选, 默认为 (0, 0)) —crops_coords_top_left
可以用于生成一个看起来是从crops_coords_top_left
位置向下裁剪的图像。通常通过将crops_coords_top_left
设置为 (0, 0) 来获得中心对称的图像。这是 SDXL 的微条件的一部分,在第 2.2 节中解释,见 https://huggingface.co/papers/2307.01952。 - num_zero_noise_steps (
int
, 默认为3
) — 不会重新添加噪声的最终扩散步数。如果未设置步数为零,SD-XL 与 DPMSolverMultistepScheduler 一起将产生噪声伪影。 - cross_attention_kwargs (
dict
, 可选) — 一个 kwargs 字典,如果指定,则将其传递给AttentionProcessor
,如 diffusers.models.attention_processor 中定义的self.processor
。
输出将包含调整大小后的输入图像(组)及其相应的VAE重建。
对于图像反演功能的管道,如LEDITS++论文中所述。LEDITS++ 论文。如果调度器设置为DDIMScheduler,将执行edit-friendly DPDM中提出的反转。
encode_prompt
< 来源 >( device: 可选 = None num_images_per_prompt: int = 1 negative_prompt: 可选 = None negative_prompt_2: 可选 = None negative_prompt_embeds: 可选 = None negative_pooled_prompt_embeds: 可选 = None lora_scale: 可选 = None clip_skip: 可选 = None enable_edit_guidance: bool = True editing_prompt: 可选 = None editing_prompt_embeds: 可选 = None editing_pooled_prompt_embeds: 可选 = None )
参数
- num_images_per_prompt (
int
) — 每个提示生成的图像数量 - negative_prompt(《字符串》或(《字符串》列表),可选)— 不应引导图像生成的提示或提示列表。如果未定义,则必须传入
negative_prompt_embeds
。 - negative_prompt_2(《字符串》或(《字符串》列表),可选)— 不应引导图像生成的提示或提示列表,发送到
tokenizer_2
和text_encoder_2
。如果未定义,则在两个文本编码器中均使用negative_prompt
。 - negative_prompt_embeds(《pytorch.Tensor》类型,可选)— 预生成的负面文本嵌入。可用于轻松调整文本输入,例如调整提示的权重。如果未提供,则从
negative_prompt
输入参数生成 negative_prompt_embeds。 - negative_pooled_prompt_embeds (
torch.Tensor
,可选)——已预生成的负池塘文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从输入参数negative_prompt
生成负池塘negative_prompt_embeds
。 - lora_scale (
float
,可选)——如果加载了LoRA层,则应用于文本编码器的所有LoRA层的LoRA缩放系数。 - clip_skip (
int
,可选)——在计算提示嵌入时跳过CLIP中的层数。值为1表示使用预最终层输出计算提示嵌入。 - enable_edit_guidance (
bool
) — 是否引导至编辑提示。 - editing_prompt (
str
orList[str]
, 可选) — 待编码的编辑提示。如果没有定义并且‘enable_edit_guidance’为True,则需要传递editing_prompt_embeds
。 - editing_prompt_embeds (
torch.Tensor
, 可选) — 预生成的编辑文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供并且‘enable_edit_guidance’为True,则将从‘editing_prompt’输入参数生成Editing_prompt embody。 - editing_pooled_prompt_embeds (
torch.Tensor
, 可选) — 预生成的编辑池化文本嵌入。可以用来轻松调整文本输入,例如提示权重。如果没有提供,将根据editing_prompt
输入参数生成池化的编辑池化提示嵌入。
将提示编码为文本编码器隐藏状态。
get_guidance_scale_embedding
< 来源 >( w: Tensor embedding_dim: int = 512 dtype: dtype = torch.float32 ) → torch.Tensor
LEditsPPDiffusionPipelineOutput
class diffusers.pipelines.LEditsPPDiffusionPipelineOutput
< 源码 >( images: 联合 nsfw_content_detected: 可选 )
LEdits++ 弥散管道的输出类。
LEditsPPInversionPipelineOutput
类 diffusers.pipelines.LEditsPPInversionPipelineOutput
< source >( images: Union vae_reconstruction_images: Union )
LEdits++ 弥散管道的输出类。