当前要闻:AI绘画:Stable Diffusion Web UI(七)ControlNet 2

来源:哔哩哔哩     时间:2023-04-25 23:13:39

接上一章

本次记录ControlNet(v1.1)的基础使用。

有点事耽搁了,晚了好多天才开始,然后写到一半突然来了个v1.1的大更新,直接傻了...

又重新学了一遍.....主要是插件还天天更新修复,一会变这个一会变那个,真的欲哭无泪。此次学习记录以4月18日20a5310版本为基准,已经关闭了插件自动更新,写完之前绝不打开,


(资料图片仅供参考)

说实话大佬们纷纷献言献策身体力行,插件越更新越专业,能参考的知识也越来越深奥,上手难度越来越大,感觉已经不是给普通人玩的了......

再有更新肯定还会有变化,大家参考下就行

因为不懂算法也不懂绘画,以下大部分内容只是通过结果进行的反推,说的不对轻喷...

前面几篇有需要的新手小伙伴可以去合集中看看:

(一)Windows本地搭建

(二)插件及模型安装

(三)基础使用教程

(三.5)提示词的进阶使用

(四)模型推荐

(五)图生图的基础使用1

(六)图生图的基础使用2

2.3 预处理器与模型

预处理器与模型

预处理器:

用于预处理输入图像,例如检测边缘、深度和法线贴图等等。如果是第一次使用,需要联网下载包,有不少人网不好经常会造成下载中断,然后插件会提示损坏之类的,这个时候去根目录的models文件夹处理,找到对应的删除即可。

v1.1在4.18的更新中修改了路径,以后插件所有的内容都放在插件的文件夹,出问题直接删掉插件文件夹就能解决

另外,因为修改了路径,所有包都需要重新下载,不想下载的可以去设置中添加原来的路径(在models文件夹),但是怎么输入我也不知道,我提前就转移过去了,没法测试,可能要绝对路径?

或者直接将相关包剪切到插件目录(...\extensions\sd-webui-controlnet\annotator\downloads)(也不是所有的都在这个文件夹,有几个是在预处理器名称下的文件夹)

模型:

使用预处理图构建各项内容↓

v1.1版↓

绿色为新增预处理器,橙色为试验模型,深灰色为未完成模型。

这里单独说一下黄色的pidinet边缘检测。v1.1中将它直接放到了softedge,效果也和旧版完全不一样了,反倒是t2ia_sketch_pidi与原来的pidinet边缘检测是一样的效果。

看对比,左:旧版pidinet边缘检测;中:softedge_pidinet;右:t2ia_sketch_pidi↓

其他内容在后面详细介绍

先说下通用参数↓

权重 / Weight:

指的是ControlNet插件在SD出图中的影响程度,类似于提示词中的权重,更像是lora的权重;

这里有一个坐着的美女,我们使用openpose提取姿势,但是提示词为standing on one leg, hands up, 然后分别试验从0.1-2的权重。↓

失误了,忘了还有裙子,有点不雅......修改下standing on one leg, hands up, wearing pants↓

这个参考图不大好,胳膊没提取出来,不过也够用了,上图就是权重的效果。

(这个无提示词模式真的好玩,我输入了hands up,它便认为是在欢呼,张大嘴巴,后面还给配了一群人)

引导介入时机/Guidance Start & 引导退出时机/Guidance End:

这两个和我们上次说的的提示词分步[from:to:when]差不多,就是ControlNet从第多少步开始介入、从第多少步退出。

影响也是一样的,介入的影响远大于退出,越早影响越大,越晚影响越小。这个越早越大和越晚越小,[from:to:when]的时候就提到过,步数的大概前50%用来构图,后50%用来细化,在构图中没有出现,那细化中肯定就直接没有。在ControlNet中这个百分比又被大大提前,大概在30%-40%之间,越早和越晚都是指的在前40%之内。同样的,这个数值也受很多因素影响,需要自己测试。

还是使用上面的姿势,引导从0到1,退出1,权重1↓

这一次测试大概在20%-30%之间,ControlNet的影响就无了

测试退出从1到0,引导0,权重1↓

