在 Stable Diffusion 中使用 ControlNet

ControlNet 是一个神经网络,可以通过添加额外的条件来改进 Stable Diffusion 的图像生成。这使得用户能够更精确地控制生成的图像。与尝试不同的提示词不同,ControlNet 模型允许用户仅用一个提示词生成一致的图像。

在本篇博文中,您将学习如何使用 ControlNet 精确控制 Stable Diffusion 生成的图像。具体来说,我们将介绍

  • 什么是 ControlNet,以及它是如何工作的
  • 如何在 Hugging Face Spaces 中使用 ControlNet
  • 在 Stable Diffusion WebUI 中使用 ControlNet

使用我的书 《Mastering Digital Art with Stable Diffusion》启动您的项目。它提供了带有工作代码自学教程

让我们开始吧。

在 Stable Diffusion 中使用 ControlNet
照片由 Nadine Shaabana 拍摄。部分权利保留。

概述

本帖共分为四个部分:

  • 什么是 ControlNet?
  • Hugging Face Spaces 中的 ControlNet
  • 涂鸦交互
  • Stable Diffusion Web UI 中的 ControlNet

什么是 ControlNet?

ControlNet 是一种神经网络架构,可用于控制扩散模型。除了通常用于创建输出图像的提示词外,它还通过将输入图像作为附加约束来向扩散模型添加额外的条件,以指导扩散过程。

有许多类型的条件输入(如 Canny 边缘、用户素描、人物姿态、深度等),可以使扩散模型更精确地控制图像生成。

ControlNet 控制扩散模型的一些示例

  • 通过提供特定的人物姿势,可以生成模仿相同姿势的图像。
  • 使输出遵循另一张图像的风格。
  • 将涂鸦变成高质量的图像。
  • 使用参考图像生成相似的图像。
  • 图像的局部重绘。

ControlNet 修改扩散过程的框图。图来自 Zhang 等人(2023)

ControlNet 通过将原始扩散模型的权重复制到两个集合中来工作

  • 一个“锁定”的集合,用于保留原始模型
  • 一个“可训练”的集合,用于学习新的条件。

ControlNet 模型本质上在潜在空间中产生一个差异向量,该向量修改了扩散模型原本会产生的图像。在数学公式中,如果原始模型使用函数 $y=F(x;\Theta)$ 从提示词 $x$ 生成输出图像 $y$,那么在 ControlNet 的情况下,公式为:

$$y_c = F(x;\Theta) + Z(F(x+Z(c;\Theta_{z1}); \Theta_c); \Theta_{z2})$$

其中函数 $Z(\cdot;\Theta_z)$ 是零卷积层,参数 $\Theta_c, \Theta_{z1}, \Theta_{z2}$ 来自 ControlNet 模型。零卷积层的权重和偏置初始化为零,因此它们最初不会引起失真。随着训练的进行,这些层会学习满足条件约束。这种结构允许在小型机器上训练 ControlNet。请注意,使用了相同的扩散架构(例如 Stable Diffusion 1.x)两次,但使用了不同的模型参数 $\Theta$ 和 $\Theta_c$。现在,您需要提供两个输入 $x$ 和 $c$ 来创建输出 $y$。

将 ControlNet 和原始扩散模型分开运行的设计允许在小型数据集上进行微调,而不会破坏原始扩散模型。它还允许将同一个 ControlNet 与不同的扩散模型一起使用,只要架构兼容即可。ControlNet 的模块化和快速适应性使其成为一种通用的方法,可以在无需大量重新训练的情况下更精确地控制图像生成。

Hugging Face Spaces 中的 ControlNet

让我们看看 ControlNet 如何对扩散模型产生神奇的效果。在本节中,我们将使用 Hugging Face Spaces 上提供的在线 ControlNet 演示来生成使用 ControlNet Canny 模型的图像。

我们将上传来自 Pexels.com 的 Yogendra Singh 的照片到 ControlNet Spaces,并添加一个简单的提示词。我们不生成男孩,而是生成一个在俱乐部跳舞的女孩的图像。让我们使用“Canny”选项卡。将提示词设置为

一个在俱乐部跳舞的女孩

点击运行,您将看到如下输出

在 Hugging Face Space 上运行 ControlNet

这太神奇了!“Canny”是一种用于检测边缘的图像处理算法。因此,您提供上传图像的边缘作为轮廓草图。然后,将其作为附加输入 $c$ 提供给 ControlNet,与您提供的文本提示词 $x$ 一起,您就得到了输出图像 $y$。本质上,您可以使用原始图像的 Canny 边缘生成相似姿势的图像。

让我们来看另一个例子。我们将上传 Gleb Krasnoborov 的照片,并应用一个新的提示词,该提示词改变了拳击手的背景、效果和种族为亚洲人。我们使用的提示词是

一个在东京街头打沙袋的男人

这是输出结果

使用 ControlNet 中 Canny 模型的另一个示例

再次,结果非常出色。我们生成了一张拳击手在东京街头打沙袋的相似姿势的图像。

