ControlNet详细入门介绍

写在前面

一直知道ControlNet是个大利器,但是WEB UI上的那么多参数,看着特别吓人。在网上各种查资料,但是那些要么不是太全,要么就说得比较模糊,实操性较差,不容易理解。最近自己摸索了一段时间,基本理清楚了,也更感叹于ControlNet的强大。其实理清楚后,ControlNet也没那么复杂

可能会分几篇来写。还没想好规划,想到哪里写到那里吧。不过不打算写怎么安装了,网上一搜一大把。今天是第一篇,总体介绍ControlNet,包括ControlNet的所有模型和基本用法,让你对ControlNet不再望而生畏。不过今天的介绍不会特别详细介绍每种模型怎么用怎么调,而是目的教会大家怎么用,然后大家自己去挖掘ControlNet的魅力~~

对的,ControlNet模型建议下载V1.1版本,模型目录在这里:llyasviel/ControlNet-v1-1 at main,官方介绍比1.0版本上改进了很多。

好,下面开始啦~~

1、ControlNet是什么

通俗点来说,如果要画一幅画,一方面是构图,一方面是风格。之前大家都听说过现在AI绘画就是炼丹对吧?其实炼的是什么呢?说白了还是通过各种咒语来控制画面的构图和风格。

大家应该也知道这个咒语很烦是吧?其实这种所谓咒语在我看来就是反人类的,AI本来就应该是降低门槛而不是抬高门槛的,随着AI技术这日新月异的发展,这种咒语未来肯定是被淘汰掉的。其实现在已经有了两大利器,就是来解决这个问题的:ControlNet就是用来控制构图的,LoRA就是用来控制风格的 。不过针对这句话有一点补充ControlNet框架太厉害了,感觉逐渐会无所不能;目前已经出了一个很厉害的风格迁移的模型shuffle,后文会详细介绍。

那ControlNet是怎么控制构图呢?技术原理我就不介绍了,简单来说,就是你手上已经有一副图了,基于这个图你去创造出新的图。那么这个图有两种来源:
1、你很有才,你自己画了一幅手稿图。但是后期修图太费劲,你想交给AI去做后面的美化的事情;
2、你不是那么有才(譬如我),然后正好手边有那么一幅现成的图,想照着那个样子去改改。
那么这就是ControlNet做的事情:通过你手上已有的图而不是咒语,实现对AI绘图的控制。

可能你比较细致,会追着问,不是总体有两步么,那我是不是还得学习LoRA来学习控制风格啊?嗯,LoRA么,有最好,没有的话,现在的一些基础大模型也够用了(毕竟只用SD1.5也是能生成一些不错的图的,只是不好控制而已),不妨碍我们只用ControlNet就可以画出非常好的效果。你可以理解为LoRA是锦上添花。

2、三个前提要点

我觉得在用ControlNet之前,有必要先理清三个概念或者要点,才能事半功倍。我自己之前就走了不少弯路。

2.1、ControlNet的本质是文生图(txt2img)

很多刚上手的同学并不知道这个点,第一印象就是我是用图去控制生图啊,不应该是图生图吗(img2img)?然后WEB UI中,不管是txt2img还是img2img中都有ControlNet,所以这是大家(最起码是我自己)开始用的时候的一个困惑,我到底该怎么用??

其实吧,看看原作者的论文题目就知道了,《Adding Conditional Control toText-to-Image Diffusion Models》,这不就是一个不折不扣的txt2img的工具嘛!再仔细看他的github上的说明,也会发现他的样例基本全是txt2img(只有一个例外,也就是他的inpaint模型,后面介绍到时会详细说明)

所以:使用ControlNet请优先使用txt2img这个页签。

2.2、预处理器与模型要配合使用

好,我们现在定位在txt2img了。但是即使这样,展开ControlNet配置项的时候,那么多预处理器、那么多模型,也是一脸懵的。。。那么第二点必需要理清楚的就是:尽量要保证预处理器(preprocessor)跟模型(model)是同类的

这里先大概说一下什么是预处理器和模型:预处理器的意思是对你的参考图进行预处理,然后把这个预处理的图作为控制图,给到后续的对应模型进行控制出图(从这个流程也能看出来,预处理器要跟模型一致)。举个例子,如果你选择了scribble类的预处理器,那么你的模型就最好选择scribble模型。给大家一个直观的认识吧:

上图中,第一行分别是原图和scribble预处理后的图,想画一只类似猫头鹰。第二行是不同配置条件下的AI出图结果,可以看到:
1)只有预处理跟模型是一致的情况下,才能得到比较好的结果图,也就是第二行的左边第一幅图。
2)如果两者不一致,可能就会得到一个莫名奇妙的效果,如第二行的最后一幅图。
3)如果预处理器或者模型有一者为空,基本就等同于ControlNet未生效,就是一般的SD出图,如第二行的中间两幅图。 (不过有些模型下,是的确不需要预处理器的,譬如ip2p、inpaint,以及一些用户输入的控制图就已经是线稿图的情况)