这就是介入影响远大于退出,引导从0就介入,哪怕介入就退出,也会产生影响。

预处理器分辨率:

这个分辨率只代表预处理图的宽度,不会影响出图的尺寸。宽度越大,代表预处理图越精细。但是并不是越大越好,首先要考虑的是使用的什么预处理器,根据预处理结果进行调节。

其次要考虑的是出图尺寸,虽然实际影响并不大,但是出图是大尺寸,使用大分辨率会好一些。

只要显卡跟的上,哪怕出小图使用大分辨率也可以,没啥硬性规定,主要是看效果。

这是一张2048*1536的原图,通过它我们看一下这个选项的效果↓

使用canny提取边缘,默认参数,下图分别是放大一部分的512、1024、1536,观察人物和右上角的桃花,↓

分辨率低,提取的边缘线条粗糙,多是不连贯线段组成的,特别是一些曲线都是长线段参差错开组成;

对于细节丰富的地方如人眼头饰花蕊都是简单带过,但是后面景深模糊的桃花也提取了出来;

随着分辨率提升线条越来越平滑、圆顺,细节越来越多,但是对于模糊的桃花直接做了部分舍弃处理

可以看到,分辨率提升,对canny来说还是不错的,至于过多的细节和丢失的模糊桃花,可以通过修改判断阈值调节,这个后面再说。

下面开始预处理器的说明

Canny、HED和PiDiNet边缘检测

这一部分还是说的旧版预处理器和模型,会在后面补充新版

Canny边缘检测

canny是一种老式算法,会通过灰度变化检测图像中内容的边缘并提取出来,包括曲线直线等等各种线,类似于线稿,但是线条宽度固定没有粗细。出图时需要配合canny模型使用。

选择预处理器后,就可以点击插件最下方的预览预处理按钮,预览预处理结果↓

能发现,它提取的内容都是有明显边界的,对于变化不明显的,如原图中的背景明暗衔接并没有提取出来,只有一条线,还有腮红、手指、光影,都没有体现,

随机抽一张看看,背景衔接的地方已经失去了空间感↓

查资料时都说canny还有一个缺点是容易受到图片噪声影响,如果是噪点较多的图像,可能会把噪点当做边缘提取。

看看选项

分辨率的效果上面说过了,先保持默认,我们调节剩下的两个选项

弱边缘判断阈值 & 强边缘判断阈值:

这俩货一看就是能把人绕晕的功能。既然是判断值,那肯定是需要提取原图中的某个值进行判断,正常情况下,我们都会认为低于最低值和超出最高值不会被提取,只提取他们中间的值,但是并不是这样。以下只是我的个人理解,不保证正确。

弱边缘阈值,它的意思就是低于它的值一定不会被提取;强边缘阈值,就是超过它的值一定被提取。那中间的值哪去了?中间的值如果和超出强边缘阈值的值有关联,那它也会被提取。

举个例子,图上有一件衣服,衣服上有几道褶皱,有的明显有的不明显。使用canny提取这件衣服,这些褶皱该怎么提取?

明显的褶皱值经过判断是高于强边缘阈值的,它们被提取,这些会被提取的我们统称为强边缘;

一些不明显的褶皱值是低于弱边缘阈值的,它们不会被提取,我们统称为弱边缘;

假设还有两道褶皱的值既高于弱边缘阈值又低于强边缘阈值,我们称之为A和B,这时候会进行判断,A褶皱恰好连接在强边缘上,那么A就会被提取。B孤家寡人,没有与之相连的强边缘,那么B就会被舍弃。

总结一下:

调低边缘阈值,并不一定会增加边缘数量,只是让原本没机会的有机会,有可能它正好有个强边缘的亲戚,所以说即使增加了,也是在强边缘附近增加。同理,调高弱边缘阈值会剔除一些强边缘附近的不够格的亲戚;

调低边缘阈值,会使原本不达标的直接达标,还能让处于中间的亲戚沾光,显著增加边缘数量。如果调高,不仅会剔除原本的边缘,还会连累一大批亲戚。

如果弱边缘阈值高于强边缘阈值会发生什么?

强者为尊,强边缘阈值说了算

