本节内容,给大家带来的是stable diffusion Controlnet常用控制类型解析与实战的第二节课程。在上期课程中,我们已经了解了关于线稿类控制类型的特征和用法,本节课程,我们将继续讲解一些常用的控制类型。
一:OpenPose
先看一看openpose控制类型,我们之前演示的线稿尤其是canny这种细致的线稿控制类型可能会限制AI的创作力。很多时候,我们只希望对某些要素进行控制。比如openpose控制类型可以用来对人物姿势进行控制,openpose通过关键点检测,根据提供的图片提取姿态信息,从而控精确地复制人物动作和姿势。相比线稿预处理器,openpose图像生成更自由。openpose也是stable diffusion中受欢迎程度非常高的一个控制类型。
我们演示一下,文生图标签页,启用controlnet unit 0,控制类型选择openpose,填写正向提示词1girl与反向提示词(badhandv4, easynegative, nfsw),采样方式使用euler a,采样步数设置为30,
上传一幅之前我们使用过的女孩图像,点击预览图标,可以看到预处理器提取的是人体姿势的预览图。
在生成图片之前我们还补充一些实际应用中非常重要的知识
我们这里的参考图中的人物是半身图像,人物脸部占据画面的比例比较少,
选择openpose控制类型后,预处理自动设置为openpose_full,该预处理器将检测身体姿势,面部表情,手部细节,此时如果直接生成图像,很有可能脸部会出现崩坏的情况。比如生成这样的图像。
所以在生成之前,我们还需要一些额外的操作
1: 参考图是1024*1024,此时建议生成的图像分辨率也设置为1024 * 1024,或者使用512*512,但开启高清修复选项,使最终生成图片的分辨率也为1024*1024.
2: 针对脸部崩坏的情况,我们可以使用一个非常重要的插件ADetailer,我们不在课程中再讲述该插件的安装方法,如果还不熟悉插件的安装,可以参考之前的课程。插件安装后在选项中将增加Adetailer项目,点击展开,勾选启用,然后选择合适的模型即可,我们也可以根据需求调整一些相关的参数
执行以上操作后,再点击生成,可以看到stable diffusion绘制了新的人物图像,图像大部分元素已经发生了较大的变化,但是人物姿态与参考图是一致的。
再强调一下,对于人脸占比比较小的图像,建议开启ADetailer来对脸部进行修复,但对于人脸占比特别小的图像,即使开启了ADetailer仍然可能会绘制出奇怪的脸部,此时我们可以借助局部重绘来对脸部细节进一步修复。
我们回到openpose控制类型
openpose有几个细分预处理器。我们通过预处理器预览图对比一下
1.1 dw_openpose_full
1: dw_openpose_full是使用比较多的姿势处理器,无论是手部识别,面部识别,体态识别,或是一些其他的特征物识别,dw_openpose_ful的表现都非常优秀。他也比另外一个全身姿势识别预处理器openpose_full要更胜一筹。
2:openpose姿态:
主要检测身体的姿势,不会关注脸部细节
3: openpose_face
除了检测身体姿势,也会对脸部表情细节进行检测
4: openpose_faceonly
该预处理器仅检测脸部表情细节
5: openpose_full
检测身体姿势,面部表情,手部细节,但是细节程度不及dw_openpose_full
6:openpose_hand
检测身体姿势和手部细节
我们刚刚演示了文生图中openpose controlnet的使用,我们还可以使用图生图结合openpose实现一键换衣。
我们演示一下
先使用局部重绘,将衣服部分遮罩起来,
修改一下正向提示词
Best quality, masterpiece, ultra high res, raw photo, beautiful and aesthetic,deep shadow, dark theme,(photorealistic:1.4), 1girl, (((long skirt))), striking perspective,
culottes, sleeveless blouse, wedges
提示词中增加了裙子元素,将人物的服装更换为裙子。
如果不使用openpose,可以看到,服装根据提示词发生了变化,但重绘的同时,人物姿势也发生了变化,而由于AI的随机性,有的时候重新绘制的身体部分与头部可能缺乏统一性。
我们可以加入openpose控制来尽可能避免此类问题
启用openpose并使用openpose_full控制图片生成,人物的衣服同样实现了更换,并且人物姿势没有变化,身体与头部也会更加的协调。
openpose的应用非常广,比如一些视频转绘扩展插件也会利用到openpose来保证人物姿势的一致性。
二:Depth
讲解完openpose,我们继续讲解另外一个控制模型depth
depth也是实用价值很高的控制类型,他可以根据参考图像分析图像中各个区域与物品的深度与距离信息,然后基于这些信息取控制图片的生成。我们演示一下,文生图中,选择depth控制类型,上传一张人物风景图,预处理器选择depth_leres++,
点击预览,解析出的是元素深度信息图,颜色越浅表示离镜头越近,颜色越深则代表离镜头越远。
填写好提示词
正向:masterpiece,(best quality:1.3),ultra high res, raw photo, Landscape photos of characters, Long distance character photography, style: realistic pictures, 1girl
反向:nsfw, mutated hands and fingers, deformed, bad anatomy, disfigured, poorly drawn face, mutated, extra , ugly, poorly drawn hands, missing , floating , disconnected limbs, malformed hands, out of focus, long neck, long body
点击生成,stable diffusion会根据深度信息图绘制新的图像
depth也有多个细分预处理器,区别在于其采用的深度信息估算算法有一定的差异,最终呈现的效果也会有所差异。
我们对比一下这些预处理器解析出的深度信息图
depth_midas是非常灵活和高效一种预处理器,其深度信息估算算法可以从图像中推断出场景中物体的距离信息,从而表达物体的远近关系。midas的计算成本低,但细节没那么完整。midas更擅长处理前景。对于主体与背景,midas分离得更清晰。(以刚刚的图像为例)所以可以看到使用depth_midas,解析出的背景信息是比较少的。
depth_leres其深度信息估算算法可以检测图片的景深和光影的深度,相对于midas,其精度通常更高,细节也更多,但出图时间也可能更长。
depth_leres++则提供了更精确以及效率更高的算法,提取的信息更加的细致,可以看到,其提取的背景信息明显多于midas
depth_zoe预处理器采用的深度信息估算方法结合了相对深度和绝对深度,可以估计图像中每个像素的深度信息。比如对于包含人脸的图片,depth_zoe能估算出人脸五官信息的深度图,从而更好地还原人物的五官特征。
depth控制类型对于房屋内部的场景与物品等要素可以把控和还原得非常好,我们可以用来实现房屋设计方案的复刻与重绘制。这是depth预处理器比较典型的应用场景。
我们刚刚提到的depth_leres++预处理器,增加了两个可选项,Remove Near %和Remove Background,通过调整这两个选项可以设置保留前景和背景的程度
这两个选项在某些场景会特别有用,比如我们可以提高Remove Background比例(65~78)来减少背景的保留,然后添加背景提示词来更好地实现背景更换
我们演示一下,在文生图模式中,修改正向提示词(1girl ,(((field)))), 反向提示词填入river。更换了背景提示词为field-田野,并增加了其权重。打开controlnet unit 0,选择depth控制类型,(采样方法使用euler a),分辨率与原图相同1024*1024,预处理器使用depth_leres++,将Remove Background设置为75,
另外为了人物变化不要太大,我们在controlnet unit 1再开启一个reference控制类型,该控制类型我们会在下节课程中讲解,点击生成,可以看到图像的背景实现了更换。
当然,实现换背景,最好还是使用在图生图的课程中已经演示过的局部重绘(上传蒙版)方式,这样能保证人物不会发生变化。
三:Segmentation
讲述完depth控制类型,我们接着学习另外一个控制类型-segmentation。
segmentation预处理器可以分析图片中物品种类并以不同的颜色进行分割和区分,进而控制图像的生成。
segmentation能根据规则识别图片中的物品,从而有效约束图像构成,同时又赋予了AI更大的创作空间,
我们演示一下,文生图模式,启用controlnet,选择segmentation,上传参考图,点击预览,可以看到预处理后得到的是一张以色块标注区分物品的预览图,
segmentation有一个物体与色块对应表,对应表放在我们的课后文档中。
stable diffusion会根据对应表,再基于预处理结果去生成图像,比如这里,蓝色是沙发,黄色是灯
点击生成,stable diffusion会依据相应的规则重新绘制一幅客厅图像。
segmentation也有几个细分预处理器:
这几个预处理器的命名遵循一定的规则,
of和of部分代表的是算法
of则代表使用oneformer算法
uf表示使用uniformer算法
ade20k和coco则代表的是不同的数据集标记和注释方法,这两个数据集采用的颜色标示规则也有一定区别,
这里是不同预处理器处理得出的数据集标记预览图。
ade20k识别的物体种类更多,所以细节相比coco更丰富。一般情况我们更多会选择seg_ofade20k这个预处理器。
好了,本节课的课程到这里就结束了,我们做一下总结。本节课程我们继续讲解了controlnet的几个常用控制类型,我们首先讲述了使用度非常高的openpose姿态控制类型,接着我们讲解了depth深度控制类型与segmentation语义分割控制类型,这些控制类型在stable diffusion中都具备一定的实战应用价值,比如openpose对人物姿态的控制可以实现换装应用,depth和segmentation可以用于建筑物装修设计等等。在下节课程中我们将继续讲解一些图像风格约束类的控制类型,包括shuffle,reference和normalmap。这些控制类型可以通过提取图片的风格,包括颜色,角色,光影特征,从而控制图片的绘制。