aMUSEd
aMUSEd 在 aMUSEd:开放的 MUSE 重现 中由 Suraj Patil、William Berman、Robin Rombach 和 Patrick von Platen 提出。
Amused 是一款基于 MUSE 架构的轻量级文本到图像模型。Amused 在需要轻量级和快速模型的应用中特别有用,例如一次快速生成大量图像。
aMUSEd 是一种基于 vqvae token 的 Transformer 模型,它能够比许多扩散模型使用更少的正向传递次数生成图像。与 MUSE 相比,它使用较小的文本编码器 CLIP-L/14,而不是 t5-xxl。由于其参数数量少且正向传递生成过程少,aMUSEd 可以快速生成许多图像。这种优势在较大的批次大小下尤其明显。
论文摘要如下:
我们提出了 aMUSEd,一个基于 MUSE 的开源、轻量级掩码图像模型 (MIM),用于文本到图像生成。aMUSEd 的参数量仅为 MUSE 的 10%,专注于快速图像生成。我们认为,与文本到图像生成的主流方法潜在扩散相比,MIM 尚未得到充分探索。与潜在扩散相比,MIM 需要更少的推理步骤,并且更易于解释。此外,MIM 可以仅使用单个图像进行微调以学习额外的风格。我们希望通过展示 MIM 在大规模文本到图像生成中的有效性并发布可复现的训练代码来鼓励进一步探索 MIM。我们还发布了两个模型的检查点,这些模型可以直接生成 256x256 和 512x512 分辨率的图像。
模型 | 参数 |
---|---|
amused-256 | 603M |
amused-512 | 608M |
AmusedPipeline
类 diffusers.AmusedPipeline
< 源代码 >( vqvae: VQModel tokenizer: CLIPTokenizer text_encoder: CLIPTextModelWithProjection transformer: UVit2DModel scheduler: AmusedScheduler )
__call__
< 源代码 >( prompt: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 12 guidance_scale: float = 10.0 negative_prompt: Union = None num_images_per_prompt: Optional = 1 generator: Optional = None latents: Optional = None prompt_embeds: Optional = None encoder_hidden_states: Optional = None negative_prompt_embeds: Optional = None negative_encoder_hidden_states: Optional = None output_type = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None micro_conditioning_aesthetic_score: int = 6 micro_conditioning_crop_coord: Tuple = (0, 0) temperature: Union = (2, 0) ) → ImagePipelineOutput 或 元组
参数
- prompt (
str
或List[str]
, 可选) — 指导图像生成的提示或提示列表。如果未定义,则需要传递prompt_embeds
。 - height (
int
, 可选, 默认为self.transformer.config.sample_size * self.vae_scale_factor
) — 生成的图像的高度(以像素为单位)。 - width (
int
, 可选, 默认为self.unet.config.sample_size * self.vae_scale_factor
) — 生成的图像的宽度(以像素为单位)。 - num_inference_steps (
int
, 可选, 默认为 16) — 降噪步骤的数量。更多的降噪步骤通常会导致更高的图像质量,但推理速度会变慢。 - guidance_scale (
float
, 可选, 默认为 10.0) — 更高的引导尺度值鼓励模型生成与文本prompt
紧密相关的图像,但会以降低图像质量为代价。当guidance_scale > 1
时启用引导尺度。 - negative_prompt (
str
或List[str]
, 可选) — 指导图像生成中不包含什么的提示或提示。如果未定义,则需要传递negative_prompt_embeds
。在不使用引导(guidance_scale < 1
)时忽略。 - num_images_per_prompt (
int
, 可选, 默认为 1) — 每个提示生成图像的数量。 - generator (
torch.Generator
, 可选) — 用于使生成确定性的torch.Generator
。 - latents (
torch.IntTensor
, 可选) — 在self.vqvae
中表示潜在向量的预生成令牌,用作图像生成的输入。如果未提供,则起始潜在变量将完全被屏蔽。 - prompt_embeds (
torch.Tensor
, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入(提示加权)。如果未提供,则从prompt
输入参数生成文本嵌入。来自池化和投影的最终隐藏状态的单个向量。 - encoder_hidden_states (
torch.Tensor
, 可选) — 来自文本编码器的预生成的倒数第二个隐藏状态,提供额外的文本条件。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 预生成的负文本嵌入。可用于轻松调整文本输入(提示加权)。如果未提供,则从negative_prompt
输入参数生成negative_prompt_embeds
。 - negative_encoder_hidden_states (
torch.Tensor
, 可选) — 与正提示的encoder_hidden_states
类似。 - output_type (
str
, 可选, 默认为"pil"
) — 生成的图像的输出格式。在PIL.Image
或np.array
之间选择。 - callback_steps (
int
, 可选, 默认为 1) —callback
函数调用的频率。如果未指定,则在每一步都调用回调函数。 - cross_attention_kwargs (
dict
, 可选) — 如果指定,则传递给AttentionProcessor
的关键字参数字典,如self.processor
中所定义。 - micro_conditioning_aesthetic_score (
int
, 可选, 默认为 6) — 根据 laion 美学分类器确定的目标美学分数。请参阅 https://laion.ai/blog/laion-aesthetics/ 和 https://arxiv.org/abs/2307.01952 中的微调部分。 - micro_conditioning_crop_coord (
Tuple[int]
, 可选, 默认为 (0, 0)) — 目标高度和宽度裁剪坐标。请参阅 https://arxiv.org/abs/2307.01952 中的微调部分。 - temperature (
Union[int, Tuple[int, int], List[int]]
, 可选, 默认为 (2, 0)) — 配置self.scheduler
上的温度调度器,请参阅AmusedScheduler#set_timesteps
。
返回
ImagePipelineOutput 或 tuple
如果 return_dict
为 True
,则返回 ImagePipelineOutput,否则返回一个 tuple
,其中第一个元素是包含生成图像的列表。
管道生成函数的调用函数。
enable_xformers_memory_efficient_attention
< 源代码 > ( 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)
__call__
< 源代码 > ( prompt: Union = None image: Union = None strength: float = 0.5 num_inference_steps: int = 12 guidance_scale: float = 10.0 negative_prompt: Union = None num_images_per_prompt: Optional = 1 generator: Optional = None prompt_embeds: Optional = None encoder_hidden_states: Optional = None negative_prompt_embeds: Optional = None negative_encoder_hidden_states: Optional = None output_type = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None micro_conditioning_aesthetic_score: int = 6 micro_conditioning_crop_coord: Tuple = (0, 0) temperature: Union = (2, 0) ) → ImagePipelineOutput 或 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]
) — 表示图像批次的图像、NumPy 数组或张量,用作起点。对于 NumPy 数组和 PyTorch 张量,预期值范围在[0, 1]
之间。如果它是张量或张量列表,则预期形状应为(B, C, H, W)
或(C, H, W)
。如果它是 NumPy 数组或数组列表,则预期形状应为(B, H, W, C)
或(H, W, C)
。它还可以接受图像潜在变量作为image
,但如果直接传递潜在变量,则不会再次对其进行编码。 - strength (
float
, 可选,默认为 0.5) — 指示转换参考image
的程度。必须介于 0 和 1 之间。image
用作起点,添加的噪声越多,strength
越高。去噪步骤的数量取决于最初添加的噪声量。当strength
为 1 时,添加的噪声最大,并且去噪过程会运行num_inference_steps
中指定的全部迭代次数。值 1 本质上会忽略image
。 - num_inference_steps (
int
, 可选,默认为 12) — 去噪步骤的数量。更多的去噪步骤通常会导致更高的图像质量,但推理速度会变慢。 - guidance_scale (
float
, 可选,默认为 10.0) — 更高的引导尺度值会鼓励模型生成与文本prompt
密切相关的图像,但会以降低图像质量为代价。当guidance_scale > 1
时启用引导尺度。 - negative_prompt (
str
或List[str]
, 可选) — 指导图像生成中不应包含什么的提示或提示列表。如果未定义,则需要改为传递negative_prompt_embeds
。在不使用引导(guidance_scale < 1
)时忽略。 - num_images_per_prompt (
int
, 可选,默认为 1) — 每个提示生成图像的数量。 - generator (
torch.Generator
,可选) — 用于使生成确定性的torch.Generator
。 - prompt_embeds (
torch.Tensor
,可选) — 预生成的文本嵌入。可用于轻松调整文本输入(提示加权)。如果未提供,则从prompt
输入参数生成文本嵌入。来自池化和投影后的最终隐藏状态的单个向量。 - encoder_hidden_states (
torch.Tensor
,可选) — 来自文本编码器的预生成的倒数第二个隐藏状态,提供额外的文本条件。 - negative_prompt_embeds (
torch.Tensor
,可选) — 预生成的负文本嵌入。可用于轻松调整文本输入(提示加权)。如果未提供,则从negative_prompt
输入参数生成negative_prompt_embeds
。 - negative_encoder_hidden_states (
torch.Tensor
,可选) — 与正提示的encoder_hidden_states
相似。 - 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
函数的频率。如果未指定,则在每个步骤都调用回调。 - cross_attention_kwargs (
dict
,可选) — 如果指定,则传递给self.processor
中定义的AttentionProcessor
的 kwargs 字典。 - temperature (
Union[int, Tuple[int, int], List[int]]
,可选,默认为 (2, 0)) — 配置self.scheduler
上的温度调度器,请参见AmusedScheduler#set_timesteps
。
返回
ImagePipelineOutput 或 tuple
如果 return_dict
为 True
,则返回 ImagePipelineOutput,否则返回一个 tuple
,其中第一个元素是包含生成图像的列表。
管道生成函数的调用函数。
示例
>>> import torch
>>> from diffusers import AmusedImg2ImgPipeline
>>> from diffusers.utils import load_image
>>> pipe = AmusedImg2ImgPipeline.from_pretrained(
... "amused/amused-512", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> prompt = "winter mountains"
>>> input_image = (
... load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/open_muse/mountains.jpg"
... )
... .resize((512, 512))
... .convert("RGB")
... )
>>> image = pipe(prompt, input_image).images[0]
enable_xformers_memory_efficient_attention
< 源代码 > ( attention_op: Optional = None )
参数
- attention_op (
Callable
,可选) — 覆盖默认的None
运算符,用作 xFormers 的memory_efficient_attention()
函数的op
参数。
启用来自 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)
类 diffusers.AmusedInpaintPipeline
< 源代码 >( vqvae: VQModel tokenizer: CLIPTokenizer text_encoder: CLIPTextModelWithProjection transformer: UVit2DModel scheduler: AmusedScheduler )
__call__
< 源代码 > ( prompt: Union = None image: Union = None mask_image: Union = None strength: float = 1.0 num_inference_steps: int = 12 guidance_scale: float = 10.0 negative_prompt: Union = None num_images_per_prompt: Optional = 1 generator: Optional = None prompt_embeds: Optional = None encoder_hidden_states: Optional = None negative_prompt_embeds: Optional = None negative_encoder_hidden_states: Optional = None output_type = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None micro_conditioning_aesthetic_score: int = 6 micro_conditioning_crop_coord: Tuple = (0, 0) temperature: Union = (2, 0) ) → ImagePipelineOutput 或 tuple
参数
- prompt (
str
或List[str]
,可选) — 指导图像生成的提示或提示列表。如果未定义,则需要传递prompt_embeds
。 - 图像 (
torch.Tensor
,PIL.Image.Image
,np.ndarray
,List[torch.Tensor]
,List[PIL.Image.Image]
, 或List[np.ndarray]
) —图像
、NumPy 数组或张量,表示用作起始点的图像批次。对于 NumPy 数组和 PyTorch 张量,预期值范围在[0, 1]
之间。如果它是张量或张量列表,则预期形状应为(B, C, H, W)
或(C, H, W)
。如果它是 NumPy 数组或数组列表,则预期形状应为(B, H, W, C)
或(H, W, C)
。它也可以接受图像潜变量作为image
,但如果直接传递潜变量,则不会再次对其进行编码。 - 遮罩图像 (
torch.Tensor
,PIL.Image.Image
,np.ndarray
,List[torch.Tensor]
,List[PIL.Image.Image]
, 或List[np.ndarray]
) —图像
、NumPy 数组或张量,表示用于遮罩image
的图像批次。遮罩中的白色像素将被重新绘制,而黑色像素将被保留。如果mask_image
是 PIL 图像,则在使用前将其转换为单通道(亮度)。如果它是 NumPy 数组或 PyTorch 张量,则它应该包含一个颜色通道 (L) 而不是 3,因此 PyTorch 张量的预期形状为(B, 1, H, W)
、(B, H, W)
、(1, H, W)
、(H, W)
。对于 NumPy 数组,则为(B, H, W, 1)
、(B, H, W)
、(H, W, 1)
或(H, W)
。 - 强度 (
float
, 可选, 默认为 1.0) — 指示变换参考image
的程度。必须在 0 到 1 之间。image
用作起点,并且添加的噪声越多,strength
越高。降噪步骤的数量取决于最初添加的噪声量。当strength
为 1 时,添加的噪声最大,并且降噪过程会持续运行num_inference_steps
中指定的完整迭代次数。值为 1 基本上会忽略image
。 - 推理步骤数 (
int
, 可选, 默认为 16) — 降噪步骤的数量。更多的降噪步骤通常会导致更高的图像质量,但会以推理速度变慢为代价。 - 引导尺度 (
float
, 可选, 默认为 10.0) — 更高的引导尺度值鼓励模型生成与文本prompt
密切相关的图像,但会以降低图像质量为代价。当guidance_scale > 1
时启用引导尺度。 - 负面提示 (
str
或List[str]
, 可选) — 用于指导图像生成中不包含什么的提示或提示。如果未定义,则需要改为传递negative_prompt_embeds
。在不使用引导 (guidance_scale < 1
) 时被忽略。 - 每个提示的图像数量 (
int
, 可选, 默认为 1) — 每个提示生成的图像数量。 - 生成器 (
torch.Generator
, 可选) — 用于使生成确定性的torch.Generator
。 - 提示嵌入 (
torch.Tensor
, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入(提示加权)。如果未提供,则从prompt
输入参数生成文本嵌入。来自池化和投影的最终隐藏状态的单个向量。 - 编码器隐藏状态 (
torch.Tensor
, 可选) — 来自文本编码器的预生成的倒数第二个隐藏 - negative_prompt_embeds (
torch.Tensor
,可选) — 预生成的负面文本嵌入。可用于轻松调整文本输入(提示加权)。如果未提供,则从negative_prompt
输入参数生成negative_prompt_embeds
。 - negative_encoder_hidden_states (
torch.Tensor
,可选) — 与正面提示的encoder_hidden_states
类似。 - 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
函数的频率。如果未指定,则在每个步骤都调用回调。 - cross_attention_kwargs (
dict
,可选) — 如果指定,则传递给AttentionProcessor
的关键字参数字典,如self.processor
中所定义。 - micro_conditioning_aesthetic_score (
int
,可选,默认为 6) — 根据laion美学分类器指定的目标美学分数。参见https://laion.ai/blog/laion-aesthetics/和https://arxiv.org/abs/2307.01952中的微调条件部分。 - micro_conditioning_crop_coord (
Tuple[int]
,可选,默认为 (0, 0)) — 目标高度、宽度裁剪坐标。参见https://arxiv.org/abs/2307.01952中的微调条件部分。 - temperature (
Union[int, Tuple[int, int], List[int]]
,可选,默认为 (2, 0)) — 配置self.scheduler
上的温度调度器,参见AmusedScheduler#set_timesteps
。
返回
ImagePipelineOutput 或 tuple
如果 return_dict
为 True
,则返回 ImagePipelineOutput,否则返回一个 tuple
,其中第一个元素是包含生成图像的列表。
管道生成函数的调用函数。
示例
>>> import torch
>>> from diffusers import AmusedInpaintPipeline
>>> from diffusers.utils import load_image
>>> pipe = AmusedInpaintPipeline.from_pretrained(
... "amused/amused-512", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> prompt = "fall mountains"
>>> input_image = (
... load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/open_muse/mountains_1.jpg"
... )
... .resize((512, 512))
... .convert("RGB")
... )
>>> mask = (
... load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/open_muse/mountains_1_mask.png"
... )
... .resize((512, 512))
... .convert("L")
... )
>>> pipe(prompt, input_image, mask).images[0].save("out.png")
启用来自 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)