然后回到前面美女和桃花的例子,在预处理器分辨率提升以后,被模糊的桃花有一部分从边缘提取中消失了,↓

分辨率提升意味着更精细的处理,更精细的处理时它们消失了,我认为大概率还是因为他们处在中间值的位置,就好像一放大,原本看着是连着的线其实并没有连在一起。因此我们直接调低强边缘阈值看看效果↓

果然又回来了

所以说自身强才是真的强,依靠政策迟早黄....

下一个

HED边缘检测

如同翻译的说明一样,hed会保留细节,且线条柔和,对比canny↓

hed擅长外部轮廓的边缘提取,像一个整体的感觉(我查了下它的全称,Holistically-Nested Edge Detection,翻译为整体嵌套边缘检测 ),内部的细节会丢失一些。比如头像旁边的这串桃花和背景的桃花一起形成了整体,还有眼睛、袖子的细节都缺失的厉害↓

通过调节预处理器分辨率,可以缓解这一问题,下图是1024的分辨率↓

我们换个图出图看一下,这个图实在是跑不动

主要是看一下头部这一部分

原图--hed出图--不知道画了个什么的canny↓

毛绒绒的耳朵得到了保留。

PiDiNet边缘检测

PiDiNet需要和hed模型一起使用,这效果和伪涂鸦有的一拼...只保留了大体内容

原图--预处理图--出图↓

同样的,提高分辨率会增加细节↓

hed、pidinet与canny的最大区别就是线条不再是固定宽度,有了粗细,粗细变化代表还原度更高。

v1.1

v1.1中新模型都需要单独的配置文件,上面说了配置文件需要和模型文件一样的名称,官方也提醒从第三方下载的模型可能会出现名称不匹配的问题。

Canny边缘检测

对应的模型文件为control_v11p_sd15_canny。

预处理器似乎并没有啥改变,左旧版,右新版↓

模型升级了,看机翻

出图稍微对比一下。左旧版;右新版↓

我感觉模型变化蛮大的。更自由了些,不再是死板套用,后面那些不明意义的东西也给与了实质响应↓

后面的内容因为v1.1变化较大,所以全都删了重写了

按照整理的顺序进行

① threshold / 阈值法

threshold对应旧版的binary/二值,但是并不一样,具体有什么区别搞不清,从效果看就是二值的反色,应该是为了统一样式(黑色背景白色线条)进行的修改。

左:二值;右:阈值↓

接触过ps的应该熟悉阈值。

二值是最简单的图像分割方法,它的效果就是把所有颜色都变成黑白,要么黑要么白,通过调节阈值来调节分割效果的方法称为阈值法。也就是这个预处理名称,亮度超过阈值的变成白色,低于阈值的变成黑色,默认的阈值是0-255的中间值127。

因为是靠像素亮度进行分割,所以对于具有复杂色彩的物体很难进行精准区分。它适用于背景简单,颜色对比强烈的图像。

阈值法实际上有两种,一种是全局阈值,一种是局部阈值,插件的这种就是全局阈值,也就是整张图片都使用一个阈值就行分割。所以问题很明显,很容易受光线影响,即便是同一个颜色,光照导致的明暗,也会造成分割出现问题。

对应的模型没有明确,暂且是control_v11p_sd15_scribble和t2iadapter_sketch吧,出个图看一下...

看选项:

调节分辨率会让预处理图更清晰,在一定程度上可能会影响预处理结果;

二值化阈值会直接影响预处理结果,上面说了,这个值表示 低于它为黑,大于它为白,默认为127,

左:127;右:180↓

二值很简单,之所以放在前面说,是因为它向我们阐述了最基本的计算机视觉,它们眼里木得感情,只有数字....后面的canny、hed、pidinet等都是基于这种原理。

canny上面说过了,不重复了;

② depth深度图系列

深度信息估算就是按照远近使用黑白灰进行预处理。镜头越近,白色越深;镜头越远,黑色越深。v1.1中除了旧版的depth_midas 、depth_leres,新增了depth_zoe预处理器。这三个预处理器均对应control_v11f1p_sd15_depth模型。

