目录
大家好,我是阿赵。
继续学习StableDiffusion的使用。这次来学习ControlNet的使用。
ControlNet的效果有很多种,这一篇主要是介绍形态控制类的一些效果。
不过在介绍具体效果前,需要先说一下ControlNet是什么:
在之前介绍的文生图、图生图的过程中,我们可以使用各种插件在生成的过程中产生一些特殊的效果。而ControlNet是一个非常重要的插件,它提供了很多特殊的效果给我们使用。
打开ControlNet的插件选项,可以看到它有很多个单元。这些单元的作用,实际上是可以在生成图片的时候,使用多个ControlNet。有一些特殊的效果也需要多个单元同时使用。
在控制类型里面有很多不同的效果,这些效果都需要配合着不同的预处理器和模型使用的。这些后面会逐一介绍。
然后在下面有一个设置参数的区域:
1. 控制权重
取值范围是0-2,决定ControlNet在生成图像过程中的控制力,值越大,ControlNet控制的效果越明显。
2. 引导介入时机
取值范围是0-1,在整个生成图片的步幅过程中,希望ControlNet在什么开始生效。设置值为0,就是从一开始ControlNet就开始介入。
3. 引导终止时机
取值范围是0-1,决定在过程中,ControlNet什么时候结束生效。如果介入时机设置0,终止时机设置1,那就是整个生成过程,都受到ControlNet的影响。
4. 控制模式
分别有均衡、更偏向提示词、更偏向ControlNet,这3个选项。这里决定了在生成的过程中,提示词和ControlNet之间的关系。
5. 缩放模式
类似于生成参数里面的缩放模式,决定生成图片的缩放模式。
接下来开始介绍ControlNet的具体效果。这一篇里面介绍的效果都有一个共同的特点,就是控制生成出来的图片的形状或者姿势之类的。
1、 Canny
Canny(硬边缘),可以提取指定图片的一个轮廓边缘,作为预处理图片,控制生成出来的图片的轮廓边缘。
注意选择了Canny之后,下面的预处理器和模型会发生了变化,其实是WebUI自动选择适合Canny的预处理器和模型。
对于很多效果来说,预处理器和模型可能是不止一个的,所以在下拉列表里面有时候可以选择。
注意在预处理器和模型的列表中间,有一个像爆炸图标一样的按钮:
如果我们在上面指定了单独图片来控制ControlNet的效果,并且允许预览
选择了一种控制类型之后,点那个爆炸图标按钮,就会生成出来预处理结果预览。比如这个Canny硬边缘,我选择了一只猫的图片作为单独控制,点击爆炸图标按钮后,就会提取了猫的边缘轮廓作为预处理了:
这时候,可以输入提示词:
然后生成,就会看到,这时候生成了不同的猫出来,但它的姿势和形状,是和我们预处理的猫的边缘一样的。
2、 Depth
Depth(深度),一般又会理解成景深。
操作方式和上面介绍过的Canny差不多,所以不重复叙述了。
我这里指定了一张街景的图片作为控制,然后生成预处理预览:
可以看到,生成出来的预处理图片,是通过黑白色代表了离镜头的远近距离,离镜头越近,颜色越白,离镜头越远,颜色越黑。
这时候可以输入关键词,然后生成图片
可以看到,生成出来的所有图片,可能都和原图的元素不太一样,但由于受到景深的控制,它们的整体位置和布局是和我指定的图片差不多的。
3、 Lineart
Lineart(线稿)的效果和之前的硬边缘比较相似
我指定一张角色的图,在显示预处理结果预览时,会发现提取出来的是一张比较细致的线稿
在这个情况下,我用一个写实的模型去生成角色,会发现生成的角色会和我指定的预处理图片非常的贴合,包括细节也和参考图差不多,这是因为生成的线稿预处理图的关系。
4、 MLSD
MLSD(直线)也是提取图片特征作为预处理图
比如我拿一张室内的图片作为参考,然后用MLSD来生成预处理结果预览,会发现这次找到的特征图,是参考图里面的各种直线部分:
在这种情况下,通过关键词生成图片,生成出来的房间结构,会和参考图基本一致:
在这种情况下,我们可以直接换房间的各种装修风格、家具,或者配合局部重绘,来修改房间某些部分的内容。
5、 NormalMap
NormalMap(法线贴图),一般是表达凹凸关系的。所以通过法线贴图进行预处理,会提取图片的凹凸方向,生成一张法线贴图。
比如我拿这个角色作为参考图,然后生成预处理结果预览,会发现出现了这样一张表达了凹凸情况的法线贴图:
这时候添加一些提示关键词,用一个写实的模型生成图片,会看到生成出来的图片的凹凸关系,和原参考图是一致的。
6、 OpenPose
OpenPose(姿势)提取的预处理图片主要提取的是角色的骨骼姿势。
比如还是刚才那张角色的图片,这时候通过OpenPose来生成预处理图片,会看到,出现了一个角色骨骼:
这个时候生成图片,会看到生成出来的图片,不像之前的硬边缘、线稿或者法线贴图这样和原图那么贴合,但是角色的动作姿势,是和参考图一致的。
7、 Scribble
Scribble(涂鸦),同样也是提取参考图片的轮廓特征的
使用一张角色的图片作为参考,然后通过Scribble来生成预处理结果预览,会发现生成的预处理参考是一个画得比较随意的图片,它没有线稿那么准确,只是一个比较简单的图片。
在这种情况下生成图片,会发现生成的图片细节会和原图有差别,大概的轮廓和原图是接近的。
8、 Segmentation
Segmentation(语义分割)可以把参考图片的内容识别成不同的类别
比如我拿一张风景图片进行参考,生成的预处理结果预览里面,会发现出现了几种不同颜色的色块。这些不同的颜色,其实是代表了不同的内容,比如岩石、水面、山、天空,这些类别的东西都会有专门的颜色。
在这个预处理的基础上生成图片,会发现在指定的范围内,会生成出对应颜色类别的内容:
9、 SoftEdge
SoftEdge(软边缘)的效果和之前的其他一些轮廓提取的效果,比如硬边缘、线稿、涂鸦之类的比较类似,不过它会对图片提取出比较准确和柔和的边缘轮廓线。
比如我拿一张小狗的图片作为参考,然后用SoftEdge提取预处理结果预览:
会发现提取出来的图片边缘轮廓非常的清晰,但里面的细节并不多。这时候生成图片,会发现生成的图片边缘和原参考图是非常一致的:
10、 Tile
Tile(分块)的作用是把图片先变模糊,然后再通过模糊后的图片生成出新的分辨率的图片。所以Tile可以是用来把小图放大的,不过放大的图片不是直接放大,而是会根据情况生成出一些新的内容。
这里有个控制模糊度的参数。如果预处理的图片非常清晰,那么生成出来的图片就会和原图非常接近,没有什么新生成的内容。而如果把预处理的图片控制得越模糊,那么生成出来的新图片新的内容就会越多。先模糊再重新生成细节
比如这只小狗的图片,我生成预处理预览的时候,把图片变得模糊了一点,那么生成出来的图片,会增加了一些原来没有的细节,比如耳朵上的毛,或者四肢上的毛的细节。