Diffusers 文档
受控生成
并获得增强的文档体验
开始使用
受控生成
控制扩散模型生成的输出一直是社区长期追求的目标,现在是一个活跃的研究课题。在许多流行的扩散模型中,输入(图像和文本提示)的细微变化都可能显著改变输出。在理想的世界中,我们希望能够控制语义的保留和变化方式。
大多数保留语义的例子都归结为能够准确地将输入的变化映射到输出的变化。即,在提示中给主题添加一个形容词,会保留整个图像,只修改被改变的主题。或者,特定主题的图像变体可以保留主题的姿势。
此外,我们希望影响生成图像的质量,而不仅仅是语义保留。即,通常我们希望输出具有良好的质量,符合特定的风格,或看起来真实。
我们将记录 `diffusers` 支持的一些控制扩散模型生成的技术。许多都是前沿研究,可能非常细微。如果有什么需要澄清或您有建议,请随时在论坛或 GitHub Issue上发起讨论。
我们将提供关于如何控制生成的高级解释以及技术片段。对于更深入的技术解释,与管道链接的原始论文始终是最佳资源。
根据用例,应选择相应的技术。在许多情况下,这些技术可以结合使用。例如,可以将 Textual Inversion 与 SEGA 结合使用,为使用 Textual Inversion 生成的输出提供更多语义指导。
除非另有说明,这些技术适用于现有模型,不需要自己的权重。
- InstructPix2Pix
- Pix2Pix Zero
- Attend and Excite
- 语义引导
- 自注意力引导
- Depth2Image
- MultiDiffusion Panorama
- DreamBooth
- 文本反转 (Textual Inversion)
- ControlNet
- 提示词加权
- 自定义扩散
- 模型编辑
- DiffEdit
- T2I-Adapter
- FABRIC
为了方便起见,我们提供一个表格来表示哪些方法仅用于推理,哪些需要微调/训练。
方法 | 仅推理 | 需要训练 / 微调 | 评论 |
---|---|---|---|
InstructPix2Pix | ✅ | ❌ | 可额外 微调以获得 在特定编辑 指令上更好的性能。 |
Pix2Pix Zero | ✅ | ❌ | |
Attend and Excite | ✅ | ❌ | |
语义引导 | ✅ | ❌ | |
自注意力引导 | ✅ | ❌ | |
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 是第一个允许“零样本”图像编辑的模型。这意味着该模型可以在消费级 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 自注意力图中提取。
Depth2Image
Depth2Image 是从 Stable Diffusion 微调而来,旨在更好地保留文本引导图像变体的语义。
它以原始图像的单目深度估计作为条件。
MultiDiffusion 全景图
MultiDiffusion 全景图 定义了一个基于预训练扩散模型的新生成过程。该过程将多种扩散生成方法结合在一起,可以轻松应用于生成高质量和多样化的图像。结果符合用户提供的控制,例如所需的宽高比(例如全景图)和空间引导信号,范围从紧密的分割掩码到边界框。MultiDiffusion 全景图允许以任意宽高比(例如全景图)生成高质量图像。
微调您自己的模型
除了预训练模型之外,Diffusers 还提供用于在用户提供的数据上微调模型的训练脚本。
DreamBooth
DreamBooth 微调模型以教授其新主题。例如,可以使用几张人物照片来生成该人物不同风格的图像。
Textual Inversion
Textual Inversion 微调模型以教授其新概念。例如,可以使用几张艺术风格的图片来生成该风格的图像。
ControlNet
ControlNet 是一个辅助网络,它添加了一个额外的条件。有 8 个规范的预训练 ControlNet,它们在不同的条件下进行训练,例如边缘检测、涂鸦、深度图和语义分割。
提示词加权
提示词加权 是一种简单的技术,它将更多的注意力权重放在文本输入的某些部分。
自定义扩散
Custom Diffusion 仅对预训练的文本到图像扩散模型的交叉注意力图进行微调。它还允许额外执行 Textual Inversion。它支持多概念训练。与 DreamBooth 和 Textual Inversion 类似,Custom Diffusion 也用于教授预训练的文本到图像扩散模型新概念,以生成包含感兴趣概念的输出。
模型编辑
文本到图像模型编辑管道 帮助您缓解预训练文本到图像扩散模型可能对输入提示中存在的主题做出的某些不正确的隐式假设。例如,如果您提示 Stable Diffusion 生成“一束玫瑰”的图像,生成的图像中的玫瑰更有可能是红色的。此管道帮助您改变该假设。
DiffEdit
DiffEdit 允许对输入图像和输入提示进行语义编辑,同时尽可能保留原始输入图像。
T2I-Adapter
T2I-Adapter 是一个辅助网络,它添加了一个额外的条件。有 8 个规范的预训练适配器,它们在不同的条件下进行训练,例如边缘检测、草图、深度图和语义分割。
Fabric
Fabric 是一种无需训练的方法,适用于各种流行的扩散模型,它利用最广泛使用的架构中存在的自注意力层来根据一组反馈图像调节扩散过程。
< > 在 GitHub 上更新