语义引导
扩散模型的语义引导在 SEGA:使用语义引导指导文本到图像模型 中提出,并提供了对图像生成的强大语义控制。文本提示的微小变化通常会导致完全不同的输出图像。然而,使用 SEGA 可以轻松直观地控制各种图像变化,同时保持原始图像构图的真实性。
论文的摘要如下:
文本到图像扩散模型最近因其惊人的能力而受到广泛关注,它仅从文本生成高保真图像。然而,实现与用户意图一致的一次性生成几乎是不可能的,但输入提示的微小变化往往会导致非常不同的图像。这使得用户几乎无法进行语义控制。为了让用户掌控全局,我们展示了如何与扩散过程交互,以便灵活地沿着语义方向引导它。这种语义引导 (SEGA) 可以推广到任何使用无分类器引导的生成架构。更重要的是,它允许进行细微和广泛的编辑、构图和风格的变化,以及优化整体艺术构思。我们使用各种任务在潜在和基于像素的扩散模型(如 Stable Diffusion、Paella 和 DeepFloyd-IF)上展示了 SEGA 的有效性,从而为其多功能性、灵活性以及对现有方法的改进提供了强有力的证据。
SemanticStableDiffusionPipeline
class diffusers.SemanticStableDiffusionPipeline
< 源代码 >( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer unet: UNet2DConditionModel scheduler: KarrasDiffusionSchedulers safety_checker: StableDiffusionSafetyChecker feature_extractor: CLIPImageProcessor requires_safety_checker: bool = True )
参数
- vae (AutoencoderKL) — 用于将图像编码和解码到潜在表示的变分自动编码器 (VAE) 模型。
- text_encoder (CLIPTextModel) — 冻结的文本编码器 (clip-vit-large-patch14)。
- tokenizer (CLIPTokenizer) — 用于标记文本的
CLIPTokenizer
。 - unet (UNet2DConditionModel) — 用于对编码图像潜在表示进行去噪的
UNet2DConditionModel
。 - scheduler (SchedulerMixin) — 用于与
unet
结合对编码图像潜在表示进行去噪的调度器。可以是 DDIMScheduler、LMSDiscreteScheduler 或 PNDMScheduler 之一。 - 安全检查器 (
Q16SafetyChecker
) — 用于评估生成图像是否可能被视为攻击性或有害的分类模块。有关模型潜在危害的更多详细信息,请参阅模型卡片。 - 特征提取器 (CLIPImageProcessor) — 用于从生成图像中提取特征的
CLIPImageProcessor
;用作safety_checker
的输入。
使用带有潜在编辑功能的 Stable Diffusion 进行文本到图像生成的管道。
此模型继承自DiffusionPipeline,并基于StableDiffusionPipeline构建。请查看超类文档,了解为所有管道实现的通用方法(下载、保存、在特定设备上运行等)。
__call__
< 源代码 >( prompt: Union height: Optional = None width: Optional = None num_inference_steps: int = 50 guidance_scale: float = 7.5 negative_prompt: Union = None num_images_per_prompt: int = 1 eta: float = 0.0 generator: Union = None latents: Optional = None output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 editing_prompt: Union = None editing_prompt_embeddings: Optional = None reverse_editing_direction: Union = False edit_guidance_scale: Union = 5 edit_warmup_steps: Union = 10 edit_cooldown_steps: Union = None edit_threshold: Union = 0.9 edit_momentum_scale: Optional = 0.1 edit_mom_beta: Optional = 0.4 edit_weights: Optional = None sem_guidance: Optional = None ) → ~pipelines.semantic_stable_diffusion.SemanticStableDiffusionPipelineOutput
或 tuple
参数
- 提示 (
str
或List[str]
) — 指导图像生成的提示或提示列表。 - 高度 (
int
, 可选,默认为self.unet.config.sample_size * self.vae_scale_factor
) — 生成图像的高度(以像素为单位)。 - 宽度 (
int
, 可选,默认为self.unet.config.sample_size * self.vae_scale_factor
) — 生成图像的宽度(以像素为单位)。 - 推理步数 (
int
, 可选,默认为 50) — 降噪步骤的数量。更多的降噪步骤通常会导致更高的图像质量,但代价是推理速度较慢。 - guidance_scale (
float
, 可选, 默认为 7.5) — 较高的引导尺度值鼓励模型生成与文本prompt
密切相关的图像,但会以降低图像质量为代价。当guidance_scale > 1
时启用引导尺度。 - negative_prompt (
str
或List[str]
, 可选) — 用于引导图像生成中不包含内容的提示或提示列表。如果未定义,则需要传递negative_prompt_embeds
。在不使用引导(guidance_scale < 1
)时忽略。 - num_images_per_prompt (
int
, 可选, 默认为 1) — 每个提示生成图像的数量。 - eta (
float
, 可选, 默认为 0.0) — 对应于DDIM论文中的参数 eta (η)。仅适用于DDIMScheduler,在其他调度器中被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 用于使生成确定性的torch.Generator
。 - latents (
torch.Tensor
, 可选) — 从高斯分布中采样的预生成噪声潜在变量,用作图像生成的输入。可用于使用不同的提示调整相同的生成。如果未提供,则通过使用提供的随机generator
进行采样来生成潜在变量张量。 - output_type (
str
, 可选, 默认为"pil"
) — 生成的图像的输出格式。在PIL.Image
或np.array
之间选择。 - return_dict (
bool
, 可选, 默认为True
) — 是否返回StableDiffusionPipelineOutput而不是普通元组。 - callback (
Callable
, 可选) — 在推理过程中每隔callback_steps
步调用一次的函数。该函数使用以下参数调用:callback(step: int, timestep: int, latents: torch.Tensor)
。 - callback_steps (
int
, 可选, 默认为 1) — 调用callback
函数的频率。如果未指定,则在每个步骤都调用回调。 - reverse_editing_direction (
bool
或List[bool]
, 可选,默认为False
) —editing_prompt
中相应的提示是否应该增加或减少。 - edit_guidance_scale (
float
或List[float]
, 可选,默认为 5) — 语义引导的引导尺度。如果作为列表提供,则值应对应于editing_prompt
。 - edit_warmup_steps (
float
或List[float]
, 可选,默认为 10) — 未应用语义引导的扩散步数(对于每个提示)。在此步骤中计算动量,并在所有预热阶段结束后应用。 - edit_cooldown_steps (
float
或List[float]
, 可选,默认为None
) — 语义引导不再应用的扩散步数(对于每个提示)。 - edit_threshold (
float
或List[float]
, 可选,默认为 0.9) — 语义引导的阈值。 - edit_momentum_scale (
float
, 可选,默认为 0.1) — 要添加到每个扩散步骤的语义引导中的动量的尺度。如果设置为 0.0,则禁用动量。动量在预热期间(对于小于sld_warmup_steps
的扩散步骤)已经累积。动量仅在所有预热阶段完成后添加到潜在引导中。 - edit_mom_beta (
float
, 可选,默认为 0.4) — 定义语义引导动量如何累积。edit_mom_beta
指示保留多少先前动量。动量在预热期间(对于小于edit_warmup_steps
的扩散步骤)已经累积。 - edit_weights (
List[float]
, 可选,默认为None
) — 指示每个单独的概念应该对整体引导产生多大的影响。如果没有提供权重,则所有概念都将平等应用。 - sem_guidance (
List[torch.Tensor]
, 可选) — 要在生成时应用的预生成的引导向量列表。列表的长度必须对应于num_inference_steps
。
返回
~pipelines.semantic_stable_diffusion.SemanticStableDiffusionPipelineOutput
或 tuple
如果 return_dict
为 True
,则返回 ~pipelines.semantic_stable_diffusion.SemanticStableDiffusionPipelineOutput
,否则返回一个 tuple
,其中第一个元素是包含生成图像的列表,第二个元素是 bool
值的列表,指示相应的生成图像是否包含“不适合工作场所”(nsfw)内容。
用于生成管道调用函数。
示例
>>> import torch
>>> from diffusers import SemanticStableDiffusionPipeline
>>> pipe = SemanticStableDiffusionPipeline.from_pretrained(
... "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> out = pipe(
... prompt="a photo of the face of a woman",
... num_images_per_prompt=1,
... guidance_scale=7,
... editing_prompt=[
... "smiling, smile", # Concepts to apply
... "glasses, wearing glasses",
... "curls, wavy hair, curly hair",
... "beard, full beard, mustache",
... ],
... reverse_editing_direction=[
... False,
... False,
... False,
... False,
... ], # Direction of guidance i.e. increase all concepts
... edit_warmup_steps=[10, 10, 10, 10], # Warmup period for each concept
... edit_guidance_scale=[4, 5, 5, 5.4], # Guidance scale for each concept
... edit_threshold=[
... 0.99,
... 0.975,
... 0.925,
... 0.96,
... ], # Threshold for each concept. Threshold equals the percentile of the latent space that will be discarded. I.e. threshold=0.99 uses 1% of the latent dimensions
... edit_momentum_scale=0.3, # Momentum scale that will be added to the latent guidance
... edit_mom_beta=0.6, # Momentum beta
... edit_weights=[1, 1, 1, 1, 1], # Weights of the individual concepts against each other
... )
>>> image = out.images[0]
SemanticStableDiffusionPipelineOutput
类 diffusers.pipelines.semantic_stable_diffusion.pipeline_output.SemanticStableDiffusionPipelineOutput
< 源代码 >( images: Union nsfw_content_detected: Optional )
Stable Diffusion 管道的输出类。