新的control_v11f1p_sd15_depth模型增强了多分辨率的训练,其他看官方说明:

depth_midas

midas是一种单眼深度感知算法,意思就是从单张图片中感知深度。正常的比如3d电影,是由两个画面合在一起才让我们感觉立体感。具体我也搞不懂,可以简单理解为它使用了透视原理。

使用depth_midas提取深度图:↓

可以看出MiDaS会更注重近景内容的提取,远景的内容也有,虽然并不明显;小腿部位的前后关系有正确表达,但是整体的细节并不丰富,头发和胳膊没有明显区分,小蛮腰也没了。

放到原图上看一下↓

出图看一下,为了减少影响,不使用无提示词模式,也不输入提示词:↓

MiDaS也只有一个分辨率调节块,下图分别是386--512--1024。

1024时已经能看到后面的轮廓↑

分辨率增加,首先增强的仍然是近景,512相比386,右侧不知道是什么的什么明显变亮,还有腰间、头发和胳膊有了一点点区分。到1024时前景的增强更明显,同时能肉眼看见一些远景。↓

分别出图看一下:左386;右1024

换一张大空间图看看,

原图--512--1024--512出图↓

总结:depth_midas综合能力好,提升分辨率会增加细节与远景,适用于远近景兼顾的需求。

depth_leres

leres全称是 Learning to Recover 3D Scene Shape from a Single Image,学习从单个图像中恢复3D场景形状,因此会还原更多内容。

左:midas;右:leres↓

因为要顾及远景内容,前景整体泛白,细节缺失,远景还原的也不够协调。

放到原图上看一下↓

出图看一下↓

1024分辨率远近景都要好一点,最起码小蛮腰出来了,头发依然一片混沌↓

可以通过调节滑块排除近景和远景。

排除近景,就是给近景添加白色;

排除远景,就是给远景添加黑色,数值百分比的意思应该占整个画面的百分比。

在深度图中白色代表最靠前,排除近景事实上并不会让被排除的画面消失,而是消除了他们的深度信息;添加黑色排除远景是抹去了一些东西,会出现什么需要提示词指引。

近景排除30%,不写提示词随便发挥,原本处在不同深度的腿、两边的墙啥的,现在都在一个深度↓

远景排除40%,提示词写riverside,这个就是比较正常的排除↓

(事实上,上面的图我还是添加了一些负面提示词,不然全是比基尼....)

无论是排除近景还是远景,都会影响到原本的细节,比如上图中的头发

看看大空间,原图--512--1024--512出图↓

总结:leres对于远景的提取更好,但是会影响近景,总体感觉并不如midas,但是leres有个优点就是可以自定义排除远近景,可控性好。

depth_zoe  新增

zoe全称是Zero-shot Transfer by Combining Relative and Metric Depth,是一种是结合相对深度与绝对深度的新算法,啥意思我也不懂,就是相比其他的,zoe误差更少、结果更准确

先看对比,都是512的分辨率

左:midas;中:leres;右:zoe↓

放到原图上看一下↓

这个是人物细节还原的最好的,但是特点也很明显,远景直接无

再换个图感受下,最左原图,左:midas;中:leres;右:zoe↓

这张图更能反应三种预处理器的特点,

midas是最均衡的,远近景都还原较好,但是整个房间内的颜色差距并不大,也可以说深度差距并不大;

leres的远景甚至到了窗外,但也因此前景丢失了很多;

zoe对空间深度更敏感,从右下到左上,由近及远层次清晰,甚至连帽子的深度都有估算,但是远景丢失;

出图看一下,最左原图,左:midas;中:leres;右:zoe↓

zoe走遍竟然还把窗户补上了实在是让人没想到,使用ps处理一下看看黑的地方到底有没有内容

实际上还是有一点的。↑

使用zoe深度图做个gif玩玩

以近景为支点画圈↓

以中点为支点画圈↓

以远景为支点画圈↓

大空间图:最左原图,左:midas;中:leres;右:zoe↓

zoe出图↓

大空间这种,zoe的远景反而比midas要好

总结:默认选zoe就行

因为限制了发文长度,只能分开发,未完待续....

标签:

精彩放送