Stable Diffusion基础:精准控制之ControlNet
2023-09-21 19:29 萤火架构 阅读(1912) 评论(0) 编辑 收藏 举报在AI绘画中精确控制图片的生成是一件比较困难的事情,炼丹师们经常需要大量抽卡才能得到一张满意的图片,不过随着 ControlNet 的诞生,这一问题得到了很大的缓解。 ControlNet 提供了十几种控制网络模型,有的可以控制画面的结构,有的可以控制人物的姿势,还有的可以控制图片的画风,这对于提高绘画质量、提升生图速度特别有用;基于 ControlNet 的能力,炼丹师们还可以将AI绘画拓展到更多的应用场景,比如艺术二维码、光影文字、线稿上色、老照片修复、图片风格转绘等等。
本文将以 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插件:<stable-diffusion-webui>/extensions
- ControlNet模型:<stable-diffusion-webui>/extensions/sd-webui-controlnet/models
- ControlNet预处理器:<stable-diffusion-webui>/extensions/sd-webui-controlnet/annotator/downloads
注意需替换 <stable-diffusion-webui> 为你自己的Stable Diffusion 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、图像迭代:目前仅在批处理模式下生效。勾选后会使用上次生成的图像作为下一次迭代的参考图。网上的介绍不多,能找到的用途有两个:连续优化一张比较差的图片;转绘视频帧时用于减少序列帧的画面不一致性。较难使用,比较鸡肋。
资源下载
本系列使用的模型、插件,生成的图片,都已经上传到我整理的 Stable Diffusion 绘画资源中,后续也会持续更新,如有需要,请关/注/公/众/号:萤火遛AI(yinghuo6ai),发消息:SD,即可获取下载地址。
以上就是本文的主要内容了,如有问题,欢迎留言沟通交流。