![](http://aicdn.uxlib.cn/wp-content/uploads/2023/09/frc-5569780a0f0e12a3114f987ef56be480.png)
最近有群友又和公司IT掐架了,非要把ta的聊天记录发出来找我评评理,我看完之后沉默了好久。 心想,现在群友都这么会的吗?这么会用连环计,这么会钓鱼的吗?行,还是得早点把高清放大这件事,尽早安排了。
▍图糊全是我的错
经过前面的基础学习和一些实战我们能基本了解SD的生图操作,而生图的结果经常出现扭曲,模糊的通常原因只有2个:
1. 分辨率设置太低。
WebUI默认的分辨率是512×512的,这个尺寸在今天的显示设备上来说,显然太小了,不管是默认还是被放大了都会显得很模糊。所以我们需要适当的加大分辨率。多少合适?这个我们后面会讲。
2.关键词太少。
根据diffusion扩散模型的工作原理,我们知道绘制一幅图片,需要有足够多的内容填充。尤其是图片质量关键词会起到很大幅的加强图片质量的作用。与MJ不一样,SD很多模型需要你手动输入一些质量关键词,这也是我们总在别人的魔法里看到下面这些词的原因。
你可以复制它们作为每次生图的通用起手包:
(masterpiece, highres,high quality, high resolution),High detail, |
你还可以在反向关键词里添加低质量,模糊等不希望出现的词,给一些词增权重加强画质,但需要注意的是,质量关键词不宜过多,一来占用token,二来有些画风不适合会过于“油腻”,写一套简洁的prompt其实也是一门学问。
▍分辨率多大合适?
1.更大的分辨率意味着更多的像素细节。
通常1000以上的分辨率是目前主流显示设备的舒适尺寸。2000以上就属于十分高清的图片。下图对比x2倍放大前后的差别:
2.同时也意味着更多的生成时间。
和更大的显存消耗。甚至你的GPU显存无法承受。以8G显存为例,超过1024×1024的图片就有概率爆显存,这份不稳定还会受到你电脑在运行其他工作的影响。下图为生图分辨率512和1500的显存占用对比。
![](http://aicdn.uxlib.cn/wp-content/uploads/2023/09/frc-e8623b3bc1615010877393f9f0914331.png)
3.更大分辨率不见得能产出符合要求的图片。
在显存足够的前提下,也并不是一味拉大分辨率就能得到最够好的图,原因是很多模型在训练的时候使用的是512的训练集,模型学习到的内容在你拉大画布之后ta认为内容不够需要更多内容来填充,从而导致下面的情况发生。怎么解决,后面会说。
所以,具体多少分辨率需要根据你的任务需求来,如果在风格探索,模型尝试上可以使用默认的分辨率来光速抽卡,需要作业生产的时候就要使用到SD的一些牛*插件来帮助我们进行高清放大。
▍高分辨率放大
高清放大我主要介绍4种方法。1个文生图(txt2img)用,3个图生图(img2img)用。
1.Hires.fix
首先介绍文生图插件Hires.fix,这个是WebUI的作者,大神Automatic1111整合在WebUI中的,也就是你自己部署而非懒人包程序都能使用的SD“原生”插件。
怎么使用?
只需要在生图参数设置中找到Hires.fix(高清修复)勾选框,将其勾选就启动。
这里会多出6个参数。
-
放大算法:这里如同之前教程讲到的采样方法一样。参见 它们都有啥作用(参数设置篇),放大算法也有各自的优劣,但没有准备到相关知识,这里就建议真人放大用R-ESGAN 4x+,二次元用R-ESGAN 4x+ anime6B,模型有提示用Letent家族就照做。啥都不知道的无脑选ESRGAN_4x。 -
高分迭代步数:默认为0,0代表使用默认采样步数,默认就好。 -
重绘幅度:对,Hires.fix本质就是在默认分辨率上进行一次潜在空间的图生图重绘。一般默认即可,如果重绘之后容易出现错乱重叠情况下可降低到0.3-0.5之间。原理是使用默认分辨率对方法分辨率进行一块一块的重绘,所以太高的重绘幅度有时候会放飞加戏。太低会出现模糊不清。
-
放大倍数:在下面设置的分辨率基础上进行倍数的放大,默认为2倍。
-
最后2个是设置放大到什么分辨率,与放大倍数互斥,就不多说了。
所以,我们只需要开启高分辨率修复(通常都默认即可),便可以得到一个2倍放大的图片,这里重点的第三个问题,我们也得到了一组效果可能还不错的大分辨率图片。一个字,绝!
需要注意两点:
-
Hires.fix 只能在文生图使用,不能在图生图等其他生图场景下使用,原理上面也介绍了(当然你也在别的地方找不到它)。
-
Hires.fix 不能解决的第二个问题,也就是放大后的分辨率仍然受限于你显卡的显存,并且,因为分步生成的逻辑,生图时间也只多不少。
最佳实践:
上面也提到,在目标还不明确的时候,最佳方式就是默认512分辨率,光速10连。遇到好的再使用图生图放大。(看后面3种放大方式)。
有群友抬起了倔强的头颅,我就压根不懂啥是图生图,我就头铁文生图!碰到好看的图,我咋个放大?
放心,我最佳实践的骚话不是白叫的。你可以在生图结果下方的参数中找到相中的那张图的种子(seed),在生图的所有参数不变(把“所以”说三遍以示强调)的前提下。把种子数值填入随机数种子(seed)中,替代那个-1.
![](http://aicdn.uxlib.cn/wp-content/uploads/2023/09/frc-961678a3d494f625b6be3e4cb5d0142c.png)
![](http://aicdn.uxlib.cn/wp-content/uploads/2023/09/frc-8254cafc3dd3141b7131f0b2ef4cbff1.png)
ps: 你也可以,在文件夹/图片查看器/启动器快捷入口,中直接去浏览到你需要的那种图,复制到PNG图片信息中,然后点“发送到 文生图”。也能得到上述操作(包含种子)
![]() | | ![]() | ![]() |
然后勾选Hires.fix 开启高分辨率修复。这里的参数可调,(如果原图画面不错,只是为了放大,就把重绘幅度调在0.3-0.5之间)。
这样你就能在光速抽卡中,通过种子数和参数设置,精准的找到到你的SSR,并放大它了。
|
介绍完文生图的放大方式,就要介绍三种有图片的前提下,将图片放大的方式。他们的放大质量各自不同,使用方法也各有优劣。
2.后期处理放大
首先是在WebUI顶部tab上找到第三个tab,叫后期处理(也有版本叫附加功能)。ta有这么一个界面,操作也很简单,把图片放进去,在下面选择缩放比例,2个采样器,任选一个即可。
忽略最后面的移除背景,那是一个抠图插件,以后可能会说。
看到最顶上的批量处理了吗,这个放大默认自带批处理。是优势之一,速度也比较快。但是这个放大其实很多时候不太满足我们的需求。因为:
通过上面的图,我们发现这种放大方法,就单纯的把像素增多,画面拉大后填入原始像素(有点像某手机厂商主打1亿像素的拍照手机一样),并不会对画面细节做补充,有些时候你可能只感觉到了一点点锐化,对比其他放大采用切块区域重绘再生成的方式,就少了很多细节。
所以什么场景下使用后期放大:
-
有批处理需求,&有速度要求,不能忍受等待。
-
有对原图极度追求还原,不希望有一丝丝改变的可以使用。
其他场景不建议(细节缺失)。我们往后看。
3.SD Upscale
说SD放大之前,需要补充一个小知识,图生图本身就具备放大功能,只要改更大的分辨率以及在设置里修改放大算法即可,但这个小知识没啥大用。
SDUpscale又称SD放大脚本,位于图生图tab中,生图设置的最下方,有个叫“脚本”的选择器,点开就能找到。
![](http://aicdn.uxlib.cn/wp-content/uploads/2023/09/frc-ef731fec68801db3aa8e33b10ae44186.png)
你的可能更好找,没有这么多其他脚本干扰。
作为过去很长一段时间都是我最常用的图片放大工具,SD放大拯救了太多鬼畜和模糊的图片了。它的工作原理与Hires.Fix退回重绘不同,ta将要被放大到的尺寸按参数切割成4块。对每个分块单独生成,然后再将分块拼接成一张大图。所以这种方式对于低显存进行大分辨率的创作是很友好的,用来应对分辨率多大合适>的第二个问题的,对小显存来说很重要哟。
打开脚本后会出现三个简单的设置项,其中
-
分块重叠像素宽度:就是上面工作原理的每一个独立重绘的部分与其他部分的重叠像素是多少,这里决定了最终图片的拼合自然度。常规分辨率下就默认64即可。 -
放大倍数:放多大,不多说。 -
放大算法:参考上面的fires.fix。
-
处在图片分界线的部分,尤其是脸,手等细节精度高,有很大概率出现鬼图(多脸,多手)的情况,解决办法就是降低重绘幅度(Denosing)在0.3-0.5之间。超过0.7AI会根据模型特征随意发挥。
-
图生图的关键词,以及参数设置对放大的结果是会产生影响的。可以复制生成图片的原始关键词和参数,也可以根据需求修改关键词,权重。这些会在放大重绘的时候补充或者调整生成。
SD放大最大放大4倍,也无法对分割区块和重叠区域做更细的设置,如果需要更加进阶的可以下载并使用ultimate-upscale脚本,妥妥的进阶版SD放大,解决上面说的几个问题,下载方法可以在拓展中心就能搜索到,文末也会提供下载。但日常SD放大脚本已经足以应付大部分图生图的放大需求了。
|
4.Tiled Diffusion
最后是大魔王来了,Tiled Diffusion,这个插件的同样在拓展中心可以搜索到,而且最新的整合包也会把这个“利器”整合进来。与其他放大插件的位置又不一样,它是由2个插件项组成,放置在生图参数下面,对,和ControlNet放在一块,你能点击展开,查看并改动设置,开启关闭插件的交互方式也和ControlNet一致。
其中Diffusion负责扩散,VAE负责编码和解码(最早的原理文章有讲,Stable Diffusion的工作原理(理论篇)),如果你没有特殊需求,只是放大的话,这两个组件都需要开启。Tiled的意思是“瓷砖,瓦片,区块化”的意思,所以其工作原理与上面介绍的SD&ultimate放大相似,都是将需要被放大的分辨率分割成一块块的进行分别生成,这样能大大降低显存压力,与他们不同的是,Tiled生成速度更快,控制力更强,所以是当下最优秀的放大方式,当之无愧的大魔王。
看看如何设置相关参数
Tiled VAE:
勾选启用后,通常是不用调整任何参数的。但有2种情况需要调整。
-
在爆显存(控制台显示CUDA out of Memory)时,可以适当降低编码区块大小,减少显存的占用。
-
图片颜色灰暗的&切块很小的时候,可以勾选最下面中间的快速编码器颜色修复。
选启用后,看到下面的设置,借助上面我对SD放大的了解,我们可以更容易的知道Tiled的设置分别意味着什么,实际设置其实还是那2个主要参数,还是基本过一遍。
![](http://aicdn.uxlib.cn/wp-content/uploads/2023/09/frc-996e07e1627269705894e55d90be977a.png)
(文生图设置)
![](http://aicdn.uxlib.cn/wp-content/uploads/2023/09/frc-5f52c54f024491f29edb078ec77b48a8.png)
(图生图设置)
覆盖图像尺寸:不勾选的话是无法进行分辨率放大的。勾选后可以设置宽和高,将其设置为希望放大的尺寸。(注意图生图中有直接放大的倍率和放大算法就不多介绍,文生图可直接改成调宽高。)
方法:为切块和重叠的处理方法,默认为MultiDiffusion,另一个是Mixture of Diffusers,2种方法后者引用高斯平滑,所以重叠的大小可以设置得偏小一些。默认即可。
空间分块的宽度&高度:这里就是切块的大小,建议正方形,插件作者推荐常规使用96-128之间生图速度比较快。(越大越快,越小精度越高)
分块重叠:重叠大小,和处理方式有关,使用MulitDiffusion调32、48,选Mixture of Diffusers,则调16、32。可据实际需要灵活调整。
分区提示控制以及图生图的噪声反转稍微复杂,以后再聊。
很强,很简单,最后补充几个注意点:
-
Tiled Diffusion虽然更推荐图生图放大使用,但也能在文生图中用,只是因为绘制原理导致会出现多人,多手的鬼图,可以配合ControlNet的Tile食用。
-
Tiled Diffusion是可以配合Hires.fix进行放大的,放大倍率是叠加乘算的。但本身不推荐文生图使用,且放大可以直接调高Tiled分辨率,所以意义不大。 -
不要在主提示语中包含任何具体对象,否则结果会很糟糕。只需使用像“highres, masterpiece, best quality, ultra-detailed 8k wallpaper, extremely clear”之类的词语。原因见第一条。
|
好了,最主流的高清放大放大都掌握了吗?
接下来生成的图还会糊的一批吗?
嗯,可以去跟IT哥哥道歉了
最后
部分杜撰场景如有巧合纯属巧合。感谢群里的小伙伴出品与授权与友情出演。
如果对SD防灾对策群感兴趣的也可以关注公众号给【小鱼干了】私信微信号,我看到了会加你,拉你们进来一起开放,学习,共同进步。
文章中提到的插件资源,公众号回复【下载】即可。
下期见!~