什么是控制网?
ControlNet 是一种改进的稳定扩散模型。稳定扩散模型的最基本形式是文本到图像。它使用文本提示作为引导图像生成的条件。ControlNet 增加了一个条件。让我向您展示两个 ControlNet 示例:(1) 边缘检测和 (2) 人体姿势检测。
边缘检测
在下面所示的工作流程中,ControlNet 获取额外的输入图像并使用 Canny 边缘检测器检测其轮廓。检测到的边缘被保存为控制图,然后作为文本提示之外的额外条件输入到 ControlNet 模型中。
具有 Canny 边缘调节的稳定扩散控制网络。
从输入图像中提取特定信息(在本例中为边缘)的过程称为注释(在研究文章中)或预处理(在 ControlNet 扩展中)。
人体姿态检测
您可能已经猜到,边缘检测并不是预处理图像的唯一方法。Openpose 是一种快速关键点检测模型,可以提取人体姿势,如手、腿和头部的位置。请参见下面的示例。
使用 Openpose 进行人体姿势检测注释的输入图像。
下面是使用 OpenPose 的 ControlNet 工作流。使用 OpenPose 从输入图像中提取关键点,并将其保存为包含关键点位置的控制图。然后将其作为额外条件与文本提示一起提供给 Stable Diffusion。图像是根据这两个条件生成的。
使用Canny边缘检测和Openpose有什么区别?Canny 边缘检测器提取主题和背景的边缘。它倾向于更忠实地翻译场景。你可以看到跳舞的男人变成了女人,但轮廓和发型都很相似。
OpenPose 仅检测关键点,因此图像生成更加自由,但遵循原始姿势。在上面的示例中,它生成了一个左脚指向侧面的女人跳起来,这与原始图像和 Canny 边缘示例中的图像不同。原因是 OpenPose 的关键点检测没有指定脚的方向。
提供 ControlNet 型号
现在让我们看看 ControlNet 模型可以做什么。当我解释如何使用 ControlNet 扩展时,您将确切地了解它们的作用。
OpenPose 检测器
OpenPose 检测人体关键点,例如头部、肩膀、手等的位置。它对复制人体姿势很有用,但对其他细节(例如服装、发型和背景)没有帮助。
OpenPose ControlNet 模型。
Canny边缘检测器
Canny 边缘检测器是一种通用的老式边缘检测器。它提取图像的轮廓。它对于保留原始图像的构图很有用。
Canny 边缘检测(图片由 ControlNet 提供)
直线检测器
ControlNet 可与 M-LSD(移动线段检测)一起使用,这是一种快速直线检测器。它对于提取具有直边的轮廓非常有用,例如室内设计、建筑物、街景、相框和纸张边缘。
直线检测(图片由 ControlNet 提供)
HED 边缘检测器
HED(整体嵌套边缘检测)是一种边缘检测器,擅长像真人一样生成轮廓。根据 ControlNet 的作者,HED 适用于重新着色和重新设计图像样式。
直线检测(图片由 ControlNet 提供)
涂鸦
Controlnet 还可以将您涂鸦的东西变成图像!
ControlNet 涂鸦(图片由 ControlNet 提供)
其他型号
其他型号是
- Human Pose——使用 OpenPose 检测关键点。
- 语义分割——根据从输入图像中提取的分割图生成图像。
- 深度图——与稳定扩散 v2 中的深度到图像一样,ControlNet 可以从输入图像中推断出深度图。ControlNet 的深度图比 Stable Diffusion v2 的分辨率更高。
- 法线贴图 – 法线贴图指定对象表面的 3D 方向。这是在由多边形构成的低分辨率表面上伪造纹理的常用方法。当然,您所拥有的只是一个 2D 输入图像。法线贴图是从深度贴图计算出来的。
安装稳定的 Diffusion ControlNet
让我们来看看如何在 AUTOMATIC1111 中安装 ControlNet,AUTOMATIC1111 是一种流行且功能齐全(且免费!)的 Stable Diffusion GUI。我将使用这个扩展,它是事实上的标准,来启用 ControlNet。
如果您已经安装了 ControlNet,则可以跳至下一节以了解如何使用它。
在 Google Colab 中安装 ControlNet
在我们的快速入门指南中,通过一键式稳定扩散 Colab 笔记本可以轻松使用 ControlNet。
在 Colab 笔记本的扩展部分,选中 ControlNet。
按播放按钮启动 AUTOMATIC1111。就是这样!
在 Windows PC 或 Mac 上安装 ControlNet
您可以在 Windows PC 或 Mac 上将 ControlNet 与 AUTOMATIC1111 结合使用。如果您尚未安装 AUTOMATIC1111,请按照这些文章中的说明进行安装。
如果您已经安装了 AUTOMATIC1111,请确保您的副本是最新的。
安装 ControlNet 扩展 (Windows/Mac)
要安装 ControlNet 扩展,请转至扩展选项卡并选择可用子选项卡。按加载自按钮。
在新出现的列表中,找到扩展名为 sd-webui-controlnet 的行。按安装。
重新启动 AUTOMATIC1111 webui。
如果扩展安装成功,您将在 txt2img 选项卡中看到一个名为 ControlNet 的新可折叠部分。它应该位于脚本下拉菜单的正上方。
这表示扩展安装成功。
安装 ControlNet 模型 (Windows/Mac)
ControlNet 的作者发布了一些预训练的 ControlNet 模型。他们可以在这个页面上找到。
webui 社区托管 ControlNet 模型的半精度版本,其文件大小较小。它们下载速度更快,存储更容易,为什么不呢?你可以在这里找到它们。
要使用这些模型,请下载模型文件并将它们放在扩展的模型文件夹中。模型文件夹的路径是
stable-diffusion-webui/extensions/sd-webui-controlnet/models
您不需要下载所有模型。如果这是您第一次使用 ControlNet,您可以直接下载 openpose 模型。
在 AUTOMATIC1111 中使用 ControlNet
您将在本节中学习使用扩展的一个简单示例。稍后您将看到每个设置的详细说明。
您应该安装 ControlNet 扩展以遵循本节。您可以通过查看下面的 ControlNet 部分进行验证。
按右侧的插入符号以展开 ControlNet 面板。它显示了控制旋钮的完整部分和图像上传画布。
我将使用下图向您展示如何使用 ControlNet。您可以使用下载按钮下载图像以按照教程进行操作。
文本到图像设置
ControlNet 需要与稳定扩散模型一起使用。在 Stable Diffusion 检查点下拉菜单中,选择要与 ControlNet 一起使用的模型。选择v1-5-pruned-emaonly.ckpt
使用 v1.5 基本模型。
在 txt2image 选项卡中,编写提示和可选的否定提示以供 ControlNet 使用。我将使用下面的提示。
迅速的:
全身,年轻女性,头发突出,在餐厅外跳舞,棕色眼睛,穿着牛仔裤
否定提示:
毁容的,丑陋的,坏的,不成熟的
设置图像生成的图像大小。我将为我的演示图像使用宽度 512 和高度 776。请注意,图像大小是在 txt2img 部分中设置的,而不是在 ControlNet 部分中设置的。
GUI 应该如下所示。
ControlNet 设置
现在我将讨论您需要在 ControlNet 面板中执行的操作。
首先将图像上传到图像画布。
选中启用复选框。
您将需要选择预处理器和模型。Preprocessor只是前面提到的annotator的不同名称,比如OpenPose keypoint detector。让我们选择 openpose 作为预处理器。
所选的 ControlNet 模型必须与预处理器一致。对于 OpenPose,您应该选择 control_openpose-fp16 作为模型。
ControlNet 面板应如下所示。
就这样。现在按生成开始使用 ControlNet 生成图像。
您应该看到生成的图像遵循输入图像的姿势。最后一张图像直接来自预处理步骤。在这种情况下,它是检测到的关键点。
这是使用 ControlNet 的基础知识!完成后,取消选中启用复选框以禁用 ControlNet 扩展。
所有 ControlNet 设置说明
您会在 ControlNet 扩展中看到很多设置!当您第一次使用它时可能有点吓人,但让我们一个一个地了解它们。
这将是一次深潜。休息一下,如果需要的话去洗手间……
输入控件
图像画布:您可以将输入图像拖放到此处。您还可以单击画布并使用文件浏览器选择一个文件。输入图像将由预处理器下拉菜单中选定的预处理器进行处理。将创建一个控制图。
专业提示:使用 Ctrl-V (Windows) 或 Cmd-V (Mac) 将图像粘贴到 ControlNet 图像画布。
相机图标:使用设备的相机拍照并将其用作输入图像。您需要授予浏览器访问相机的权限。
启用:是否启用ControlNet。
反转输入颜色:交换黑色和白色。例如,它可以在您上传涂鸦时使用。ControlNet 需要黑色背景和白色涂鸦。如果您使用白色背景的外部软件创建涂鸦,则必须使用此选项。如果您使用 ControlNet 的界面创建涂鸦,则不需要使用此选项。
RGB to BGR:这是改变上传图像的颜色通道顺序。或者上传法线贴图坐标的顺序。如果您上传图像并使用预处理,则无需选中此框。
低 VRAM:适用于 VRAM 低于 8GB 的 GPU。这是一项实验性功能。检查您是否用完了 GPU 内存,或者想要增加处理的图像数量。
猜测模式:也称为非提示模式。图像生成可以完全不受文本提示的引导。它强制 ControlNet 编码器遵循输入控制图(如深度、边缘等),即使没有提示也是如此。使用此模式时使用更高的步进,例如 50。您通常不选中此框。
预处理器和模型
Preprocessor:预处理器(研究文章中称为annotator),用于对输入图像进行预处理,例如检测边缘、深度和法线贴图。None 使用输入图像作为控制图。
模型:要使用的 ControlNet 模型。如果您选择了预处理器,您通常会选择相应的模型。ControlNet 模型与在 AUTOMATIC1111 GUI 顶部选择的稳定扩散模型一起使用。
重量和引导强度
我将使用下图来说明重量和引导强度的影响。这是一个女孩坐下的图像。
但在提示中,我会要求生成一个站着的女人。
全身,年轻女性,头发上的亮点,站在餐厅外,蓝眼睛,穿着裙子,侧光
权重:相对于提示给予控制图的强调程度。它类似于提示中的关键字权重,但适用于控制图。
以下图像是使用 ControlNet OpenPose 预处理器和 OpenPose 模型生成的。
重量 1
重量 0.5
重量 0.3
重量 0.1
如您所见,Controlnet 权重控制相对于提示遵循控制映射的程度。权重越低,ControlNet 对图像遵循控制图的要求就越低。
指导强度:这是应用 ControlNet 的步骤数。它类似于图像到图像的去噪强度。如果指导强度为 1,则 ControlNet 应用于 100% 的采样步骤。如果引导强度为 0.7 并且您正在执行 50 个步骤,则 ControlNet 将应用于前 70% 的采样步骤,即前 35 个步骤。
以下生成的引导强度范围为 0.1 到 1,权重保持为 1。
指导强度1
引导强度 0.3
引导强度 0.2
引导强度 0.1
由于初始步骤设置了全局组成(稳定扩散在每个步骤中去除了最大量的噪声,并且它从潜在空间中的随机张量开始),即使您仅将 ControlNet 应用于少至 20% 的部分,姿势也会被设置第一个采样步骤。需要将引导强度设置为相当低才能产生效果。
调整模式
当输入图像或控制图的大小与要生成的图像的大小不同时,调整大小模式控制要执行的操作。如果它们具有相同的纵横比,则您无需担心这些选项。
我将通过设置文本到图像生成横向图像来演示调整大小模式的效果,而输入图像/控制图是纵向图像。
信封(外部适合):使图像画布适合控制图。裁剪控制图,使其与画布大小相同。
因为控制图在顶部和底部被裁剪了,所以我们的女孩也是如此。
控制图
生成的图像
Outer Fit 使图像画布适合并裁剪控制图。
缩放以适合:使整个控制图适合图像画布。使用空值扩展控制图,使其与图像画布大小相同。
与原始输入图像相比,侧面有更多空间。
控制图
生成的图像
Scale to Fit 使整个控制图适合图像画布,并扩展控制图。
Just Resize:独立缩放控制图的宽度和高度以适合图像画布。这将改变控制图的纵横比。
女孩现在需要身体前倾,这样她仍然在画布内。您可以使用此模式创建一些有趣的效果。
控制图
生成的图像
只需调整控制图的大小以适应图像画布。
涂鸦画布设置
如果您使用 ControlNet GUI 创建涂鸦,您只需要担心这些设置。当您上传输入图像并使用预处理器时,这些设置无效。
画布宽度和画布高度是您按下创建空白画布按钮时创建的空白画布的宽度和高度。
上下箭头切换高度和宽度。当您感到困惑并根据宽度调整高度时很有用(就像我经常做的那样……)。
预览注释
ControlNet 扩展将在每一轮图像生成后向您显示控制图的副本。但有时您只想查看控制图并试验参数。
预览注释器结果:根据预处理器设置生成控制图。控制图将显示在输入图像旁边。
隐藏注释器结果:隐藏控制图。
预处理器
我将再次使用相同的输入图像来演示使用不同预处理器生成的控制图。
精明
Canny 是一个老式的边缘检测器。它在提取曲线和直线方面做得很好。但它也可能容易受到噪音的影响。
Canny 边缘检测器生成的控制图。
结果很不错。背景虚化很好地再现。
深度
深度图可用于传达图像中对象的距离。白色表示更近,黑色表示更远。该函数类似于 Stable Diffusion v2 中的 depth-to-image,并使用相同的 MiDaS 深度估计器。
与模型一起使用control_depth
。
深度控制图。
少女的身形保存完好。
Midas 分辨率滑块:更改控制图的宽度。它是一种控制控制图相对于输入图像大小的分辨率的方法。
深度 LeRes
LeRes 是一种更新的深度估计模型,设计用于从单个图像重建 3D 场景。与 MiDaS 相比,LeRes 通常可以恢复更多细节,并且可以使用更多控制参数来调整控制图。
与模型一起使用control_depth
。
深度 LeRes
这是具有太多细节的深度图失败的那些时间之一。查看腿部并与上面的深度图进行比较。
高能
HED(整体嵌套边缘检测)是一种边缘检测 AI 模型,擅长像人类一样从图像中生成轮廓。它在功能上类似于 Canny,但噪音较小。
与模型一起使用control_hed
。
高能
不完全确定为什么,但 HED 模型会产生这样的人工色素。也许这是一个错误。
万能数据
M-LSD(Mobile Line Segment Detection)是一种快速直线检测器。它对于提取具有直边的轮廓非常有用,例如室内设计、建筑物、街景、相框和纸张边缘。
与模型一起使用control_mlsd
。
但是,不要将 mlsd 用于人像或带有曲线的主题。它将无法提取它们。
mlsd 无法提取女孩的轮廓。
正如 mlsd 控制图所预期的那样,女孩的轮廓没有很好地传递。
法线贴图
法线贴图指定像素所在表面的法向量方向。它通常用于伪造 3D 模型中的纹理或深度。每个像素的 RGB 值现在存储矢量值,而不是颜色。法线是一个数学概念,使用垂直于表面的矢量来表示其方向。
当然,没有 3D 模型。ControlNet 仅获取 2D 图像。法线图是根据深度图估计的。
与模型一起使用control_normal
。
正常控制图。
输入图像的 3D 方向被忠实地转换为带有法线贴图的新图像。
打开姿势
OpenPose 是一款实时人体关键点检测软件。此选项用于提取人体姿势而不复制其他细节,例如发型、服装和背景。
与模型一起使用control_openpose
。
OpenPose 控制图。
因为除了具有特定姿势的主体之外,对于如何生成图像没有任何限制,所以模型可以自由地完成它的工作并生成看起来自然的图像:
皮迪内
pidinet(像素差异网络)检测曲线和直线边缘。它的结果类似于 HED,但通常会产生更清晰的线条和更少的细节。
与模型一起使用control_hed
。
涂
Scribble 用于预处理用户绘制的涂鸦。此预处理器不应用于逼真的图像。
与模型一起使用control_scribble
。
假涂鸦
Fake Scribble 从输入图像中生成类似涂鸦的轮廓。
与模型一起使用control_scribble
。
假涂鸦
看到腿上的神器。
分割
分割图根据有根据的猜测为不同的对象分配不同的颜色。当然它可能是错误的,因为这对计算机来说是一个相当困难的问题。
与模型一起使用control_seg
。
分割控制图。
图像生成也将遵循基于分割图的区域。
好的,现在(希望)您知道所有设置。让我们探索一些使用 ControlNet 的想法。
使用 ControlNet 的一些想法
复制人体姿势
也许 ControlNet 最常见的应用是复制人体姿势。这是因为通常很难控制姿势……直到现在!输入图像可以是 Stable Diffusion 生成的图像,也可以是从真实相机拍摄的图像。
OpenPose模型
要使用 ControlNet 传输人体姿势,请按照说明在 AUTOMATIC1111 中启用 ControlNet。使用以下设置。
预处理器:openpose
型号:control-openpose-fp16
确保您已选中启用。
这里有一些例子。
示例 1:从图像复制姿势
作为一个基本示例,让我们复制下图一位欣赏树叶的女性的姿势。
输入图像
使用各种模型和提示,您可以显着改变内容但保持姿势不变。
梦幻般的逼真模型
任何v3模型
梦想塑造者模型
任何v3模型
示例 2:重新混合电影场景
您可以将低俗小说中标志性的舞蹈场景重现为公园里的一些瑜伽练习。
这将 ControlNet 与 DreamShaper 模型结合使用。
提示:女性在公园外做瑜伽的照片。负面提示:毁容、丑陋、不良、不成熟
这是使用相同的提示,但使用 Inkpunk Diffusion 模型。(您需要在提示中添加激活关键字nvinkpunk )
与 inkpunk 扩散模型相同的提示。
用于复制姿势的 ControlNet 模型比较
许多 ControlNet 模型都可以很好地复制人体姿势,但各有优缺点。我们以贝多芬的画作为例,用不同的ControlNet模型进行改造。
输入图像
我将对 DreamShaper 模型使用以下提示。
优雅、势利、富有的 Aerith Gainsborough 惊奇和期待地注视着你。16K 分辨率的超精细绘画和史诗般的视觉效果。史诗般超现实的美丽形象。惊人的效果,就其视觉保真度而言,图像看起来异常清晰,绝对出色。生动的清晰度。极端主义者。彩虹色的。令人心碎。超级漂亮的铅笔阴影。漂亮的脸蛋。超高清。处理两次。
精明的边缘
深度
高能
迷幻剂
法线贴图
打开姿势
HED 模型最忠实地复制了原始图像,包括微小的细节。Canny Edge、深度和法线贴图做得不错,但有更多变化。正如预期的那样,OpenPose 复制姿势,但允许 DreamShaper 模型完成其余工作,包括发型、面部和服装。m-LSD 旨在检测直线并导致此处完全失败(复制姿势)。
使用 ControlNet 风格化图像
下面是v1.5的模型但是各种提示实现不同的风格。使用了具有各种预处理功能的 ControlNet。最好试验一下,看看哪个效果最好。
像素艺术,精明
3D 渲染,精明
黑与白,HED
水彩,普通
在提示中使用关键字通过 ControlNet 对图像进行风格化。
您还可以使用模型来风格化图像。下面是使用 Anythingv3、DreamShaper 和 OpenJourney 模型使用提示“贝多芬的绘画”生成的。
任何v3
梦想塑造者
开放旅程
墨水朋克扩散
使用 Magic Pose 控制姿势
有时您可能无法找到具有您想要的确切姿势的图像。您可以使用 Magic Poser(信用)等软件工具创建自定义姿势。
第 1 步:转到 Magic Poser 网站。
第二步:移动模型关键点,自定义姿势。
第 3 步:按预览。截取模型的屏幕截图。你应该得到如下图。
来自 Magic Poser 的人体姿势。
第 4 步:使用 OpenPose ControlNet 模型。选择您选择的模型和提示以生成图像。
下面是使用 1.5 模型和 DreamShaper 模型生成的一些图像。在所有情况下都很好地复制了姿势。
室内设计理念
您可以使用 Stable Diffusion ControlNet 的直线检测器 M-LSD 模型来生成室内设计创意。以下是 ControlNet 设置。
您可以从任何室内设计照片开始。让我们以下面的一个为例。
用于室内设计的输入图像。
迅速的:
获奖客厅
型号:稳定扩散v1.5
下面是生成的一些设计思路。
或者,您可以使用深度模型。它将强调保留深度信息而不是直线。
设置:
生成的图像:
Stable Diffusion 深度模型与 ControlNet 的区别
Stable Diffusion 的创造者 Stability AI 发布了一个深度到图像的模型。它与 ControlNet 有很多相似之处,但也有重要区别。
先说说有什么相似之处。
- 它们都是稳定扩散模型……
- 他们都使用两个条件(预处理图像和文本提示)。
- 他们都使用 MiDAS 来估计深度图。
不同之处在于
- Depth-to-image 模型是 v2 模型。ControlNet 可用于任何 v1 或 v2 模型。这一点很重要,因为众所周知 v2 模型很难使用。人们很难生成好的图像。ControlNet 可以使用任何 v1 模型这一事实不仅打开了对 v1.5 基本模型的深度调节,而且还打开了社区发布的数千个特殊模型。
- ControlNet 更通用。除了深度,它还可以用边缘检测、姿势检测等条件。
- ControlNet 的深度图比图像深度图具有更高的分辨率。
ControlNet 如何工作?
如果不解释 ControlNet 在幕后的工作原理,本教程将是不完整的。
ControlNet 的工作原理是将可训练的网络模块附加到稳定扩散模型的 U-Net(噪声预测器)的各个部分。Stable Diffusion 模型的权重是锁定的,在训练过程中它们是不变的。在训练期间仅修改附加模块。
研究论文中的模型图很好地总结了这一点。最初,附加网络模块的权重全部为零,使新模型能够利用经过训练和锁定的模型。
在训练期间,每个训练图像都会提供两个条件。(1) 文本提示,以及 (2) 注释,例如 OpenPose 关键点或 Canny 边。这样,ControlNet 模型就可以学习根据这两个输入生成图像。
每种注释方法都是独立训练的。
更多阅读
- 使用 Magic Poser 和 OpenPose 生成的一些图像。
- 研究文章:Adding Conditional Control to Text-to-Image Diffusion Models(2023 年 2 月 10 日)
- ControlNet Github 页面