代码改变世界

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 中。文章最后有我整理的插件包和各种模型的下载地址。

具体部署路径如下:

  1. ControlNet插件:<stable-diffusion-webui>/extensions
  2. ControlNet模型:<stable-diffusion-webui>/extensions/sd-webui-controlnet/models
  3. 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,即可获取下载地址。

以上就是本文的主要内容了,如有问题,欢迎留言沟通交流。