Buckets:
受控生成
控制扩散模型生成的输出一直是社区长期追求的目标,如今已成为一个活跃的研究课题。在许多流行的扩散模型中,输入(包括图像和文本提示)的细微变化都可能导致输出发生巨大改变。在理想情况下,我们希望能够控制语义如何被保留和改变。
大多数保持语义一致性的示例,本质上都可以归结为能够准确地将输入的变化映射到输出的变化。例如,在提示词中为主语添加一个形容词,会保留整张图像,仅修改所变更的主语。或者,对特定主体进行图像变体生成时,会保留该主体的姿态。
此外,除了语义保真之外,我们还希望影响生成图像的其他特性。也就是说,总体而言,我们希望输出图像具有高质量、符合特定风格或更加逼真。
我们将记录 diffusers 支持的用于控制扩散模型生成过程的一些技术。其中许多属于前沿研究,细节可能较为复杂。如果某些内容需要澄清,或者您有建议,请随时发起 GitHub Discussion 或 GitHub issue。
我们提供了关于如何控制生成过程的高层说明,并附上了一段技术细节的示例。如需更深入的技术解释,从流水线中链接的原始论文始终是最好的参考资料。
根据具体用例,应选择合适的技术。在许多情况下,这些技术可以组合使用。例如,可以将 Textual Inversion 与 SEGA 结合,为使用 Textual Inversion 生成的输出提供更强的语义引导。
除非另有说明,这些技术适用于现有模型,且不需要它们自身的权重。
- InstructPix2Pix
- Attend and Excite
- 语义引导
- 自注意力引导
- Depth2Image
- MultiDiffusion 全景
- DreamBooth
- 文本反转
- ControlNet
- 提示词加权
- 自定义扩散
- DiffEdit
- T2I-Adapter
- FABRIC
为了方便起见,我们提供了一张表格,用于说明哪些方法仅用于推理,哪些方法需要微调/训练。
| 方法 | 仅推理 | 需要训练 / 微调 | 评论 |
|---|---|---|---|
| InstructPix2Pix | ✅ | ❌ | 此外,还可以进行微调,以在特定的编辑指令上获得更好的性能。 |
| Attend and Excite | ✅ | ❌ | |
| 语义引导 | ✅ | ❌ | |
| 自注意力引导 | ✅ | ❌ | |
| Depth2Image | ✅ | ❌ | |
| MultiDiffusion 全景 | ✅ | ❌ | |
| DreamBooth | ❌ | ✅ | |
| 文本反转 | ❌ | ✅ | |
| ControlNet | ✅ | ❌ | ControlNet 可以针对自定义条件进行训练/微调。 |
| 提示词加权 | ✅ | ❌ | |
| 自定义扩散 | ❌ | ✅ | |
| DiffEdit | ✅ | ❌ | |
| T2I-Adapter | ✅ | ❌ | |
| Fabric | ✅ | ❌ |
InstructPix2Pix
InstructPix2Pix 基于 Stable Diffusion 进行微调,以支持对输入图像进行编辑。它接收一张图像和一段描述编辑操作的提示词作为输入,并输出编辑后的图像。InstructPix2Pix 经过专门训练,能够很好地配合类似 InstructGPT 风格的提示词使用。
Attend and Excite
Attend and Excite 能够确保提示词中的主体在最终图像中得到忠实呈现。
输入是一组 token 索引,对应于提示词中需要出现在图像里的主体。在去噪过程中,每个 token 索引都保证对图像中至少一个 patch 具有最低注意力阈值。在去噪过程中,中间潜变量会被迭代优化,以增强最被忽视的主体 token 的注意力,直到所有主体 token 的注意力都达到阈值。
与 Pix2Pix Zero 类似,Attend and Excite 的流程中也包含一个小型优化循环(保持预训练权重不变),因此可能需要比常规的 StableDiffusionPipeline 更多的内存。
语义引导(SEGA)
SEGA 允许从图像中添加或移除一个或多个概念,并且可以控制概念的强度。例如,可以使用“微笑”概念来逐步增加或减少肖像中的微笑程度。
与分类器自由引导通过空提示输入提供引导类似,SEGA 通过概念提示提供引导。可以同时应用多个此类概念提示。根据引导是正向还是负向应用,每个概念提示可以添加或移除其对应的概念。
与 Pix2Pix Zero 或 Attend and Excite 不同,SEGA 直接作用于扩散过程,而非执行任何显式的基于梯度的优化。
自注意力引导(SAG)
Self-attention Guidance 提升了图像的整体质量。
SAG 提供了从未经高频细节条件化的预测到完全条件化图像的引导。高频细节是从 UNet 自注意力图中提取出来的。
Depth2Image
Depth2Image 基于 Stable Diffusion 进行微调,以更好地保留文本引导图像变化中的语义信息。
它以原始图像的独眼深度估计作为条件。
MultiDiffusion 全景
MultiDiffusion Panorama 在预训练扩散模型上定义了一种新的生成过程。该过程将多种扩散生成方法结合在一起,可直接用于生成高质量且多样化的图像。生成结果遵循用户提供的控制条件,例如期望的宽高比(如全景图)以及空间引导信号,范围从紧密的分割掩码到边界框。MultiDiffusion Panorama 允许您在任意宽高比(例如全景图)下生成高质量图像。
微调您自己的模型
除了预训练模型,Diffusers 还提供了训练脚本,用于在用户提供的数据上对模型进行微调。
DreamBooth
DreamBooth 通过微调模型来使其学习新的主题。例如,可以使用几张某人的照片来生成该人物在不同风格下的图像。
文本反转
Textual Inversion 通过微调模型来使其学习一个新概念。例如,可以使用几张特定艺术风格的图片来生成该风格下的图像。
ControlNet
ControlNet 是一个辅助网络,用于添加额外的条件。共有 8 个标准的预训练 ControlNet,分别基于不同的条件进行训练,例如边缘检测、涂鸦、深度图和语义分割。
提示词加权
提示词加权是一种简单技术,用于对文本输入的某些部分赋予更高的注意力权重。
Custom Diffusion
Custom Diffusion 仅对预训练文本到图像扩散模型的交叉注意力图进行微调。它还支持额外执行 Textual Inversion。其设计本身就支持多概念训练。与 DreamBooth 和 Textual Inversion 类似,Custom Diffusion 也用于让预训练的文本到图像扩散模型学习新概念,从而生成包含目标概念的输出。
DiffEdit
DiffEdit 允许根据输入提示对输入图像进行语义编辑,同时尽可能保留原始输入图像。
T2I-Adapter
T2I-Adapter 是一个辅助网络,用于添加额外的条件。共有 8 个标准的预训练适配器,分别在不同的条件上进行训练,例如边缘检测、草图、深度图和语义分割。
Fabric
Fabric 是一种无需训练的方法,适用于多种流行的扩散模型。它利用最常用架构中存在的自注意力层,使扩散过程能够以一组反馈图像作为条件。
Xet Storage Details
- Size:
- 11.4 kB
- Xet hash:
- 3e313a80a054c903f80500ffdffa9810d6dae1444e082243dab2a93813a5a74d
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.