涂鸦交互

ControlNet 的架构可以接受多种不同类型的输入。使用 Canny 边缘作为轮廓只是 ControlNet 的一种模型。还有许多其他模型,每个模型都针对不同的图像扩散条件进行了训练。

在同一个 Hugging Face Spaces 页面上,提供了不同版本的 ControlNet,可以通过顶部的选项卡访问。让我们来看一个使用 Scribbles 模型的例子。要使用 Scribbles 生成图像,只需转到 Scribble Interactive 选项卡,用鼠标绘制一个涂鸦,然后写一个简单的提示词来生成图像,例如

河边的房子

如下所示

使用 Scribble ControlNet:绘制房屋并提供文本提示

然后,通过设置其他参数并按下“Run”按钮,您可能会获得如下输出

Scribble ControlNet 的输出

生成的图像看起来不错,但可以更好。您可以尝试使用更详细的涂鸦和文本提示词来获得改进的结果。

使用涂鸦和文本提示词是生成图像的一种简单方式,特别是当您想不出想要创建图像的精确文本描述时。下面是创建热气球图片的另一个例子。

使用涂鸦创建热气球图片。

Stable Diffusion Web UI 中的 ControlNet

正如您在之前的博文中了解了如何使用 Stable Diffusion Web UI 一样,您可以预期 ControlNet 也可以在 Web UI 上使用。它是一个扩展。如果您还没有安装它,您需要启动 Stable Diffusion Web UI。然后,转到 Extensions 选项卡,点击“Install from URL”,然后输入 ControlNet 存储库的链接:https://github.com/Mikubill/sd-webui-controlnet 进行安装。

在 Stable Diffusion Web UI 中安装 ControlNet 扩展

您安装的扩展只是代码。在使用 Canny ControlNet 版本之前,例如,您必须下载并设置 Canny 模型。

  1. 转到 https://hugging-face.cn/lllyasviel/ControlNet-v1-1/tree/main
  2. 下载 control_v11p_sd15_canny.pth
  3. 将模型文件放在 SD WebUI 目录下的 stable-diffusion-webui/extensions/sd-webui-controlnet/modelsstable-diffusion-webui/models/ControlNet

注意:您可以使用 git clone 命令从上述存储库下载所有模型(请注意每个模型的大小为几个 GB)。此外,此存储库还收集了一些额外的 ControlNet 模型:https://hugging-face.cn/lllyasviel/sd_control_collection

现在,您已准备好使用该模型。

让我们用 Canny ControlNet 来试试。您转到“txt2img”选项卡,向下滚动找到 ControNet 部分并打开它。然后,您按照以下步骤操作

  1. 将控制类型更改为 Canny。

    在 Web UI 的 ControlNet 框中选择“Canny”。

  2. 上传参考图像。

    在 Web UI 的 ControlNet 小部件中上传图像

  3. 在 txt2img 选项卡上的其他部分进行操作:写入正面提示词、负面提示词,以及更改其他高级设置。例如,

    正面提示词:“detailed, masterpiece, best quality, Astounding, Enchanting, Striking, man, natural light, beach, beach background, sunny, jungle, plants in background, beach background, beach, tropical beach, water,  clear skin, perfect light, perfect shadows”

    负面提示词:“worst quality, low quality, lowres, monochrome, greyscale, multiple views, comic, sketch, bad anatomy, deformed, disfigured, watermark, multiple_views, mutation hands, watermark”

    以及生成参数

    • 采样步数 30
    • 采样器: DDIM
    • CFG 尺度 7

输出可能是

使用 Web UI 中的 ControlNet 进行图像生成的输出

正如您所见,我们获得了高质量的相似图像。我们可以通过使用不同的 ControlNet 模型和应用各种提示词工程技术来改进照片,但这是我们目前最好的结果。

这是使用 Canny 版本的 ControlNet 生成的完整图像。

使用 ControlNet 和图像扩散模型生成的图像

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

总结

在本篇博文中,我们了解了 ControlNet、它的工作原理以及如何使用它来生成用户选择的精确控制图像。具体来说,我们涵盖了

  • Hugging Face 上的 ControlNet 在线演示,用于使用各种参考图像生成图像。
  • 不同的 ControlNet 版本,并使用涂鸦生成了图像。
  • 在 Stable Diffusion WebUI 上设置 ControlNet 并使用它生成高质量的拳击手图像。

立即开始用 Stable Diffusion 精通数字艺术!

Mastering Digital Art with Stable Diffusion

学习如何让 Stable Diffusion 为您服务

……通过学习图像生成过程中的一些关键要素

在我的新电子书中探索如何实现
使用 Stable Diffusion 精通数字艺术

这本书提供了自学教程,包含所有 Python工作代码,指导您从新手成长为图像生成领域的专家。它教您如何设置 Stable Diffusion、微调模型、自动化工作流程、调整关键参数等等……所有这些都将帮助您创建令人惊叹的数字艺术。

通过实践练习,开启您的数字艺术之旅


查看内容

暂无评论。

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。