控制生成
控制扩散模型生成的输出一直是社区追求的目标,现在也成为了一个活跃的研究领域。在许多流行的扩散模型中,输入(包括图像和文本提示)的细微变化可能会极大地改变输出。在理想情况下,我们希望能够控制语义的保留和改变方式。
大多数保留语义的示例都归结为能够准确地将输入变化映射到输出变化。即在提示中添加一个形容词到主题可以保留整个图像,只修改更改的主题。或者,特定主题的图像变化可以保留主题的姿势。
此外,我们希望影响生成的图像的某些质量,而不仅仅是语义保留。例如,我们通常希望我们的输出质量良好,符合特定风格或具有真实感。
我们将记录 diffusers
支持的一些用于控制扩散模型生成的技术。许多技术都属于尖端研究,可能比较微妙。如果需要澄清或有建议,请随时在 论坛 或 GitHub 问题 上开启讨论。
我们提供了关于如何控制生成的高级解释以及技术片段。有关技术的更深入解释,从管道链接的原始论文始终是最好的资源。
根据用例选择相应技术。在许多情况下,这些技术可以结合使用。例如,可以将文本反转与 SEGA 结合使用,为使用文本反转生成的输出提供更多语义指导。
除非另有说明,否则这些技术适用于现有模型,不需要它们自己的权重。
- InstructPix2Pix
- Pix2Pix Zero
- Attend and Excite
- 语义引导
- 自注意力引导
- Depth2Image
- MultiDiffusion 全景图
- DreamBooth
- 文本反转
- ControlNet
- 提示加权
- 自定义扩散
- 模型编辑
- DiffEdit
- T2I-Adapter
- FABRIC
为了方便起见,我们提供一个表格来表示哪些方法是仅推理的,哪些方法需要微调/训练。
方法 | 仅推理 | 需要训练 / 微调 | 评论 |
---|---|---|---|
InstructPix2Pix | ✅ | ❌ | 还可以 微调以获得更好的 特定 编辑指令的性能。 |
Pix2Pix Zero | ✅ | ❌ | |
Attend and Excite | ✅ | ❌ | |
语义引导 | ✅ | ❌ | |
自注意力引导 | ✅ | ❌ | |
Depth2Image | ✅ | ❌ | |
MultiDiffusion 全景图 | ✅ | ❌ | |
DreamBooth | ❌ | ✅ | |
文本反转 | ❌ | ✅ | |
ControlNet | ✅ | ❌ | ControlNet 可以 在 自定义条件上进行训练/微调。 |
提示加权 | ✅ | ❌ | |
自定义扩散 | ❌ | ✅ | |
模型编辑 | ✅ | ❌ | |
DiffEdit | ✅ | ❌ | |
T2I-Adapter | ✅ | ❌ | |
Fabric | ✅ | ❌ |
InstructPix2Pix
InstructPix2Pix 是从 Stable Diffusion 微调而来,支持编辑输入图像。它接受图像和描述编辑的提示作为输入,并输出编辑后的图像。InstructPix2Pix 已被明确训练以适用于 InstructGPT 类提示。
Pix2Pix Zero
Pix2Pix Zero 允许修改图像,以便在保留一般图像语义的同时将一个概念或主体转换为另一个概念或主体。
降噪过程从一个概念嵌入引导到另一个概念嵌入。在降噪过程中,对中间潜变量进行优化,以将注意力图推向参考注意力图。参考注意力图来自输入图像的降噪过程,用于鼓励语义保留。
Pix2Pix Zero 可用于编辑合成图像和真实图像。
- 要编辑合成图像,首先使用标题生成图像。接下来,我们为要编辑的概念和新目标概念生成图像标题。我们可以为此目的使用像 Flan-T5 这样的模型。然后,通过文本编码器创建源概念和目标概念的“平均”提示嵌入。最后,使用 pix2pix-zero 算法编辑合成图像。
- 要编辑真实图像,首先使用像 BLIP 这样的模型生成图像标题。然后,将 DDIM 反转应用于提示和图像以生成“反转”潜变量。与之前类似,创建源概念和目标概念的“平均”提示嵌入,最后使用 pix2pix-zero 算法结合“反转”潜变量编辑图像。
Pix2Pix Zero 是第一个允许“零样本”图像编辑的模型。这意味着该模型可以在不到一分钟的时间内在消费级 GPU 上编辑图像,如 这里 所示。
如上所述,Pix2Pix Zero 包括优化潜变量(而不是 UNet、VAE 或文本编码器)以引导生成朝向特定概念。这意味着整个管道可能需要比标准 StableDiffusionPipeline 占用更多的内存。
InstructPix2Pix 和 Pix2Pix Zero 等方法之间的一个重要区别在于前者涉及微调预训练权重,而后者则不。这意味着可以将 Pix2Pix Zero 应用于任何可用的 Stable Diffusion 模型。
Attend and Excite
Attend and Excite 允许提示中的主题在最终图像中忠实地表示。
一组标记索引作为输入给出,对应于提示中需要出现在图像中的主题。在降噪过程中,保证每个标记索引在图像的至少一个块上具有最小注意力阈值。在降噪过程中,对中间潜变量进行迭代优化,以增强被忽略最多的主题标记的注意力,直到所有主题标记的注意力阈值都被超过。
与 Pix2Pix Zero 类似,Attend and Excite 也在管道中包含一个微型优化循环(保持预训练权重不变),并且可能需要比通常的 StableDiffusionPipeline 占用更多的内存。
语义引导 (SEGA)
SEGA 允许在图像中应用或移除一个或多个概念。概念的强度也可以控制。例如,微笑概念可以用来逐渐增加或减少肖像的微笑程度。
类似于分类器自由引导通过空提示输入提供引导的方式,SEGA 通过概念提示提供引导。可以同时应用多个这些概念提示。每个概念提示都可以添加或移除其概念,具体取决于引导是正向应用还是负向应用。
与 Pix2Pix Zero 或 Attend and Excite 不同,SEGA 直接与扩散过程交互,而不是执行任何显式的基于梯度的优化。
自注意力引导 (SAG)
自注意力引导 提高了图像的整体质量。
SAG 从未根据高频细节进行条件化的预测提供引导,以生成完全条件化的图像。高频细节是从 UNet 自注意力图中提取出来的。
深度转图像
深度转图像 是从 Stable Diffusion 微调而来的,可以更好地保留语义以进行文本引导的图像变化。
它以原始图像的单目深度估计为条件。
多扩散全景
多扩散全景 在预训练的扩散模型上定义了新的生成过程。此过程将多种扩散生成方法绑定在一起,这些方法可以轻松应用于生成高质量和多样化的图像。结果符合用户提供的控制,例如所需的纵横比(例如,全景)和空间引导信号,范围从严格的分割掩码到边界框。多扩散全景允许以任意纵横比(例如,全景)生成高质量图像。
微调您自己的模型
除了预训练模型之外,Diffusers 还提供了用于在用户提供的数据上微调模型的训练脚本。
梦想小屋
梦想小屋 微调模型以教授它关于新主题的知识。例如,几张某人的照片可以用来生成该人在不同风格下的图像。
文本反转
文本反转 微调模型以教授它关于新概念的知识。例如,一些艺术作品风格的照片可以用来生成该风格下的图像。
ControlNet
ControlNet 是一个辅助网络,它添加了额外的条件。有 8 个规范的预训练 ControlNet,它们针对不同的条件进行训练,例如边缘检测、涂鸦、深度图和语义分割。
提示加权
提示加权 是一种简单的技术,可以将更多注意力权重放在文本输入的某些部分。
自定义扩散
自定义扩散 仅微调预训练的文本到图像扩散模型的交叉注意力图。它还允许额外执行文本反转。它在设计上支持多概念训练。与梦想小屋和文本反转一样,自定义扩散也被用来教授预训练的文本到图像扩散模型关于新概念的知识,以生成包含感兴趣概念的输出。
模型编辑
该 文本到图像模型编辑管道 可以帮助您缓解预训练的文本到图像扩散模型可能对输入提示中存在的主题做出的一些不正确的隐含假设。例如,如果您提示 Stable Diffusion 生成“一束玫瑰”的图像,生成的图像中的玫瑰更有可能是红色的。此管道可以帮助您更改该假设。
DiffEdit
DiffEdit 允许对输入图像和输入提示进行语义编辑,同时尽可能保留原始输入图像。
T2I-Adapter
T2I-Adapter 是一种辅助网络,它添加了一个额外的条件。 有 8 个规范的预训练适配器,针对不同的条件进行了训练,例如边缘检测、草图、深度图和语义分割。
Fabric
Fabric 是一种无需训练的方法,适用于各种流行的扩散模型,它利用最广泛使用的架构中存在的自注意力层,对一组反馈图像进行扩散过程的条件化。
< > Update on GitHub