PS:可能WEB UI开发者也注意到了预处理器vs模型之间对应关系的问题,所以在1.1.2XXX版本中已经改了交互方式,如下图所示。如果你选择了某种控制类型,那么下方的预处理器、模型都会限定好,不会再让用户自己瞎选错选了。真的是一大改进!


ControlNet新UI版本中已经限定了预处理和模型之间的对应关系

2.3、先用默认参数尝试

大家用ControlNet比较懵的地方(其实整个WEB UI都是这样)还在于可调参数太多,这个软件说真的不是给咱们普通用户用的。那么这里就是我建议的第三点:刚开始上手时,都直接用默认参数,先看看出图效果如何,是不是你想要的模式。如果是,那么再针对这个模型进行参数细调。

不然一上来就调参,调着调着就忘了自己的主任务是啥了。。。先抓大放小,用默认参数快速学习。其实默认参数在大多数情况下效果也挺好,感觉是够用的。

好了,讲完以上这三点,ControlNet的脉络基本应该理清楚了吧,接下来就是开始看这些模型可以做什么了。

3、ControlNet的模型分类

ControlNet1.1版本中发布了14个模型,有点过于多了。做产品经理的都知道5±2原理嘛,最多7个不然记不住。但是真是太多怎么办?先分类,我这里给分成三类:

3.1、线稿类(6个)

在这类模型中,都是拿到一副参考图后,用各种预处理器给处理成线稿(当然也可以支持用别的软件自己画出来的线稿,在这种场景下,预处理那里选择none就可以),然后基于这个线稿再去让AI对他进行美化。

这个家族是最多的,总共有6种模型:
1)Canny:据说最常用,官方github说是most important and perhaps the most frequently used model
2)MLSD:线稿里面的特殊类,是直线检测,适合建筑设计、室内设计
3)lineart :也是线条提取,在1.0版本中我没记错的话可能是fake_scribble
4)lineart_anime:官方说这个要配合anything_v3的大模型使用比较合适(我用anything_v5),也是ControlNet里面唯一一个可能需要复杂提示词的模型
5)SoftEdge:里面又分了好几种预处理器,官方建议综合效果选择SoftEdge_PIDI
6)Scribble:我的最爱。scribble翻译就是涂鸦,所以自己随便涂几笔,剩下交给AI去发挥,效果真的蛮惊艳

说实在的,因为模型和预处理器实在太多,今天的文章不会去详细展开,否则就太长了。。。下面举两个例子简单介绍一下:

1、第一个例子,帮大家对比一下不同预处理器的效果和差异,然后大家根据自己的场景,可以更有针对性地去选择、细调、挖掘

2、第二个例子,用我最喜欢的Scribble看看ControlNet的能力:

看到了吗?这就是ControlNet的魅力:不用那些复杂的咒语,简简单单的prompt就能生成非常好的效果图!

3.2、结构类(3个)

我也不知道用“结构类”去命名是否合适,暂且先这么叫着吧。

1)depth:景深图。根据深度和轮廓,然后模型去出图
2)seg:图像的语义分割图。譬如粉色是建筑物、绿色是植物等等,然后再交给模型去对应出图
3)normalbae:法线贴图(说实话之前我也不知道啥是法线贴图,后来查了下,通俗理解就是通过颜色来区分物体表面的凹凸情况,所以能勾勒出画面构成)。然后同样,再把这个带着构图信息的图交给后面的normalbae模型去参考出图。

继续先给大家上一张图,感受一下这三类模型的差别。在我这个非行业人士看来,本质差不太多,我觉得效果都还不错。


左:原参考图; 中:三种预处理结果; 右:对应的AI输出图(prompt均是 house)

同样,这三种模型也都可以支持好几种预处理器,譬如
1)depth:支持depth_Midas, depth_Leres, depth_Zoe等等,以及别其他软件生成的depth map
2)seg:支持Seg_OFADE20K、Seg_OFCOCO、Seg_UFADE20K,以及人工手绘的蒙版。
3)normalbae:支持normal_bae, normal_midas

在预处理器这层,我觉得对咱们算法小白来说都过于专业了,我觉得大家不用深究,挑一个能用就行。毕竟各种花里胡哨的算法落到实际应用中时,可能差别并不大。。。除非真的要工业落地了,可能需要综合算法性能、算法效果等各方面因素,挑一个最合适的去应用。

3.3、其他类(5个)

