Buckets:

hf-doc-build/doc / diffusers /v0.43.0 /zh /using-diffusers /controlling_generation.md
mishig's picture
|
download
raw
11.4 kB
# 受控生成
控制扩散模型生成的输出一直是社区长期追求的目标,如今已成为一个活跃的研究课题。在许多流行的扩散模型中,输入(包括图像和文本提示)的细微变化都可能导致输出发生巨大改变。在理想情况下,我们希望能够控制语义如何被保留和改变。
大多数保持语义一致性的示例,本质上都可以归结为能够准确地将输入的变化映射到输出的变化。例如,在提示词中为主语添加一个形容词,会保留整张图像,仅修改所变更的主语。或者,对特定主体进行图像变体生成时,会保留该主体的姿态。
此外,除了语义保真之外,我们还希望影响生成图像的其他特性。也就是说,总体而言,我们希望输出图像具有高质量、符合特定风格或更加逼真。
我们将记录 `diffusers` 支持的用于控制扩散模型生成过程的一些技术。其中许多属于前沿研究,细节可能较为复杂。如果某些内容需要澄清,或者您有建议,请随时发起 [GitHub Discussion](https://github.com/huggingface/diffusers/discussions) 或 [GitHub issue](https://github.com/huggingface/diffusers/issues)。
我们提供了关于如何控制生成过程的高层说明,并附上了一段技术细节的示例。如需更深入的技术解释,从流水线中链接的原始论文始终是最好的参考资料。
根据具体用例,应选择合适的技术。在许多情况下,这些技术可以组合使用。例如,可以将 Textual Inversion 与 SEGA 结合,为使用 Textual Inversion 生成的输出提供更强的语义引导。
除非另有说明,这些技术适用于现有模型,且不需要它们自身的权重。
1. [InstructPix2Pix](#instructpix2pix)
2. [Attend and Excite](#attend-and-excite)
3. [语义引导](#semantic-guidance-sega)
4. [自注意力引导](#self-attention-guidance-sag)
5. [Depth2Image](#depth2image)
6. [MultiDiffusion 全景](#multidiffusion-panorama)
7. [DreamBooth](#dreambooth)
8. [文本反转](#textual-inversion)
9. [ControlNet](#controlnet)
10. [提示词加权](#prompt-weighting)
11. [自定义扩散](#custom-diffusion)
12. [DiffEdit](#diffedit)
13. [T2I-Adapter](#t2i-adapter)
14. [FABRIC](#fabric)
为了方便起见,我们提供了一张表格,用于说明哪些方法仅用于推理,哪些方法需要微调/训练。
| **方法** | **仅推理** | **需要训练 / 微调** | **评论** |
| :-------------------------------------------------: | :----------------: | :-------------------------------------: | :---------------------------------------------------------------------------------------------: |
| [InstructPix2Pix](#instructpix2pix) | ✅ | ❌ | 此外,还可以进行微调,以在特定的编辑指令上获得更好的性能。 |
| [Attend and Excite](#attend-and-excite) | ✅ | ❌ | |
| [语义引导](#semantic-guidance-sega) | ✅ | ❌ | |
| [自注意力引导](#self-attention-guidance-sag) | ✅ | ❌ | |
| [Depth2Image](#depth2image) | ✅ | ❌ | |
| [MultiDiffusion 全景](#multidiffusion-panorama) | ✅ | ❌ | |
| [DreamBooth](#dreambooth) | ❌ | ✅ | |
| [文本反转](#textual-inversion) | ❌ | ✅ | |
| [ControlNet](#controlnet) | ✅ | ❌ | ControlNet 可以针对自定义条件进行训练/微调。 |
| [提示词加权](#prompt-weighting) | ✅ | ❌ | |
| [自定义扩散](#custom-diffusion) | ❌ | ✅ | |
| [DiffEdit](#diffedit) | ✅ | ❌ | |
| [T2I-Adapter](#t2i-adapter) | ✅ | ❌ | |
| [Fabric](#fabric) | ✅ | ❌ | |
## InstructPix2Pix
[论文](https://huggingface.co/papers/2211.09800)
[InstructPix2Pix](../api/pipelines/pix2pix) 基于 Stable Diffusion 进行微调,以支持对输入图像进行编辑。它接收一张图像和一段描述编辑操作的提示词作为输入,并输出编辑后的图像。InstructPix2Pix 经过专门训练,能够很好地配合类似 [InstructGPT](https://openai.com/blog/instruction-following/) 风格的提示词使用。
## Attend and Excite
[论文](https://huggingface.co/papers/2301.13826)
Attend and Excite 能够确保提示词中的主体在最终图像中得到忠实呈现。
输入是一组 token 索引,对应于提示词中需要出现在图像里的主体。在去噪过程中,每个 token 索引都保证对图像中至少一个 patch 具有最低注意力阈值。在去噪过程中,中间潜变量会被迭代优化,以增强最被忽视的主体 token 的注意力,直到所有主体 token 的注意力都达到阈值。
与 Pix2Pix Zero 类似,Attend and Excite 的流程中也包含一个小型优化循环(保持预训练权重不变),因此可能需要比常规的 [StableDiffusionPipeline](../api/pipelines/stable_diffusion/text2img) 更多的内存。
## 语义引导(SEGA)
[论文](https://huggingface.co/papers/2301.12247)
SEGA 允许从图像中添加或移除一个或多个概念,并且可以控制概念的强度。例如,可以使用“微笑”概念来逐步增加或减少肖像中的微笑程度。
与分类器自由引导通过空提示输入提供引导类似,SEGA 通过概念提示提供引导。可以同时应用多个此类概念提示。根据引导是正向还是负向应用,每个概念提示可以添加或移除其对应的概念。
与 Pix2Pix Zero 或 Attend and Excite 不同,SEGA 直接作用于扩散过程,而非执行任何显式的基于梯度的优化。
## 自注意力引导(SAG)
[论文](https://huggingface.co/papers/2210.00939)
Self-attention Guidance 提升了图像的整体质量。
SAG 提供了从未经高频细节条件化的预测到完全条件化图像的引导。高频细节是从 UNet 自注意力图中提取出来的。
## Depth2Image
[项目](https://huggingface.co/stabilityai/stable-diffusion-2-depth)
[Depth2Image](../api/pipelines/stable_diffusion/depth2img) 基于 Stable Diffusion 进行微调,以更好地保留文本引导图像变化中的语义信息。
它以原始图像的独眼深度估计作为条件。
## MultiDiffusion 全景
[论文](https://huggingface.co/papers/2302.08113)
MultiDiffusion Panorama 在预训练扩散模型上定义了一种新的生成过程。该过程将多种扩散生成方法结合在一起,可直接用于生成高质量且多样化的图像。生成结果遵循用户提供的控制条件,例如期望的宽高比(如全景图)以及空间引导信号,范围从紧密的分割掩码到边界框。MultiDiffusion Panorama 允许您在任意宽高比(例如全景图)下生成高质量图像。
## 微调您自己的模型
除了预训练模型,Diffusers 还提供了训练脚本,用于在用户提供的数据上对模型进行微调。
## DreamBooth
[项目](https://dreambooth.github.io/)
[DreamBooth](../training/dreambooth) 通过微调模型来使其学习新的主题。例如,可以使用几张某人的照片来生成该人物在不同风格下的图像。
## 文本反转
[论文](https://huggingface.co/papers/2208.01618)
[Textual Inversion](../training/text_inversion) 通过微调模型来使其学习一个新概念。例如,可以使用几张特定艺术风格的图片来生成该风格下的图像。
## ControlNet
[论文](https://huggingface.co/papers/2302.05543)
[ControlNet](../api/pipelines/controlnet) 是一个辅助网络,用于添加额外的条件。共有 8 个标准的预训练 ControlNet,分别基于不同的条件进行训练,例如边缘检测、涂鸦、深度图和语义分割。
## 提示词加权
[提示词加权](../using-diffusers/weighted_prompts)是一种简单技术,用于对文本输入的某些部分赋予更高的注意力权重。
## Custom Diffusion
[论文](https://huggingface.co/papers/2212.04488)
[Custom Diffusion](../training/custom_diffusion) 仅对预训练文本到图像扩散模型的交叉注意力图进行微调。它还支持额外执行 Textual Inversion。其设计本身就支持多概念训练。与 DreamBooth 和 Textual Inversion 类似,Custom Diffusion 也用于让预训练的文本到图像扩散模型学习新概念,从而生成包含目标概念的输出。
## DiffEdit
[论文](https://huggingface.co/papers/2210.11427)
DiffEdit 允许根据输入提示对输入图像进行语义编辑,同时尽可能保留原始输入图像。
## T2I-Adapter
[论文](https://huggingface.co/papers/2302.08453)
[T2I-Adapter](../api/pipelines/stable_diffusion/adapter) 是一个辅助网络,用于添加额外的条件。共有 8 个标准的预训练适配器,分别在不同的条件上进行训练,例如边缘检测、草图、深度图和语义分割。
## Fabric
[论文](https://huggingface.co/papers/2307.10159)
[Fabric](https://github.com/huggingface/diffusers/tree/442017ccc877279bcf24fbe92f92d3d0def191b6/examples/community#stable-diffusion-fabric-pipeline) 是一种无需训练的方法,适用于多种流行的扩散模型。它利用最常用架构中存在的自注意力层,使扩散过程能够以一组反馈图像作为条件。

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.