0x00 导航
鉴于 AI 绘画的知识点较多,限于篇幅及便于分类组织,我会以一个系列文章的形式记录:
- 系列 01:《AI 绘画原理与工具》
- 系列 02:《AI 绘画模型扫盲》
- 系列 03:《AI 绘画模型推荐》
- 系列 04:《文生图:不会念咒的炼丹师不是一个好画家》
- 系列 05:《图生图:突破次元圈限制》
- 系列 06:《高清修复:轻松拥有 24K 钛合金画质》
- 系列 07:《提示词进阶:渐变|交替|混合》
- 系列 08:《LoRA 专题:五大应用场景》
- 系列 09:《LoRA 训练:不会炼丹的魔法师不是一个好画家》
- 系列 10:《ControlNet: 姿态控制》
- 系列 11:《ControlNet 进阶:打造炫酷的艺术字和二维码》
- 系列 12:《AI 动画初探:整个宇宙为你而闪烁》
你当前正在阅读的是系列 06《高清修复:轻松拥有 24K 钛合金画质》
0x10 高清修复方法
相信经过几节的讲解,大家对 文生图 和 图生图 都已经有基本的认知和操作能力了,过程中也提到设置分辨率、使用提示词去提升画面质量等等。
但是实际用下来发现,分辨率拉得太高、显卡崩坏;使用高清提示词、AI 很多时候也是力不从心。
看到别人分享的图片各种清晰的细节溢出屏幕栩栩如生,自己用同样参数生成的图片却糊成一团惨不忍睹。要知道,低分辨率的图像是没有空间画细节的,高分辨率钱包又不允许,难道没有好的显卡就不配拥有高清吗?
别担心,只是你还没学会运用高清修复而已。
SD-WebUI 为了提高绘画产出图像质量,专门提供了几个功能用于修复图像的分辨率:
- 文生图: Hires.fix
- 图生图: 放大分辨率
- 任意图: 附加功能
- 扩展插件:MultiDiffusion
0x20 文生图:Hires.fix
现在通过文生图生成一张图片:
乍一看好像蛮好看。但你仔细看会发现,铠甲的纹理有些糊掉了,局部显得有些模糊,皮肤也不如真人般那么质感。
文生图里有一个内置的功能「高清修复(Hires.fix)」,勾选后会出现一组新的配置参数:
有了前面的基础,这些配置项其实很容易理解,除了放大算法。
其实放大算法和采样算法一样,没有绝对的好坏,出来的效果其实都差不多,你需要自己去试。但是网上流传着一个说法是:无脑选择 R-ESRGAN 4x+
算法就好,如果是二次元就选择 R-ESRGAN 4x+ Anime6B
。
R-ESRGAN 4x+ 是什么?
R-ESRGAN 4x+ 的全名是 “Residual Enhanced Super-Resolution Generative Adversarial Network”,我们可以把它简单理解为三部分:
Residual Enhanced
:通过学习图片中的细微差别(残差),用这些差别来帮助提高图片的清晰度。Super-Resolution
:主要任务是提高图片的分辨率,也就是让图片变得更清晰。Generative Adversarial Network
:使用生成对抗网络(GAN)模型,这个模型有两个部分,生成器和判别器:- 生成器的任务是从低分辨率的图片中生成高分辨率的图片。
- 判别器的任务是判断生成器生成的图片是否足够接近真实的高分辨率图片。
这两个部分会互相竞争,生成器尝试生成越来越好的图片,而判别器尝试越来越好地判断图片的质量。通过这种竞争,模型能够不断提高生成高分辨率图片的能力,这也是这个算法的核心原理。
最后 4x+
是指可以把图片放大 4 倍以上,而且放大后的图片会比原来更清晰。
重新点击生成,如果细心观察它的生成过程,你会发现在进度条 50% 左右的时候, SD 是先绘制了一幅低分辨率的图像,然后在此基础上重绘高清的图像,其实很像图生图。
我们对比一下修复前后的两张图,可以很明显地看到铠甲纹理、头发丝、脸部皮肤都多出了很多细节:
但是人物表情稍微变了,这是因为高清修复的重绘幅度大了,将其调小一点就好。
高清修复会导致生成速度变慢,建议如果没产出自己喜欢的图,先不要勾选修复;遇到喜欢的图之后,固定随机种子、再使用高清修复。
0x30 图生图:SD Upscale
图生图是没有「高清修复」选项的,因为从文生图的高清修复原理来看,图生图本身就是高清修复:只需要在重绘目标图像时,等比例增大图像的分辨率就可以了。
用上一节的猫娘做参考图。
这里有个技巧是,对于已经生成过的图片,可以在「图库浏览器」找到它,然后再点击右下角的「>> 图生图」按钮,便可一键把所有出图参数带过去:
然后在图生图最底部的「脚本」中选择 SD Upscale
,会出现一组新的配置参数:
配置参数需要注意的有两点:
- 重绘幅度:不要过高,不然图片会变形
- 图块重叠的像素:
SD Upscale
放大的原理其实是把图像切片放大、再拼接的,重叠像素就是指切片间接驳的区域大小。
例如当前「缩放系数」为 2,即放大 2 倍、亦即宽高在原来基础上 x2
,反映到图像本身就是被切成 4 块后、再逐块放大:
想象一下,如果这 4 块都是刚刚好的尺寸,拼接起来后,接缝处的过渡就会很不自然,即使差一两个像素也能看到很明显的分界线,有一种撕裂感。
但是如果这 4 块都多预留了 64 像素的边沿,像素颜色过渡就可以得到缓冲,拼接后的图像看起来会更平滑。
需要注意的是,图片放大前的宽高均需手动加 64(根据重叠像素而定),否则重叠是没有效果的,看上去就像这样:
重叠区域的大小需要根据实际情况设置:当你明显看到边界,说明重叠区太小了;当你没看到边界、但拼接位置附近的画面很违和,说明重叠区太大了
现在看看正确配置后、高清修复的效果,很明显的衣服上的蕾丝透明度画出来了,人物表情更细腻,甚至相框和书本的内容也更清晰了:
0x40 任意图:附加功能
「附加功能」里面其实也存在一个图片放大功能,而且因为它不涉及重绘的过程,所以不需要任何提示词、适用于任何图片(包括非 SD 生成的图片)。
究其原理只是纯粹再拉伸放大的基础上适当对色块和线条的边缘做了模糊处理,和其他工具的放大原理差不了太多。
有个特别的地方是,这里可以同时选择两种放大算法:
- 可以只选择「放大算法1」,留空「放大算法2」
- 可以不留空「放大算法2」,但其可见度(类似权重)需要
>0
才能起到效果
这种放大方式因为不涉及扩散过程,所以只是分辨率被拉大了,细节是没有增加的,就不放对比图了。
0x50 扩展插件:MultiDiffusion
需要安装 MultiDiffusion 插件才能使用,它可以实现从 512 像素到 2K、4K 甚至 6K 画质的飞跃。
安装插件后可以在出图参数中看到多了两个区域,其实这个插件是由两部分组成的,其中:
- Tiled Diffusion: 负责扩散生成图像
- Tiled VAE: 负责编码和解码
其原理也可以从其名称中的 Tiled 看出来: 把图像进行 Tiled(区块化)处理。
Tiled 放大原理
Tiled Diffusion 中与 “区块化” 相关配置参数:
- 潜变量分块宽度: 默认 96,一般范围在 64-160 之间的正方形即可
- 潜变量分块高度: 默认 96,一般范围在 64-160 之间的正方形即可
- 潜变量分块重叠: 默认 48; Method 选择
MultiDiffusion
时设置为 32 或 48;选择Mixture of Diffusers
时设置为 16 或 32
亦即在默认情况下,原图会被分割为 N 个 96x96
像素的区块,这些区块与相邻区块之间重叠区域为 48 像素,而所谓的 “相邻” 是指 “上下左右” 四个方位,如下图:
Tiled 在绘制区块的时候,并不是每次移动一个完整区块的距离的,而是仅仅移动重叠像素的距离。
这样有个好处是,每次绘制小区块时,至少有一半的区域已经绘制完成了,剩下的未绘制区域会参考已绘制区域进行绘制,确保放大后的内容在绘制时会有所关联。
如果完全没有重叠,放大后各个区块之间就会出现明显的接缝。
显然,划分的区块越大、绘制速度越快;重叠区越大,绘制块数会增加、绘制速度越慢、但放大后的边界越平滑。
那到底设置多大才合适呢?
其实大部分模型无法直接有效绘制分辨率在 1280x1280
以上的大图,因此作者建议把潜变量分块设置为不大于 160x160
。
160 是把 1280 按照 8 倍的换算比例(潜空间编码的缩减因子)压缩至潜空间内的区块大小。
重叠区默认是分块宽高的一半,即不超过 80(除非出现明显的接缝再适当增加)。而且 Tiled Diffusion 因为引入了高斯平滑处理,所以理论上重叠区域可以设置得更低。
具体使用方法为:
- 在「文生图」或「图生图」启用「Tiled Diffusion」和「Tiled VAE」
- 对于「图生图」把重绘幅度调低到 0.3 左右
- Tiled Diffusion 配置:
- Method: 选择
MultiDiffusion
可满足大部分情况 - 若搭配 ControlNet 一起使用时,可勾选
Move ControlNet tensor to CPU
,可以有效降低显存 - 放大算法: 真人选
R-ESRGAN 4x+
,二次元选R-ESRGAN 4x+ Anime6B
- 勾选
Enable Noise Inversion
: 可最大限度确保画面整体构图在放大后不会改变
- Method: 选择
- Tiled VAE 配置:
- 编码器图块尺寸: 除非报错爆显存(CUDA Out of Memory)可以调低,否则不变
- Fast Encoder Color Fix: 当图片放大后变得灰暗和不清晰时,才勾选
- 放大倍率设置:
- 方法一: 取消勾选「保持输入图像尺寸」,直接设置宽高为放大后期望的分辨率
- 方法二: 勾选「保持输入图像尺寸」,调整「缩放系数」
没有提及的配置都保持默认即可
这里还是放大前面的女将,可以看出因为 Tiled 提升了分辨率、多了亿点点细节,包括人物脸上的妆容、环境光照、背景的樱花等,都一清二楚:
0x60 总结
高清修复 | 优点 | 缺点 |
---|---|---|
Hires.fix | 1. 不会改变画面构图 2. 没有多人/多头等由分辨率过大产生的问题 3. 直观、易于操作 |
1. 受到最大显存限制 2. 计算速度相对较慢 3. 偶尔会擅自在画面添加额外元素 |
SD Upscale | 1. 可以突破显存限制获得更大分辨率(最高 4 倍) 2. 画面精细度高,对细节的丰富效果出色 |
1. 需要使用随机种子固定构图 2. 分割重绘的过程较为不可控(分界线割裂) 3. 不太直观、操作繁琐 4. 偶尔会擅自在画面添加额外元素 |
附加功能 | 1. 简单方便、随时可用 2. 计算速度块、无重绘压力 3. 完全不改变图片内容 |
1. 无法为图片绘制更多细节 |
MultiDiffusion | 1. 相比 SD Upscale 速度更快、占用显存更小、可绘制 6k 画质 2. 可配合 ControlNet 出图 |
似乎没有 |