Stable Diffusion Controlnet常用控制类型解析与实战课程 4
本节内容,是stable diffusion Controlnet常用控制类型解析与实战的第四节课程。上节课程,我们陆续讲解了几个与图像风格约束相关的控制类型,本节课程我们再学习一些实用价值较高的控制类型,看一看他们提供了哪些控制思路。
一:Tile
我们先看一下tile控制类型,这是一个非常重要的控制类型,tile的中文翻译是地砖,瓦片。该控制类型采用分块处理的方式,将图像分割为多块区域,同时tile控制类型会主动识别单独块中的语义信息,并对这些分块的区域分别采样处理。最后进行整合生成图像。
这样的方式有哪些作用呢?我们在之前的课程中讲到过,可以使用图生图中的SD upscale,来增加图像分辨率,比如我们这里使用了一张512x512看起来有点模糊的图片
我们使用SD upscale,并且调整重绘幅度设置为0.3,填好一个简单的提示词(1 girl),选择SD upscale,放大算法设置为R-ESRGAN 4x+,点击生成,可以绘制出放大后的图像。
但是如果我们将重绘幅度调整为默认值0.75,仍然使用SD upscale,点击生成,可以看到,生成了奇怪的图像。
这是因为如果设置了较高的重绘幅度,放大算法在放大图像像素时可能出现难以预料的变化,从而导致最终合成出了奇异的图像。
我们可以借助tile控制类型的分块重采样方式来对放大算法进行约束。比如,重绘幅度仍然设置为0.75,启用controlnet,选择tile控制类型,预处理器默认使用tile_resample , 这里不勾选Upload independent control image选项,则代表使用上面所上传的参考图片作为控制类型的参考图。
点击生成,可以看到生成的图片虽然增加了一些细节,但还是很好地还原了原图。
这是因为tile会逐块去解析语义信息、从而限制全局提示词对分块采样绘制的影响,在还原图片时则会表现得更加准确。
如同上面演示的例子,使用放大算法放大图像的同时使用Tile控制类型进行控图,这是tile控制类型最典型的使用方法。
该方式不仅可以优化图像细节的同时不会影响画面结构。并且由于采用了分块重采样与放大的方式,也能有效减少绘制图片过程中的显存占用,是绘制高分辨率图像的重要手段。
需要注意的是tile控制类型在分块采样绘制图像时,也会增加一些细节,所以与原图并不是完全一致。比如这里生成的图片中人物的眼睛就变大了。
另外,虽然我们经常会在图生图模式中使用tile结合放大算法来生成高清图像,但在文生图模式中我们同样可以使用tile控制类型来控制绘图过程。
tile控制类型不仅仅适合人物,对物品的细节处理也非常优秀,只需要选择好合适的基础模型即可。
我们举例演示一下,
比如这里有一幅低分辨率的行李箱图片,图片原始分辨率为512*512,我们可以通过tile_resample结合sd upscale去提升图片分辨率,
使用写实模型,填写简单的提示词bright background, a Luggage,重绘幅度设置为为0.3,启用tile_resample与sd upscale,sd upscale放大倍数调整为4。
点击生成,stable diffusion将绘制出高分辨率的行李箱图片
tile提供了多个细分预处理器。
我们通过在文生图模式下使用tile控制类型控制图像生成来做一下对比
我们填写简单的提示词1girl,启用controlnet,并上传控制图像,
先使用tile_resample预处理器,点击生成,可以看到生成的图片人物衣服的颜色可能发生较大偏移。
将预处理器更换为tile_colorfix,这个预处理则主要用于解决颜色偏移的问题,tile_colorfix 可以更好的控制颜色偏移程度)。tile_colorfix 增加了一个名为 Variation 的参数,可以控制每个tile之间的色彩变化,值越小,tile色彩变化越小,值越大瓦片的色彩变化越大,我们可以根据所需要的颜色变化力度来设置该值。比如我们这里使用较小的Variation,点击生成,出图时与原图的颜色偏差就会比较小。
tile_colorfix有时候生成的某些图像细节可能会过于柔和,
使用tile_colorfix+sharp可以使生成的图像更加锐利。
tile_colorfix+sharp增加了一个Sharpness选项可以控制图像的锐化程度,我们这里调整为0.8,点击生成,看一下效果。
在tile项的预处理下拉列表中还有一个blur_guassian预处理器。
可以在预览图中看到预处理过程会将原图高斯模糊处理,然后再据模糊处理后的图片像素去控制图片绘制过程。
绘制图片时,AI也会尽可能从模糊的像素中去还原图片,该预处理可以通过sigma选项调整高斯噪声效果。
我们可以利用该预处理器实现一个有趣的功能,比如我们上传的图片背景是比较模糊的,我们可以使用该预处理器将整体图像高斯模糊预处理后再控制图像绘制,通过调整sigma选项,可以使绘制出的图像背景与背景中的元素变得清晰。
我们演示一下
还是使用刚才的人物图作为控制图像,可以看到该图像背景是比较模糊的,我们使用blur_guassian预处理器,提示词和参数不变,然后将sigma值调整为5,
点击生成,可以看到绘制的图片背景内容变得更加清晰。
使用blur_guassian预处理器,图片整体构成不会发生太大变化,但是颜色和某些细节可能会有较大的偏移,我们可以调整sigma参数平衡出图结果。
二:Recolor
讲解完tile,我们再学习一个控制类型Recolor。顾名思义,recolor控制类型可以对图片重新上色,我们可以使用该预处理器给黑白照片上色,也可以给彩色照片重新上色,重新上色时还需要提示词来配合。
recolor需要自行下载对应的模型文件,下载地址为
https://huggingface.co/lllyasviel/sd_control_collection/tree/main
还需要特别注意的是recolor模型文件分为SD1.5版本和SDXL版本,
其中ioclab_sd15_是sd1.5版本,sdi_xl_recolor是SDXL版本,且SDXL版本有128lora和256lora两个模型,这两者都可以使用,带有lora字样,是指该模型在训练时引入了lora训练方法。
我们继续演示recolor的使用,文生图中,启用controlnet,上传参考图,选择recolor后,模型部分还需要自己去选择,因为使用的是基于SD1.5的大模型,我们选择下载好的SD1.5 iolab_sd15_recolor这个模型,点击预览按钮,可以看到预处理后的图片已经去除了颜色信息。
点击生成,可以看到,stable diffusion给照片重新上了颜色,
recolor的一个有价值的用途就是给黑白老照片上色,我们可以上传黑白老照片,然后让recolor帮我们给黑白老照片上色,
比如我们这里有一张黑白老照片,文生图模式下,启用recolor控制类型,并上传老照片作为控制图片,这里控制参考图像的分辨率为640*456,点击上传图片与预览图片下方的箭头图标可以快捷设置目标图像的分辨率为控制图像的分辨率
这里可以不填写任何提示词,点击生成,可以看到,stable diffusion给老照片上了颜色。
我们可以使用stable diffusion进一步帮上色后的老照片提升分辨率,使图片更加清晰,提升分辨率的方法有很多,我们在之前的课程中已经讲述,这里就不再演示。
recolor有两个细分预处理器,recolor_luminance和recolor_intensity我们看一下对比
recolor_luminance 提取图像特征信息时注重颜色的亮度,
recolor_intensity,提取图像特征信息时更注重颜色的饱和度。
我大部分情况下使用recolor_luminance效果更好。
提示词污染与打断提示词
这里,我们补充一个关于提示词污染和打断提示词的知识点,我们在使用recolor时有时会借助提示词来引导上色。但很多时候recolor无法保证颜色准确出现在特定位置上,可能会出现相互污染的情况,比如控制类型使用recolor, 提示词中添加颜色信息引导AI绘制颜色,(1 girl, green clothes, red hair),
这里的提示词增加了绿色衣服,红色头发描述,但是此时生成的图像,人物头发可能会出现了绿色,
这就是提示词污染。针对提示词污染问题,我们可以设计打断提示词:
1 girl, green clothes, BREAK red hair,
提示词中增加了BREAK关键字对不同部分进行打断,该技巧能有效减少提示词污染的概率。点击生成,可以看到头发区域的绿色基本没有了。
recolor增加了一个选项Gamma Correction
翻译成中文是伽马修正,该选项用于调整预处理时检测的图像亮度,我们可以看一下对比,可以看到随着Gamma Correction数值减小,预处理后的图像亮度会增加,生成的图像也会更亮。
三:局部重绘控制类型
本节课程最后,我们再讲解一个控制类型-局部重绘
该控制类型与图生图里的局部重绘功能是类似的,但是controlnet的局部重绘通过更优秀的算法将重绘的地方与原图融合得更好。controlnet的局部重绘通常与图生图局部重绘配合使用,
我们演示一下,图生图模式中,上传一幅图片,该图片中包含了草原,大树,和人物,但是我们想把人物从这张图中擦除,我们可以使用局部重绘,将人物涂刷,修改提示词grassland big tree ,反向提示词中添加human,引导AI在生成的图像不要绘制人物元素,点击生成,可以看到,重绘后,人物的确没有了,但是重绘的区域与原图融合效果并不好,有时候甚至会多出一些完全不协调的元素。
这个时候我们可以使用controlnet的局部重绘控制类型,其中controlnet并选择局部重绘,预处理器选择inpaint_global_harmounious,这里我们不需要上传图片,stable diffusion默认会使用原图做参考,
点击生成,可以看到,此时绘制的图片融合效果明显要优于未使用controlnet局部重绘时生成的图片。
局部重绘根据采用的算法不同,提供了几种细分预处理器,我们对比一下使用这几种预处理器绘制的图像
一般来说inpaint_global_harmounious效果比较好,也使用得最多,
inpaint_only 融合能力通常不如inpaint_global_harmounious
inpaint_only + lamas融合能力比 inpaint_only要更加优秀,在某些场景,也可以实现较好的效果。
好了,本节课的课程到这里就结束了,我们做一下总结,本节课程我们陆续讲解了放大图像时可以增强细节的tile控制类型,可以给黑白老照片上色的recolor控制类型,以及能够帮助图像融合更加自然的局部重绘控制类型。这些控制类型为非常多的实际应用场景提供了有针对性的解决方案。下期课程,我们继续探讨另外几个controlnet控制类型,包括revision,instructp2p,ip-adapter,t2i-adapter,这些控制类型不仅各具特色,提供独特的图像控制方法,同时也从多个角度增强了Stable Diffusion的应用能力。