unCLIP
用 CLIP 潜码进行分层文本条件图像生成 由 Aditya Ramesh、Prafulla Dhariwal、Alex Nichol、Casey Chu、Mark Chen 撰写。 🤗 Diffusers 中的 unCLIP 模型来自 kakaobrain 的 karlo。
论文中的摘要如下:
对比模型如 CLIP 已被证明能够学习图像的鲁棒表示,这些表示既能捕获语义又能捕获风格。为了利用这些表示进行图像生成,我们提出了一种两阶段模型:一个根据文本标题生成 CLIP 图像嵌入的先验,以及一个根据图像嵌入生成图像的解码器。我们表明,显式生成图像表示可以在最大限度地减少照片真实感和标题相似性损失的情况下提高图像多样性。我们根据图像表示训练的解码器还可以生成图像的变化,这些变化既能保留其语义和风格,又能改变图像表示中不存在的非本质细节。此外,CLIP 的联合嵌入空间允许以零样本的方式进行语言引导的图像操作。我们使用扩散模型作为解码器,并对自回归模型和扩散模型进行先验实验,发现后者在计算上更有效率,并能产生更高质量的样本。
您可以在 lucidrains/DALLE2-pytorch 中找到 lucidrains 的 DALL-E 2 复制品。
UnCLIPPipeline
class diffusers.UnCLIPPipeline
< 源代码 >( prior: PriorTransformer decoder: UNet2DConditionModel text_encoder: CLIPTextModelWithProjection tokenizer: CLIPTokenizer text_proj: UnCLIPTextProjModel super_res_first: UNet2DModel super_res_last: UNet2DModel prior_scheduler: UnCLIPScheduler decoder_scheduler: UnCLIPScheduler super_res_scheduler: UnCLIPScheduler )
参数
- text_encoder (CLIPTextModelWithProjection) — 冻结的文本编码器。
- tokenizer (CLIPTokenizer) — 用于将文本标记化的
CLIPTokenizer
。 - prior (PriorTransformer) — 用于从文本嵌入中近似图像嵌入的典型 unCLIP 先验。
- text_proj (
UnCLIPTextProjModel
) — 用于准备和组合嵌入的实用程序类,然后再将它们传递给解码器。 - decoder (UNet2DConditionModel) — 用于将图像嵌入反转为图像的解码器。
- super_res_first (UNet2DModel) — 超分辨率 UNet。在超分辨率扩散过程的所有步骤中使用,除了最后一步。
- super_res_last (UNet2DModel) — 超分辨率 UNet。用于超分辨率扩散过程的最后一步。
- prior_scheduler (
UnCLIPScheduler
) — 用于先验降噪过程的调度器(修改后的 DDPMScheduler)。 - decoder_scheduler (
UnCLIPScheduler
) — 用于解码器降噪过程的调度器(修改后的 DDPMScheduler)。 - super_res_scheduler (
UnCLIPScheduler
) — 用于超分辨率降噪过程的调度器(修改后的 DDPMScheduler)。
使用 unCLIP 进行文本到图像生成的管道。
此模型继承自 DiffusionPipeline。有关为所有管道实现的通用方法(下载、保存、在特定设备上运行等),请查看超类文档。
__call__
< 源代码 >( prompt: Union = None num_images_per_prompt: int = 1 prior_num_inference_steps: int = 25 decoder_num_inference_steps: int = 25 super_res_num_inference_steps: int = 7 generator: Union = None prior_latents: Optional = None decoder_latents: Optional = None super_res_latents: Optional = None text_model_output: Union = None text_attention_mask: Optional = None prior_guidance_scale: float = 4.0 decoder_guidance_scale: float = 8.0 output_type: Optional = 'pil' return_dict: bool = True ) → ImagePipelineOutput 或 tuple
参数
- prompt (
str
或List[str]
) — 指导图像生成的提示或提示。仅当传递text_model_output
和text_attention_mask
时,才能将其留为空白。 - num_images_per_prompt (
int
, 可选, 默认值为 1) — 每个提示生成的图像数量。 - prior_num_inference_steps (
int
, 可选, 默认值为 25) — 先验的降噪步骤数。更多的降噪步骤通常会导致更高质量的图像,但会降低推理速度。 - decoder_num_inference_steps (
int
, 可选, 默认为 25) — 解码器的去噪步骤数量。更多的去噪步骤通常会导致更高的图像质量,但推理速度会更慢。 - super_res_num_inference_steps (
int
, 可选, 默认为 7) — 超分辨率的去噪步骤数量。更多的去噪步骤通常会导致更高的图像质量,但推理速度会更慢。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个torch.Generator
用于使生成确定性。 - prior_latents (
torch.Tensor
形状为 (批次大小, 嵌入维度), 可选) — 预生成的噪声潜在变量,用作先验的输入。 - decoder_latents (
torch.Tensor
形状为 (批次大小, 通道, 高度, 宽度), 可选) — 预生成的噪声潜在变量,用作解码器的输入。 - super_res_latents (
torch.Tensor
形状为 (批次大小, 通道, 超分辨率高度, 超分辨率宽度), 可选) — 预生成的噪声潜在变量,用作解码器的输入。 - prior_guidance_scale (
float
, 可选, 默认为 4.0) — 较高的引导尺度值会鼓励模型生成与文本prompt
密切相关的图像,但会降低图像质量。当guidance_scale > 1
时,引导尺度将被启用。 - decoder_guidance_scale (
float
, 可选, 默认为 4.0) — 较高的引导尺度值会鼓励模型生成与文本prompt
密切相关的图像,但会降低图像质量。当guidance_scale > 1
时,引导尺度将被启用。 - text_model_output (
CLIPTextModelOutput
, 可选) — 预定义的CLIPTextModel
输出,可以从文本编码器中推导出。可以传递预定义的文本输出以用于文本嵌入插值等任务。在这种情况下,请确保也传递text_attention_mask
。prompt
可以留空。 - text_attention_mask (
torch.Tensor
, 可选) — 预定义的 CLIP 文本注意力掩码,可以从分词器中推导出。传递text_model_output
时,需要预定义的文本注意力掩码。 - output_type (
str
, 可选, 默认值为"pil"
) — 生成的图像的输出格式。 在PIL.Image
或np.array
中选择。 - return_dict (
bool
, 可选, 默认值为True
) — 是否返回 ImagePipelineOutput 而不是简单的元组。
返回
ImagePipelineOutput 或 tuple
如果 return_dict
为 True
, 则返回 ImagePipelineOutput, 否则返回一个 tuple
, 其中第一个元素是包含生成图像的列表。
用于生成管道调用函数。
UnCLIPImageVariationPipeline
class diffusers.UnCLIPImageVariationPipeline
< 源代码 >( decoder: UNet2DConditionModel text_encoder: CLIPTextModelWithProjection tokenizer: CLIPTokenizer text_proj: UnCLIPTextProjModel feature_extractor: CLIPImageProcessor image_encoder: CLIPVisionModelWithProjection super_res_first: UNet2DModel super_res_last: UNet2DModel decoder_scheduler: UnCLIPScheduler super_res_scheduler: UnCLIPScheduler )
参数
- text_encoder (CLIPTextModelWithProjection) — 冻结文本编码器。
- tokenizer (CLIPTokenizer) — 用于对文本进行标记的
CLIPTokenizer
。 - feature_extractor (CLIPImageProcessor) — 从生成图像中提取特征以用作
image_encoder
输入的模型。 - image_encoder (CLIPVisionModelWithProjection) — 冻结 CLIP 图像编码器 (clip-vit-large-patch14)。
- text_proj (
UnCLIPTextProjModel
) — 用于准备和合并嵌入的工具类,然后将其传递给解码器。 - super_res_last (UNet2DModel) — 超分辨率UNet。在超分辨率扩散过程的最后一步中使用。
- decoder_scheduler (
UnCLIPScheduler
) — 解码器降噪过程中使用的调度器(一个经过修改的 DDPMScheduler)。 - super_res_scheduler (
UnCLIPScheduler
) — 超分辨率降噪过程中使用的调度器(一个经过修改的 DDPMScheduler)。
使用UnCLIP从输入图像生成图像变化的管道。
此模型继承自 DiffusionPipeline。有关为所有管道实现的通用方法(下载、保存、在特定设备上运行等),请查看超类文档。
__call__
< source > ( image: Union = None num_images_per_prompt: int = 1 decoder_num_inference_steps: int = 25 super_res_num_inference_steps: int = 7 generator: Optional = None decoder_latents: Optional = None super_res_latents: Optional = None image_embeddings: Optional = None decoder_guidance_scale: float = 8.0 output_type: Optional = 'pil' return_dict: bool = True ) → ImagePipelineOutput 或 tuple
参数
- image (
PIL.Image.Image
或List[PIL.Image.Image]
或torch.Tensor
) — 表示要作为起点使用的图像批次的Image
或张量。如果您提供张量,它需要与CLIPImageProcessor
配置 兼容。仅当传递image_embeddings
时,可以将其留空为None
。 - num_images_per_prompt (
int
, 可选, 默认值为 1) — 每个提示生成图像的数量。 - decoder_num_inference_steps (
int
, 可选, 默认值为 25) — 解码器的降噪步骤数量。更多的降噪步骤通常会导致更高的图像质量,但推理速度会降低。 - super_res_num_inference_steps (
int
, 可选, 默认值为 7) — 超分辨率的降噪步骤数量。更多的降噪步骤通常会导致更高的图像质量,但推理速度会降低。 - super_res_latents (
torch.Tensor
形状为 (批次大小, 通道, 超分辨率高度, 超分辨率宽度), 可选) — 用作解码器输入的预生成的噪声潜在变量。 - decoder_guidance_scale (
float
, 可选, 默认值为 4.0) — 更高的引导比例值鼓励模型生成与文本prompt
紧密相关的图像,但会牺牲图像质量。 当guidance_scale > 1
时启用引导比例。 - image_embeddings (
torch.Tensor
, 可选) — 可以从图像编码器中推导出的预定义图像嵌入。 对于图像插值等任务,可以传递预定义的图像嵌入。image
可以保留为None
。 - output_type (
str
, 可选, 默认值为"pil"
) — 生成的图像的输出格式。 在PIL.Image
或np.array
之间选择。 - return_dict (
bool
, 可选, 默认值为True
) — 是否返回 ImagePipelineOutput 而不是普通元组。
返回
ImagePipelineOutput 或 tuple
如果 return_dict
为 True
, 则返回 ImagePipelineOutput, 否则返回一个 tuple
, 其中第一个元素是包含生成图像的列表。
用于生成管道调用函数。
ImagePipelineOutput
图像管道的输出类。