受控生成
控制扩散模型生成的输出一直是社区追求的目标,现在已成为一个活跃的研究课题。在许多流行的扩散模型中,输入的细微变化(包括图像和文本提示)可以极大地改变输出。在理想情况下,我们希望能够控制语义的保留和变化。
大多数保留语义的例子归结为能够准确地将输入的变化映射到输出的变化。例如,向提示中的主题添加一个形容词,只会修改该主题,而保留整个图像。或者,特定主题的图像变体保留了主题的姿势。
此外,我们还希望影响生成图像的其他质量,而不仅仅是语义保留。例如,总体上,我们希望输出具有良好的质量,符合特定的风格,或具有现实感。
我们将记录 diffusers
支持的一些控制扩散模型生成的技术。许多技术是前沿研究,可能相当复杂。如果有需要澄清的地方或你有建议,请不要犹豫,在 论坛 或 GitHub 问题 中开启讨论。
我们提供了一个高层次的解释,说明如何控制生成,以及一些技术细节。对于更深入的技术解释,链接到管道的原始论文始终是最好的资源。
根据使用场景,应相应选择技术。在许多情况下,这些技术可以结合使用。例如,可以将文本反转(Textual Inversion)与 SEGA 结合,为使用文本反转生成的输出提供更多的语义指导。
除非另有说明,这些技术适用于现有模型,不需要自己的权重。
- InstructPix2Pix
- Pix2Pix Zero
- Attend and Excite
- 语义引导
- 自注意力引导
- Depth2Image
- MultiDiffusion Panorama
- DreamBooth
- 文本反转
- ControlNet
- 提示加权
- 自定义扩散
- 模型编辑
- DiffEdit
- T2I-Adapter
- FABRIC
为了方便起见,我们提供了一个表格,标明哪些方法仅用于推理,哪些需要微调/训练。
方法 | 仅用于推理 | 需要微调/训练 |
---|
微调方法 | 状态 | 注释 | 评论 |
---|---|---|---|
InstructPix2Pix | ✅ | ❌ | 可以另外被 |
优化以更好地
特定性能
| Pix2Pix Zero | ✅ | ❌ | | | Attend and Excite | ✅ | ❌ | | | Semantic Guidance | ✅ | ❌ | | | Self-attention Guidance | ✅ | ❌ | | | Depth2Image | ✅ | ❌ | | | MultiDiffusion Panorama | ✅ | ❌ | | | DreamBooth | ❌ | ✅ | | | Textual Inversion | ❌ | ✅ | | | 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 包括优化潜在变量(而不是 UNet、VAE 或文本编码器中的任何部分)以引导生成朝向特定概念。这意味着整个 管道可能需要比标准 StableDiffusionPipeline 更多的内存。
Attend and Excite
Attend and Excite 允许提示中的主题在最终图像中忠实表示。
一组令牌索引作为输入,对应于提示中需要出现在图像中的主题。在去噪过程中,每个令牌索引都保证在图像的至少一个补丁中具有最小的注意力阈值。在去噪过程中,中间潜在变量被迭代优化以增强最被忽视的主题令牌的注意力,直到所有主题令牌的注意力阈值都通过。
与 Pix2Pix Zero 一样,Attend and Excite 也在其管道中包含了一个小型优化循环(不触及预训练权重),可能需要比通常的 StableDiffusionPipeline 更多的内存。
语义引导 (SEGA)
SEGA 允许在图像中应用或移除一个或多个概念。还可以控制概念的强度。例如,微笑概念可以用于逐步增加或减少肖像的微笑。
类似于分类器自由引导通过空提示输入提供引导,SEGA 通过概念提示提供引导。可以同时应用多个概念提示。每个概念提示可以添加或移除其概念,具体取决于引导是正向还是负向应用。
与 Pix2Pix Zero 或 Attend and Excite 不同,SEGA 直接与扩散过程交互,而不是执行任何显式的基于梯度的优化。
自注意力引导 (SAG)
自注意力引导 提高了图像的一般质量。
SAG 从不依赖高频细节的预测提供引导到完全条件化的图像。高频细节从 UNet 自注意力图中提取。
Depth2Image
Depth2Image 是从 Stable Diffusion 微调而来的,以更好地在文本引导的图像变化中保留语义。
它基于原始图像的单目深度估计进行条件化。
MultiDiffusion Panorama
MultiDiffusion Panorama 定义了一个新的生成过程,该过程结合了多个扩散生成方法,可以轻松应用于生成高质量和多样化的图像。结果遵循用户提供的控制,例如所需的宽高比(例如全景图)和空间引导信号,范围从紧密的分割掩码到边界框。 MultiDiffusion Panorama 允许生成任意宽高比(例如全景图)的高质量图像。
微调你自己的模型
除了预训练模型,Diffusers 还提供了用于在用户提供的数据上微调模型的训练脚本。
DreamBooth
DreamBooth 微调模型以教授其关于新主题的知识。例如,几张人的照片可以用于生成该人在不同风格中的图像。
文本反转
文本反转 微调模型以教授其关于新概念的知识。例如,几张艺术风格的照片可以用于生成该风格的图像。
ControlNet
ControlNet 是一个辅助网络,添加了一个额外的条件。 有 8 个标准预训练的 ControlNet,训练在不同的条件上,如边缘检测、涂鸦、 深度图和语义分割。
提示加权
提示加权 是一种简单的技术,可以为文本输入的某些部分分配更多的注意力权重。
自定义扩散
自定义扩散 仅微调预训练文本到图像扩散模型的交叉注意力图。它还允许额外执行文本反转。它支持 多概念训练。与 DreamBooth 和文本反转一样,自定义扩散也用于 教授预训练文本到图像扩散模型关于新概念的知识,以生成涉及感兴趣概念的输出。
模型编辑
文本到图像模型编辑管道 帮助你缓解预训练文本到图像 扩散模型对输入提示中出现的主题可能做出的一些不正确的隐含假设。例如,如果你提示 Stable Diffusion 生成“一束玫瑰”的图像,生成的图像中的玫瑰更可能是红色的。这个管道帮助你改变这种假设。
DiffEdit
DiffEdit 允许在保留原始输入图像的情况下,根据输入提示进行语义编辑。
T2I-Adapter
T2I-Adapter 是一个辅助网络,添加了一个额外的条件。 有 8 个标准预训练的适配器,训练在不同的条件上,如边缘检测、草图、 深度图和语义分割。
Fabric
Fabric 是一种无需训练的方法,适用于广泛的流行扩散模型,利用 最广泛使用的架构中的自注意力层,将扩散过程条件化为一组反馈图像。