把最后几个归类成“其他”,其实有点委屈这几个模型,因为这里面的这几个模型都特别优秀,每一个拿出来都能单独写一篇长文。

先简单介绍一下吧:
1)OpenPose:骨骼捕捉,早已火出圈。感觉不用介绍了,好像b站之类介绍的也比较多
2)inpaint:局部修图,初步实验下来也还不错
3)shuffle:风格迁移,非常好用&好玩
4)ip2p:指令式修图,动动嘴皮子就可以魔法改图片(不过目前指令识别还有点局限性)
5)tile:不知道怎么翻译,感觉是用于超清修复的。不是一般的上采样高清,而是会增加原图没有的细节。

尤其后面三个实验中还未正式发布的模型,真的是都非常惊艳!不过今天的总体目标是教给大家用会基本的ControlNet,篇幅已经很长了,所以这几个模型今天就不详细展开了,如果大家喜欢,后续再写个续集详细介绍一下。

不过还是给大家直接先看两个效果,继续感受ControlNet的魅力:

这是ip2p的效果:


ip2p效果

这是shuffle的效果:


shuffle

4、配置参数说明

介绍到这里,大家应该会用ControlNet了吧?那么现在可以稍微来说一说参数了,毕竟可能会用到。

但是其实再强调一下,大多数情况下默认参数就可以了。给大家梳理一下只是让大家了解一下概念,高阶应用时可以慢慢调~~~

上图中,中间一块没框的是怎么选预处理器与模型,前面已经详细说过了,这里就不赘述了

黄色框:黄色框是跟所选定的预处理器和模型相关的。其实无非就是线条粗细、细节丰富程度而已,我一般都用默认参数。感兴趣的话,选定了某个模型之后,可以细调一下对应的参数,再比较效果差异。如果有什么特别发现,可以分享给我,哈哈~~~

红色框:我们从上往下一个模块一个模块说:

第一组:基础控制,比较简单
1)enable:是否启用ControlNet
2)lowVRAM:如果显存不够就勾选这个,可能后续模型会采用一些低消耗的处理算法吧
3)Pixel Perfect:是1.1.2XXXX版本新增的一个功能,主要是应对黄框中的第一项preprocessor resolution的。根据作者自己介绍,如果控制图和输出图的尺寸比例不一致,这个数值计算起来还有点复杂,用户应该搞不明白,所以新版本中就增加了这么一个功能,算法自己去计算最合适的resolution。如果不是512*512这种的方形出图,建议勾上这个选项
4)allow preview:这个没什么好说的,就是看看预处理器的效果

第二组:权重控制(可以直接用默认)
1)control weight:控制网络的控制权重
2)starting control step:什么时候介入控制
3)ending control step:什么时候退出控制
后两个参数用的是百分比,是配合步数一起使用的,分别表示在百分之多少的时候controlNet开始介入控制、百分之多少的时候退出控制。譬如,如果不想用controlNet控制太多,则可以晚点介入。

第三组:控制模式(可以直接用默认)
1)balanced
2)my prompt is important
3)ControlNet is important
这个没啥好说的,就是到底是prompt更重要还是参考图的控制更重要。不确定就默认的balanced吧

第四组:裁剪方式(根据实际需要选择)
当控制图(ControlNet里面用到的参考图)的尺寸跟目标图(txt2img里面要生成的图)的尺寸不一致时,需要配置这组参数,否则不用考虑。
1)just resize:变更控制图的长宽比以适应目标图的尺寸比例。
2)crop and resize:对控制图进行裁剪以适应目标图的尺寸比例 。
3)resize and fill:对控制图进行缩放,保证整个控制图能塞到目标图中去,然后对多余部分进行空白填充。
一般我不会用第一个,因为会变形;至于第2个还是第3个,要根据你的实际情况去判断。

5、ControlNet不足的地方

ControlNet的确非常好,但是目前(仅限于目前)也有一些他做不到的地方。譬如画人脸,虽然有OpenPose_face之类,但是效果还是不太好。。。最起码我目前没有依靠简单咒语能生成出非常好的人脸。可能目前还是得依赖咒语或者LoRA来解决这个问题。

但是我觉得不排除后面ControlNet又升级了,能出来一个专用的人物模型~~


失败的案例:仅简单的prompt情况下(a girl and her father, looking at a laptop, playing in a room),放大了看,人脸、肢体都有瑕疵

6、后续

ControlNet的潜力真的很大,譬如还可以进行模型的叠加使用,网上也看到过一些案例。这里应该可以做很多尝试,挖掘ControlNet的无限潜力。我后面有空慢慢写~~

有什么问题或者建议,可以评论区讨论哦。第一次知乎长文,多多包含!

转自: https://www.baihezi.com/post/272014222724.html

2