T2I 适配器
T2I 适配器:学习适配器以挖掘文本到图像扩散模型的更多可控能力 作者:Chong Mou、Xintao Wang、Liangbin Xie、Jian Zhang、Zhongang Qi、Ying Shan、Xiaohu Qie。
使用预训练模型,我们可以提供控制图像(例如,深度图)来控制稳定扩散文本到图像生成,使其遵循深度图像的结构并填充细节。
论文摘要如下:
大型文本到图像 (T2I) 模型的出色生成能力证明了其学习复杂结构和有意义语义的强大力量。然而,仅仅依靠文本提示无法充分利用模型学习到的知识,尤其是在需要灵活和准确控制(例如,颜色和结构)时。在本文中,我们旨在“挖掘” T2I 模型隐式学习的能力,然后明确地使用它们以更精细地控制生成。具体来说,我们建议学习简单且轻量级的 T2I 适配器,以将 T2I 模型中的内部知识与外部控制信号对齐,同时冻结原始大型 T2I 模型。通过这种方式,我们可以根据不同的条件训练各种适配器,从而在生成结果的颜色和结构中实现丰富的控制和编辑效果。此外,所提出的 T2I 适配器具有可组合性和泛化能力等具有实际价值的吸引人特性。大量实验表明,我们的 T2I 适配器具有良好的生成质量和广泛的应用范围。
该模型由社区贡献者 HimariO ❤️ 贡献。
StableDiffusionAdapterPipeline
class diffusers.StableDiffusionAdapterPipeline
< 源代码 >( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer unet: UNet2DConditionModel adapter: Union scheduler: KarrasDiffusionSchedulers safety_checker: StableDiffusionSafetyChecker feature_extractor: CLIPImageProcessor requires_safety_checker: bool = True )
参数
- adapter (
T2IAdapter
或MultiAdapter
或List[T2IAdapter]
) — 在去噪过程中为 unet 提供额外的条件。如果将多个 Adapter 设置为列表,则来自每个 Adapter 的输出将加在一起以创建一个组合的额外条件。 - adapter_weights (
List[float]
, 可选, 默认值为 None) — 代表权重的浮点数列表,该权重将在将每个适配器的输出加在一起之前乘以每个适配器的输出。 - vae (AutoencoderKL) — 将图像编码和解码到潜在表示的变分自动编码器 (VAE) 模型。
- text_encoder (
CLIPTextModel
) — 冻结的文本编码器。Stable Diffusion 使用 CLIP 的文本部分,特别是 clip-vit-large-patch14 变体。 - tokenizer (
CLIPTokenizer
) — 类 CLIPTokenizer 的标记器。 - unet (UNet2DConditionModel) — 用于对编码的图像潜在变量进行去噪的条件 U-Net 架构。
- scheduler (SchedulerMixin) — 与
unet
一起使用的调度器,用于对编码的图像潜在变量进行去噪。可以是 DDIMScheduler、LMSDiscreteScheduler 或 PNDMScheduler 之一。 - safety_checker (
StableDiffusionSafetyChecker
) — 分类模块,估计生成的图像是否可以被认为是冒犯或有害的。请参阅 模型卡 了解详细信息。 - feature_extractor (
CLIPImageProcessor
) — 从生成的图像中提取特征的模型,用作safety_checker
的输入。
使用增强了 T2I-Adapter 的 Stable Diffusion 进行文本到图像生成的管道 https://arxiv.org/abs/2302.08453
此模型继承自 DiffusionPipeline。有关库为所有管道实现的通用方法(如下载或保存、在特定设备上运行等)的文档,请查看超类文档。
__call__
< 源代码 >( prompt: Union = None image: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 50 timesteps: List = None sigmas: List = None guidance_scale: float = 7.5 negative_prompt: Union = None num_images_per_prompt: Optional = 1 eta: float = 0.0 generator: Union = None latents: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None adapter_conditioning_scale: Union = 1.0 clip_skip: Optional = None ) → ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput
or tuple
参数
- prompt (
str
或List[str]
, 可选) — 指导图像生成的提示或提示。如果未定义,则必须传递prompt_embeds
。 取而代之。 - image (
torch.Tensor
,PIL.Image.Image
,List[torch.Tensor]
或List[PIL.Image.Image]
或List[List[PIL.Image.Image]]
) — 适配器输入条件。适配器使用此输入条件为 Unet 生成指导。如果类型指定为torch.Tensor
,则按原样传递给适配器。PIL.Image.Image
也可以作为图像接受。控制图像将自动调整大小以适合输出图像。 - 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) — 降噪步骤的数量。更多的降噪步骤通常会导致更高质量的图像,但会降低推理速度。 - timesteps (
List[int]
, 可选) — 用于降噪过程的自定义时间步长,适用于在他们的set_timesteps
方法中支持timesteps
参数的调度程序。如果未定义,将使用传递num_inference_steps
时的默认行为。必须按降序排列。 - sigmas (
List[float]
, 可选) — 用于降噪过程的自定义西格玛,适用于在他们的set_timesteps
方法中支持sigmas
参数的调度程序。如果未定义,将使用传递num_inference_steps
时的默认行为。 - guidance_scale (
float
, 可选, 默认值为 7.5) — 指导尺度,如 Classifier-Free Diffusion Guidance 中所定义。guidance_scale
定义为 Imagen 论文 中公式 2 的w
。通过设置guidance_scale > 1
来启用指导尺度。较高的指导尺度鼓励生成与文本prompt
密切相关的图像,通常以降低图像质量为代价。 - negative_prompt (
str
或List[str]
, 可选) — 不引导图像生成的提示或提示。如果未定义,则必须传递negative_prompt_embeds
。 相反。如果未定义,则必须传递negative_prompt_embeds
。 相反。当不使用指导时会被忽略(即,如果guidance_scale
小于1
,则会被忽略)。 - num_images_per_prompt (
int
, 可选, 默认值为 1) — 每个提示要生成的图像数量。 - eta (
float
, 可选, 默认值为 0.0) — 对应于 DDIM 论文中的参数 eta (η):https://arxiv.org/abs/2010.02502。仅适用于 schedulers.DDIMScheduler,其他情况将被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个或多个 torch 生成器,用于使生成确定性。 - latents (
torch.Tensor
, 可选) — 预生成的噪声潜码,从高斯分布采样,用作图像生成的输入。可用于使用不同的提示调整相同的生成。如果没有提供,则会通过使用提供的随机generator
采样来生成潜码张量。 - prompt_embeds (
torch.Tensor
, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,文本嵌入将从prompt
输入参数生成。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 预生成的负文本嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,negative_prompt_embeds
将从negative_prompt
输入参数生成。 - output_type (
str
, 可选, 默认值为"pil"
) — 生成的图像的输出格式。在 PIL 之间进行选择:PIL.Image.Image
或np.array
。 - return_dict (
bool
, 可选, 默认值为True
) — 是否返回~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput
而不是普通元组。 - cross_attention_kwargs (
dict
, 可选) — 如果指定,则作为关键字参数传递给 diffusers.models.attention_processor 中self.processor
定义的AttnProcessor
。 - adapter_conditioning_scale (
float
或List[float]
, 可选, 默认值为 1.0) — 适配器的输出在添加到原始 unet 中的残差之前,会乘以adapter_conditioning_scale
。如果在初始化时指定了多个适配器,则可以将相应的比例设置为列表。 - clip_skip (
int
, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。值为 1 表示将使用倒数第二层的输出计算提示嵌入。
返回值
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput
或 tuple
如果 return_dict
为 True,则返回 ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput
,否则返回 tuple。当返回元组时,第一个元素是包含生成的图像的列表,第二个元素是包含
bool的列表,表示根据
safety_checker`,相应的生成图像是否可能代表“不适合工作”(nsfw)内容。
调用管道进行生成时调用的函数。
示例
>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter
>>> image = load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )
>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)
>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
... "CompVis/stable-diffusion-v1-4",
... adapter=adapter,
... torch_dtype=torch.float16,
... )
>>> pipe.to("cuda")
>>> out_image = pipe(
... "At night, glowing cubes in front of the beach",
... image=color_palette,
... ).images[0]
enable_attention_slicing
< 源代码 > ( slice_size: Union = 'auto' )
启用切片注意力计算。启用此选项后,注意力模块会将输入张量切分成多个切片,以便分多个步骤计算注意力。对于多个注意力头,计算将按顺序对每个头执行。这有助于在牺牲少量速度的情况下节省一些内存。
⚠️ 如果您已经使用来自 PyTorch 2.0 或 xFormers 的 scaled_dot_product_attention
(SDPA),请勿启用注意力切片。这些注意力计算已经非常节省内存,因此您不需要启用此功能。如果您在 SDPA 或 xFormers 中启用注意力切片,可能会导致严重的减速!
示例
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "runwayml/stable-diffusion-v1-5",
... torch_dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
禁用切片注意力计算。如果之前调用了 enable_attention_slicing
,则注意力将在一步骤中计算。
启用切片 VAE 解码。启用此选项后,VAE 将将输入张量切分成多个切片,以便分多个步骤计算解码。这有助于节省一些内存并允许更大的批次大小。
禁用切片 VAE 解码。如果之前启用了 enable_vae_slicing
,此方法将返回一步计算解码。
enable_xformers_memory_efficient_attention
< source > ( attention_op: Optional = None )
参数
- attention_op (
Callable
, 可选) — 覆盖默认的None
运算符,用于作为memory_efficient_attention()
函数的op
参数。xFormers.
启用来自 xFormers 的内存高效注意力。当启用此选项时,您应该观察到推理过程中的 GPU 内存使用量降低以及潜在的加速。训练期间的加速无法保证。
⚠️ 当内存高效注意力和分片注意力都启用时,内存高效注意力优先。
示例
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
禁用来自 xFormers 的内存高效注意力。
encode_prompt
< source > ( prompt device num_images_per_prompt do_classifier_free_guidance negative_prompt = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None lora_scale: Optional = None clip_skip: Optional = None )
参数
- prompt (
str
或List[str]
, 可选) — 要编码的提示 device — (torch.device
): torch 设备 - num_images_per_prompt (
int
) — 每个提示应该生成的图像数量 - do_classifier_free_guidance (
bool
) — 是否使用分类器免费引导 - negative_prompt (
str
或List[str]
, 可选) — 不引导图像生成的提示或提示。如果未定义,则必须传递negative_prompt_embeds
。在不使用引导时忽略(即,如果guidance_scale
小于1
,则忽略)。 - prompt_embeds (
torch.Tensor
, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,文本嵌入将从prompt
输入参数生成。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 预生成的负文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,将从negative_prompt
输入参数生成negative_prompt_embeds
。 - lora_scale (
float
, 可选) — 如果加载了 LoRA 层,则将应用于文本编码器所有 LoRA 层的 LoRA 比例。 - clip_skip (
int
, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。值为 1 表示将使用倒数第二层的输出计算提示嵌入。
将提示编码为文本编码器隐藏状态。
get_guidance_scale_embedding
< 来源 > ( w: Tensor embedding_dim: int = 512 dtype: dtype = torch.float32 ) → torch.Tensor
StableDiffusionXLAdapterPipeline
类 diffusers.StableDiffusionXLAdapterPipeline
< 来源 >( vae: AutoencoderKL text_encoder: CLIPTextModel text_encoder_2: CLIPTextModelWithProjection tokenizer: CLIPTokenizer tokenizer_2: CLIPTokenizer unet: UNet2DConditionModel adapter: Union scheduler: KarrasDiffusionSchedulers force_zeros_for_empty_prompt: bool = True feature_extractor: CLIPImageProcessor = None image_encoder: CLIPVisionModelWithProjection = None )
参数
- adapter (
T2IAdapter
或MultiAdapter
或List[T2IAdapter]
) — 在降噪过程中为 unet 提供额外的条件。 如果您将多个 Adapter 设置为列表,则来自每个 Adapter 的输出将加在一起以创建一个组合的额外条件。 - adapter_weights (
List[float]
, 可选, 默认值 None) — 表示权重的浮点数列表,该权重将在将每个适配器输出加在一起之前乘以每个适配器的输出。 - vae (AutoencoderKL) — 变分自动编码器 (VAE) 模型,用于将图像编码和解码为潜伏表示。
- text_encoder (
CLIPTextModel
) — 冻结的文本编码器。 Stable Diffusion 使用 CLIP 的文本部分,特别是 clip-vit-large-patch14 变体。 - tokenizer (
CLIPTokenizer
) — 类 CLIPTokenizer 的分词器。 - unet (UNet2DConditionModel) — 条件 U-Net 架构,用于对编码的图像潜伏表示进行降噪。
- scheduler (SchedulerMixin) — 与
unet
结合使用以对编码的图像潜伏表示进行降噪的调度器。 可以是 DDIMScheduler、LMSDiscreteScheduler 或 PNDMScheduler 之一。 - safety_checker (
StableDiffusionSafetyChecker
) — 用于估计生成的图像是否可能被视为冒犯性或有害的分类模块。 请参阅 模型卡 获取详细信息。 - feature_extractor (
CLIPImageProcessor
) — 从生成的图像中提取特征的模型,用作safety_checker
的输入。
使用增强了 T2I-Adapter 的 Stable Diffusion 进行文本到图像生成的管道 https://arxiv.org/abs/2302.08453
此模型继承自 DiffusionPipeline。有关库为所有管道实现的通用方法(如下载或保存、在特定设备上运行等)的文档,请查看超类文档。
该管道还继承了以下加载方法
- load_textual_inversion() 用于加载文本反转嵌入
- from_single_file() 用于加载
.ckpt
文件 - load_lora_weights() 用于加载 LoRA 权重
- save_lora_weights() 用于保存 LoRA 权重
-
< source > __call__( prompt: Union = None prompt_2: Union = None image: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 50 timesteps: List = None sigmas: List = None denoising_end: Optional = None guidance_scale: float = 5.0 negative_prompt: Union = None negative_prompt_2: Union = None num_images_per_prompt: Optional = 1 eta: float = 0.0 generator: Union = None latents: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None pooled_prompt_embeds: Optional = None negative_pooled_prompt_embeds: Optional = None ip_adapter_image: Union = None ip_adapter_image_embeds: Optional = None output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None guidance_rescale: float = 0.0 original_size: Optional = None crops_coords_top_left: Tuple = (0, 0) target_size: Optional = None negative_original_size: Optional = None negative_crops_coords_top_left: Tuple = (0, 0) negative_target_size: Optional = None adapter_conditioning_scale: Union = 1.0 adapter_conditioning_factor: float = 1.0 clip_skip: Optional = None ) →
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput
或tuple
参数
- prompt (
str
或List[str]
, 可选) — 指导图像生成的提示或提示。 如果未定义,则必须传递prompt_embeds
。 代替。 - prompt_2 (
str
或List[str]
, 可选) — 要发送到tokenizer_2
和text_encoder_2
的提示或提示。 如果未定义,则prompt
在两个文本编码器中使用 - image (
torch.Tensor
,PIL.Image.Image
,List[torch.Tensor]
或List[PIL.Image.Image]
或List[List[PIL.Image.Image]]
) — 适配器输入条件。 适配器使用此输入条件来生成对 Unet 的指导。 如果类型指定为torch.Tensor
,则按原样传递给适配器。 也可以接受PIL.Image.Image
作为图像。 控制图像会自动调整大小以适合输出图像。 - height (
int
, 可选,默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的高度(以像素为单位)。 低于 512 像素的任何内容都不适用于 stabilityai/stable-diffusion-xl-base-1.0 和未针对低分辨率专门微调的检查点。 - width (
int
, 可选, 默认为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的像素宽度。对于 stabilityai/stable-diffusion-xl-base-1.0 和没有专门针对低分辨率微调的检查点,低于 512 像素的宽度效果不佳。 - num_inference_steps (
int
, 可选, 默认为 50) — 降噪步骤的数量。更多的降噪步骤通常会以更慢的推理为代价,产生更高质量的图像。 - timesteps (
List[int]
, 可选) — 用于降噪过程的自定义时间步长,用于支持其set_timesteps
方法中timesteps
参数的调度器。如果未定义,则将使用传递num_inference_steps
时的默认行为。必须按降序排列。 - sigmas (
List[float]
, 可选) — 用于降噪过程的自定义西格玛值,用于支持其set_timesteps
方法中sigmas
参数的调度器。如果未定义,则将使用传递num_inference_steps
时的默认行为。 - denoising_end (
float
, 可选) — 当指定时,确定在有意提前终止之前要完成的整个降噪过程的比例(介于 0.0 和 1.0 之间)。因此,返回的样本将仍然保留大量由调度器选择的分离时间步长决定的噪声。denoising_end
参数最好在该管道构成“去噪器混合”多管道设置的一部分时使用,如 细化图像输出 中所述。 - guidance_scale (
float
, 可选, 默认为 5.0) — 无分类器扩散引导 中定义的引导比例。guidance_scale
定义为 Imagen 论文 中公式 2 的w
。通过将guidance_scale > 1
来启用引导比例。更高的引导比例鼓励生成与文本prompt
密切相关的图像,通常以降低图像质量为代价。 - negative_prompt (
str
或List[str]
, 可选) — 不引导图像生成的提示或提示。如果未定义,则必须传递negative_prompt_embeds
。在不使用引导时(即,如果guidance_scale
小于1
)将被忽略。 - negative_prompt_2 (
str
或List[str]
, 可选) — 要发送到tokenizer_2
和text_encoder_2
的不引导图像生成的提示或提示。如果未定义,则negative_prompt
在两个文本编码器中使用 - num_images_per_prompt (
int
, 可选, 默认为 1) — 每个提示生成的图像数量。 - eta (
float
, 可选, 默认值 0.0) — 对应于 DDIM 论文中的参数 eta (η):https://arxiv.org/abs/2010.02502。仅适用于 schedulers.DDIMScheduler,其他调度器将忽略此参数。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个或多个 torch 生成器,用于使生成确定性。 - latents (
torch.Tensor
, 可选) — 预生成的噪声潜变量,从高斯分布采样得到,用作图像生成的输入。可用于使用不同的提示调整相同的生成结果。如果没有提供,将使用提供的随机generator
采样生成一个潜变量张量。 - prompt_embeds (
torch.Tensor
, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从prompt
输入参数生成文本嵌入。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 预生成的负面文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从negative_prompt
输入参数生成negative_prompt_embeds
。 - pooled_prompt_embeds (
torch.Tensor
, 可选) — 预生成的池化文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从prompt
输入参数生成池化文本嵌入。 - negative_pooled_prompt_embeds (
torch.Tensor
, 可选) — 预生成的负面池化文本嵌入。可用于轻松调整文本输入,例如提示权重。如果没有提供,将从negative_prompt
输入参数生成池化negative_prompt_embeds
。ip_adapter_image — (PipelineImageInput
, 可选): 可选的图像输入,用于与 IP 适配器配合使用。 - ip_adapter_image_embeds (
List[torch.Tensor]
, 可选) — 用于 IP 适配器的预生成的图像嵌入。它应该是一个与 IP 适配器数量相同的列表。每个元素应该是形状为(batch_size, num_images, emb_dim)
的张量。如果do_classifier_free_guidance
设置为True
,它应该包含负面图像嵌入。如果没有提供,将从ip_adapter_image
输入参数计算嵌入。 - output_type (
str
, 可选, 默认值"pil"
) — 生成图像的输出格式。在 PIL 之间选择:PIL.Image.Image
或np.array
。 - return_dict (
bool
, 可选, 默认值True
) — 是否返回一个~pipelines.stable_diffusion_xl.StableDiffusionAdapterPipelineOutput
而不是一个简单的元组。 - cross_attention_kwargs (
dict
, 可选) — 如果指定,则传递给 diffusers.models.attention_processor 中self.processor
下定义的AttentionProcessor
的 kwargs 字典。 - guidance_rescale (
float
, 可选, 默认值为 0.0) — Common Diffusion Noise Schedules and Sample Steps are Flawed 提出的引导重缩放因子,guidance_scale
定义为 Common Diffusion Noise Schedules and Sample Steps are Flawed 中方程 16 的φ
。引导重缩放因子应该在使用零终端 SNR 时修复过度曝光。 - original_size (
Tuple[int]
, 可选, 默认值为 (1024, 1024)) — 如果original_size
与target_size
不相同,则图像将看起来向下或向上采样。如果没有指定,original_size
默认值为(height, width)
。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。 - 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
应设置为所需生成的图像高度和宽度。如果没有指定,它将默认值为(height, width)
。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。 - negative_original_size (
Tuple[int]
, 可选, 默认值为 (1024, 1024)) — 基于特定图像分辨率对生成过程进行负面条件化。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。有关更多信息,请参阅此问题线程:https://github.com/huggingface/diffusers/issues/4208。 - negative_crops_coords_top_left (
Tuple[int]
, 可选, 默认值为 (0, 0)) — 基于特定裁剪坐标对生成过程进行负面条件化。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。有关更多信息,请参阅此问题线程:https://github.com/huggingface/diffusers/issues/4208。 - negative_target_size (
Tuple[int]
, 可选, 默认值为 (1024, 1024)) — 基于目标图像分辨率对生成过程进行负面条件化。在大多数情况下,它应该与target_size
相同。这是 SDXL 微调的一部分,如 https://huggingface.co/papers/2307.01952 的第 2.2 节所述。有关更多信息,请参阅此问题线程:https://github.com/huggingface/diffusers/issues/4208。 - adapter_conditioning_scale (
float
或List[float]
, 可选, 默认值 1.0) — 在将适配器输出添加到原始 U-Net 中的残差之前,它们将乘以adapter_conditioning_scale
。 如果在初始化中指定了多个适配器,则可以将相应的比例设置为列表。 - adapter_conditioning_factor (
float
, 可选, 默认值 1.0) — 适配器应用的时间步长的分数。 如果adapter_conditioning_factor
为0.0
,则完全不应用适配器。 如果adapter_conditioning_factor
为1.0
,则适配器将应用于所有时间步长。 如果adapter_conditioning_factor
为0.5
,则适配器将应用于一半的时间步长。 - clip_skip (
int
, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。 值为 1 表示将使用倒数第二层的输出计算提示嵌入。
返回值
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput
或tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput
如果return_dict
为 True,否则为tuple
。 返回元组时,第一个元素是包含生成图像的列表。调用管道进行生成时调用的函数。
示例
>>> import torch >>> from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler >>> from diffusers.utils import load_image >>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L") >>> model_id = "stabilityai/stable-diffusion-xl-base-1.0" >>> adapter = T2IAdapter.from_pretrained( ... "Adapter/t2iadapter", ... subfolder="sketch_sdxl_1.0", ... torch_dtype=torch.float16, ... adapter_type="full_adapter_xl", ... ) >>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler") >>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained( ... model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler ... ).to("cuda") >>> generator = torch.manual_seed(42) >>> sketch_image_out = pipe( ... prompt="a photo of a dog in real world, high quality", ... negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality", ... image=sketch_image, ... generator=generator, ... guidance_scale=7.5, ... ).images[0]
- prompt (
enable_attention_slicing
< 源代码 > ( slice_size: Union = 'auto' )
启用切片注意力计算。启用此选项后,注意力模块会将输入张量切分成多个切片,以便分多个步骤计算注意力。对于多个注意力头,计算将按顺序对每个头执行。这有助于在牺牲少量速度的情况下节省一些内存。
⚠️ 如果您已经使用来自 PyTorch 2.0 或 xFormers 的 scaled_dot_product_attention
(SDPA),请勿启用注意力切片。这些注意力计算已经非常节省内存,因此您不需要启用此功能。如果您在 SDPA 或 xFormers 中启用注意力切片,可能会导致严重的减速!
示例
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "runwayml/stable-diffusion-v1-5",
... torch_dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
禁用切片注意力计算。如果之前调用了 enable_attention_slicing
,则注意力将在一步骤中计算。
启用切片 VAE 解码。启用此选项后,VAE 将将输入张量切分成多个切片,以便分多个步骤计算解码。这有助于节省一些内存并允许更大的批次大小。
禁用切片 VAE 解码。如果之前启用了 enable_vae_slicing
,此方法将返回一步计算解码。
启用来自 xFormers 的内存高效注意力。当启用此选项时,您应该观察到推理过程中的 GPU 内存使用量降低以及潜在的加速。训练期间的加速无法保证。
⚠️ 当内存高效注意力和分片注意力都启用时,内存高效注意力优先。
示例
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
encode_prompt
< 源代码 > ( prompt: str prompt_2: Optional = None device: Optional = None num_images_per_prompt: int = 1 do_classifier_free_guidance: bool = True negative_prompt: Optional = None negative_prompt_2: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None pooled_prompt_embeds: Optional = None negative_pooled_prompt_embeds: Optional = None lora_scale: Optional = None clip_skip: Optional = None )
参数
- 提示 (
str
或List[str]
, 可选) — 要编码的提示 - prompt_2 (
str
或List[str]
, 可选) — 要发送到tokenizer_2
和text_encoder_2
的提示或提示。 如果未定义,则在两个文本编码器中都使用prompt
device — (torch.device
): torch 设备 - 每个提示的图像数量 (
int
) — 每个提示应生成的图像数量 - 是否使用无分类器引导 (
bool
) — 是否使用无分类器引导 - 负面提示 (
str
或List[str]
, 可选) — 不引导图像生成的提示或提示。 如果未定义,则必须改为传递negative_prompt_embeds
。 当不使用引导时忽略(即,如果guidance_scale
小于1
,则忽略)。 - negative_prompt_2 (
str
或List[str]
, 可选) — 要发送到tokenizer_2
和text_encoder_2
的不引导图像生成的提示或提示。 如果未定义,则在两个文本编码器中都使用negative_prompt
- prompt_embeds (
torch.Tensor
, 可选) — 预生成的文本嵌入。 可用于轻松调整文本输入,例如提示加权。 如果未提供,文本嵌入将从prompt
输入参数生成。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 预生成的负文本嵌入。 可用于轻松调整文本输入,例如 提示权重。 如果未提供,则将从negative_prompt
输入参数生成 negative_prompt_embeds。 - pooled_prompt_embeds (
torch.Tensor
, 可选) — 预生成的池化文本嵌入。 可用于轻松调整文本输入,例如 提示权重。 如果未提供,则将从prompt
输入参数生成池化文本嵌入。 - negative_pooled_prompt_embeds (
torch.Tensor
, 可选) — 预生成的负池化文本嵌入。 可用于轻松调整文本输入,例如 提示权重。 如果未提供,则将从negative_prompt
输入参数生成池化负文本嵌入。 - lora_scale (
float
, 可选) — 如果加载了 LoRA 层,则将应用于文本编码器所有 LoRA 层的 LoRA 比例。 - clip_skip (
int
, 可选) — 从 CLIP 计算提示嵌入时要跳过的层数。 值 1 表示将使用倒数第二层的输出来计算提示嵌入。
将提示编码为文本编码器隐藏状态。
get_guidance_scale_embedding
< 源代码 > ( w: Tensor embedding_dim: int = 512 dtype: dtype = torch.float32 ) → torch.Tensor