本文将以 Stable Diffusion WebUI 为例介绍 ControlNet 的安装和使用方法。
安装
ControlNet 在 Stable Diffusion WebUI 中是以插件的形式存在的,大部分 SD WebUI的整合包或者镜像都已经安装了这个插件,如果你的还没有安装,需要先安装它。已经安装好的跳过这一小节即可。
方法一
打开 Stable Dissusion WebUI前端页面,进入“扩展插件”-“从网址安装”,在“扩展插件的git仓库网址”中输入:https://github.com/Mikubill/sd-webui-controlnet,然后点击“安装”,待安装完成后重启 SD WebUI。各种 ControlNet 模型和预处理器会在使用时自动下载安装。
方法二
如果访问github不畅,也可以通过别的方式下载插件包和对应的模型,然后自己部署到 stable-diffusion-webui
中。(注意:文章最后有我整理的插件包和各种模型的下载地址可自行扫描获取)
具体部署路径如下:
-
ControlNet插件:/extensions
-
ControlNet模型:/extensions/sd-webui-controlnet/models
-
ControlNet预处理器:/extensions/sd-webui-controlnet/annotator/downloads
注意需替换 为你自己的SD WebUI部署路径。
安装成功后,在“文生图”、“图生图”界面的下方会出现 ControlNet 区域,点击右侧的展开按钮,下边有4个ControlNet
单元,也就是我们最多可以同时使用4个 ControlNet 来控制出图的效果,一般情况都能满足。需要注意,同时使用的模型越多,生成图片的速度越慢。
如果你的 ControlNet
只有1个单元,或者你想修改这个单元的数量,可以到“设置”中调整,如下图所示,找到“多重控制网:最大模型数量”,更改之后别忘了重启。
使用
ControlNet 需要搭配大模型一起使用,这里以“文生图”为例来演示 ControlNet 的使用。
首先选择大模型,输入提示词和反向提示词。这里选择 AnythingV5
这个二次元模型,提示词很简单的:1girl,反向提示词也很简单:NFSW,避免生成不太方便的图片。
然后是采样参数、画布尺寸、提示词引导系数、生成种子,这些都不是重点,使用默认的就可以。
最后重点介绍 ControlNet 的配置方法。由于设置较多,为了方便对照阅读,我将分段介绍。
下面将按照图片中的数字顺序进行介绍。
第一段
1、ControlNet 模块的标题。如图所示,ControlNet 文字后跟一个版本号,“1 unit”表示当前启用了1个 ControlNet 单元。
2、默认情况下,ControlNet的面板是折叠起来的,点击这个按钮可以展开。
3、可以同时开启多个 ControlNet 单元,它们共同参与图片的绘制,已经启用的单元会用亮色标注出来。不过开启的越多,生成图片的速度越慢。
4、在每个 ControlNet 单元中可以上传一张参考图片,ControlNet 会根据当前选择的 Control Type
从参考图片中提取某种特征信息,用于生成图片。
5、预处理效果预览:预处理就是从参考图中提取图片的某种特征信息,预览就是以可视化的形式展示这些特征信息。大部分 ControlNet 都支持预览,也有部分
ControlNet 不支持预览。下面会介绍生成这张预览图的方法。
6、ControlNet
参与图片绘制时:线条需要是白色的、背景需要是黑色的。这里提示用户如果参考图中的线条是黑色、背景是白色的,需要在预处理器中使用“反转”进行处理。
7、这里有四个关于参考图的操作按钮,它们按照前后顺序分别是:
(1)使用画布:
点击这个按钮后,首先会显示创建画布的参数,设置宽高,点击“创建新画布”。
然后参考图这里就变成了一个画布,我们可以使用鼠标在这个画布上随便画画。画布的右上角有几个按钮,可以调整画笔的粗细、撤销操作、清空画布、关闭画布等。生成图片时
ControlNet 将使用画布中的内容作为参考图。
(2)使用摄像头:
点击这个按钮之后,参考图这里将变成摄像头,我们可以使用电脑摄像头拍摄照片作为参考图。
(3)镜像摄像头:
点击这个按钮会将摄像头的画面水平反转。
(4)发送尺寸到 Stable Diffusion:
点击这个箭头按钮会把参考图的尺寸填写到 Stable Diffusion 的画布尺寸中,也就是填写到下图的位置:
8、启用:勾选这个按钮之后,当前的 ControlNet 单元才生效,才会参与生成图片。
9、低显存模式:如果显卡内存小于4GB,建议勾选。
10、完美匹配像素:勾选此项后,无需手动设置某些预处理器生成预览图的分辨率参数,ControlNet 将自动计算,更好的匹配 Stable
Diffusion。建议勾选,不同的值,对出图还是有些影响的。以Canny为例:
Stable Diffusion画布尺寸为 512*512,预处理器分辨率分别为:512、1024和2048时的效果。
11、允许预览:勾选这个后,会在参考图的右侧出现一个预处理效果预览区域,也就是序号5这个位置。有了这个预览效果,我们就可以快速的了解各个预处理器的能力。这个效果预览不是上传参考图就自动出现的,下面会介绍生成这张预览图的方法。
12、Preview as input:勾选此项,生成图片时 ControlNet 会跳过预处理器的处理,直接使用预览图参与图片生成。这有一些用处,比如使用
OpenPose
控制网络时,我们可能需要修改预处理生成的人物姿势,然后再上传到这里用来生成人物的新姿势;再比如使用x/y/z图表时,勾选了这个之后,ControlNet
就会直接使用这里的预览图,也不需要生成每张测试图片之前都进行重复的预处理,这可以节省一些时间。
第二段
13、Control
Type:这里选择当前要使用的控制网络类型。选择某个类型之后,14、16中会自动加载对应的默认预处理器和模型;如果选择All,预处理器和模型需要自己手动选择。
14、预处理器:提取参考图片中的某种特征信息,作为生成图片时 ControlNet 模型的参数。不同 Control Type
支持的预处理类型和数量各不相同,有的 Control Type 不支持预处理器,比如 IP2P。我将在介绍具体单个Control Type 时详细介绍他们。
15、生成预览图:点击这个爆炸图标会使用当前选中的预处理器生成效果预览,并展示在序号5的位置。
16、模型:ControlNet 参与图片生成时使用的模型,不同 Control Type 支持的预处理类型和数量各不相同。我将在介绍具体单个Control
Type 时详细介绍他们。
17、ControlNet 参与图片生成的三个参数:
(1)控制权重:ControlNet 模型在生成图片时的权重,降低这个权重,ControlNet 对绘图的约束就会变弱。
(2)启动控制的步数:生成图片时 ControlNet 介入的时机,取值范围:0-1,默认0,采样步数乘以这个值就是 ControlNet
开始参与的步数。这个值越小,ControlNet 对生成图片的约束力越强。
(3)结束控制的步数:生成图片时 ControlNet 退出的时机,取值范围:0-1,默认1,采样步数乘以这个值就是 ControlNet
退出绘制的步数。这个值越大,ControlNet 对生成图片的约束力越强。
可以根据出图的效果,灵活调整这三个参数的值。根据经验,SD一般会在前30%的采样内确定图片的整体结构,所以需要保持图片结构时启动控制的步数不宜过大。
18、预处理器的参数,不同的预处理器参数不同。
以canny为例,通过调整阈值可以控制边缘图中保留细节的多少。
-
Canny Low Threshold:去掉过细的线段。大于低阈值的线段被认定为边缘。
-
Canny High Threshold:去掉零散的线段。大于高阈值的线段被认定为强边缘,全部保留;高阈值和低阈值之间的线段认定为弱边缘,只保留强边缘相邻的弱边缘。
19、控制模式:ControlNet 的通用设置,以提示词为主,还是以 ControlNet 为主,默认是平衡模式。
以提示词为主时,细节上会有更多自由发挥,效果如下图所示:
19、缩放模式:ControlNet的通用设置,参考图与要生成的图片尺寸不一致时如何处理。拉伸有变形的问题,一般使用裁剪和填充。
裁剪:根据画布的宽高比例对参考图进行裁剪,然后再将参考图缩放到画布尺寸;
填充:将参考图的至少一条边缩放到画布尺寸,并自动补充画布中空白的部分。
我将画布尺寸改为427*640,出图对比效果如下:
20、图像迭代:目前仅在批处理模式下生效。勾选后会使用上次生成的图像作为下一次迭代的参考图。网上的介绍不多,能找到的用途有两个:连续优化一张比较差的图片;转绘视频帧时用于减少序列帧的画面不一致性。较难使用,比较鸡肋。
资源下载
本文使用的模型、插件,生成的图片,都已经上传到了我整理的SD绘画资源中,后续也会持续更新,如有需要(文末自行扫描获取)