AI 绘画 Stable Diffusion 高清放大方法与工作流详解
本章概述
在 Stable Diffusion 中,当我们想要得到一张高分辨率且具有细节特征的图片时,需要使用图片放大算法来帮助我们实现。本文主要概述在 SD WebUI 中常用的高清修复方法以及不同方法的区别和应用场景,并给出推荐的工作流,用户可以根据自己的硬件情况和需求选择适合的方法。
几种不同高清修复方法
下面几种方法的测试统一是在 SD WebUI 界面,512*512 基础分辨率,20 步迭代步数,Restart 采样方法下进行。提示词如下(适用于真人图片的起手式):
正面提示词:
best quality, masterpiece, (photorealistic:1),ultra high res,highres, illustration. media, delicate,8k wallpaper,soft light,official art, (realistic:1.2),1girl,
负面提示词:
EasyNegative, paintings, sketches, ugly, 3d, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, manboobs, backlight,(ugly:1.3), (duplicate:1.3), (morbid:1.2), (mutilated:1.2), (tranny:1.3), mutated hands, (poorly drawn hands:1.3), blurry, (bad anatomy:1.2), (bad proportions:1.3), extra limbs, (disfigured:1.3), (more than 2 nipples:1.3), (more than 1 navel:1.3), (missing arms:1.3), (extra legs:1.3), (fused fingers:1.6), (too many fingers:1.6), (unclear eyes:1.3), bad hands, missing fingers, extra digit, (futa:1.1), bad body, double navel, mutad arms, hused arms, (puffy nipples, dark areolae, dark nipples, rei no himo, inverted nipples, long nipples), NG_DeepNegative_V1_75t, pubic hair, fat rolls, obese, bad-picture-chill-75v,(without clothes)
一、文生图高清修复
在文生图的界面里,我们可以在一开始就指定将图片进行放大。打开高清修复后,会看到以下参数设置。
关于这里的放大算法,比较推荐使用以下几种(其中 Anime6B 一般用于二次元风格):
- 4x-ultrasharp: 需要额外下载,建议放在
sd/models/ESRGAN目录下。 - R-ESRGAN 4x+: 通用性较好。
- UltraSharp: 细节增强明显。
以下是这几种放大算法跑出来的效果图对比,可以看出其实差距都很小,对于不同风格的结果会有所区别。对于细节把握要求较高的用户,可以尝试使用 XYZ 脚本跑出最适合的参数。
二、后期处理缩放倍数
这个功能经过测试,对于图片细节的处理不是太理想。不过可以通过其他方法先将图片修复到一定程度后再使用该功能,因为后期处理速度很快,且可以无限制扩大尺寸。
比如下图,未经过处理和经过处理后的结果对比:
那后期处理这块是不是没有用了呢?也不尽然,这里一般可以用来处理照片的裁剪或老照片修复。
三、图生图放大倍数和几个 Upscale 脚本
方法一:放大倍数
来到图生图界面,缩放模式选择仅调整大小,这里我们可以修改重绘尺寸或者直接指定重绘尺寸倍数。需要注意的是,因为是基于原图进行处理,所以这里固定好 seed 值以及降低重绘幅度。
刚刚那张照片的处理结果如下:
方法二:使用 Sd upscale
打开脚本我们选择 upscale。打开以后看到以下几个参数选项,upscale 是将一张图片分为多个区块然后进行分别放大,最后再组合起来。
这里的分块重叠像素宽度是用来避免最终成像会有明显的接缝,因为是分块绘制嘛,最后还需要拼接的。一般维持默认即可。不要忘了选择放大算法,否则不会生效。
这个方法现在基本也被淘汰了,因为可能出现一些未知的情况。为什么会出现这种情况呢?因为它是分区块进行放大的,每个区块就可能按照 AI 自己的想法加入一些奇奇怪怪的玩意,结果就不可控了。虽然我们减少区块的大小,但最终的结果可能还是难以预料的。
方法三:使用 Ultimate SD upscale
该方法是 Sd upscale 的升级版,也需要额外下载,在扩展中搜索 Ultimate 就可以看到了,安装后记得重启 UI 界面。 来到图生图界面,使用的还是之前的照片参数,降低重绘幅度和固定种子。然后在脚本中找到 Ultimate SD upscale。
放大前与放大后的效果对比显示,效果还不错。在这个脚本里涉及一些参数,有时候需要根据图片的最终成像来进行调整,具体说明如下:
- Target size type: 定义最终图像的大小来源。
- From img2img settings: 使用默认的 img2img 宽和高设置。
- Custom size: 自定义宽高设置,最大值是 8192。
- Scale from image size: 以初始图像大小为基础进行缩放。(大多情况下直接使用这个)
- Redraw: 图像重新绘制的设置。
- Linear: 所有小块逐个、逐行逐列地处理。
- Chess: 所有小块按棋盘模式处理,这样可以减少接缝产生的几率。(常用选项)
- None: 禁用重新绘制。
- Upscaler: 在重新绘制之前放大图像。推荐使用 ESRGAN 来增强现实感的图像,对于其他的图像推荐使用 R-ESRGAN 4x+。也可以使用 4x-ultrasharp。
- Type: Tile width/height 要处理的小块的宽和高。对于 2k 图像,512px 通常就够了。
- Padding: 在处理一个小块时,会考虑多少像素的邻近小块。
- Mask blur: 用于小块蒙版的模糊程度。如果你看到接缝,可以适当调整这个值。
- Seams fix: 对于结果图像中可见的网格,通常不需要使用它,因为它只是另一种重新绘制方法。
- Bands pass: 主要处理接缝(行和列),需要的时间比较短。
- Half tile offset pass: 与重新绘制相似,但有一半的小块偏移。
- Half tile offset + intersections pass: 先运行 Half tile offset pass,然后对交叉点进行额外的处理。
这个脚本也可以搭配 ControlNet 的 tiled 进行使用,细节会更丰富些。
四、Tiled Diffusion 脚本
该脚本需要另外下载,一般搭配 Tiled VAE 一起使用。如果没有下载的童鞋可直接在扩展中搜索下载。下载后可在文生图和图生图中查看到。
放大的话一般先在文生图中生成一张满意的图片,然后发送到图生图中。不要忘记降低重绘幅度和固定种子。
我们打开脚本,然后点击启用,关于这里的参数设置先保持默认。不要忘记选择放大算法。对于显存较大的同学可以将 Tiled Diffusion Latent tile 改为 8,这样处理的速度会快很多。
这里我们放大两倍,点击生成。效果如下:
其实为了细节的更好处理,我们可以在这里再加入 ControlNet tile,效果会更好。因为 CN tile 往往会产生更多的细节,MultiDiffusion 会更多的修饰原图而缺少足够的细节。两者的适当结合会产生非常好的效果。
可以看出来,人物的真实感更加强烈,且增添了一些细节。
上面的图像我们是在默认的参数下生成的,其实官方有给一些推荐的参数设置,具体如下:
- Denoising Strength >= 0.75
- Method = Mixture of Diffusers, Overlap = 8
- Noise Inversion Steps >= 30
- CN Tile preprocessor = tile_resample, downsampling rate = 2
具体修改后的参数如下(需要注意的是 batch size 这个参数,如果你的显存比较小,还是默认 1 吧):
设置为推荐参数后,我们再生成结果:
由于篇幅原因,这里不再过多阐述,如果你对还想了解这些参数和其他参数的具体含义,可以查阅官方文档。
五、Diffusion + StableSR
高清放大算法的后起之秀,由开源社区开发。需要额外下载,可在扩展中选择从地址下载:https://github.com/pkuliyi2015/sd-webui-stablesr.git
这个脚本的使用还需要几个额外的模型:
- 在 HuggingFace 上下载模型文件,下载完成后放入 sd 的 Stable-diffusion 目录下。
- 下载 StableSR 模块的模型文件,下载地址为:https://huggingface.co/Iceclear/StableSR/blob/main/webui_768v_139.ckpt
- 下载配置 VAE 文件,下载下来后放在 sd 目录/models/VAE 目录下。
- 官方推荐该脚本和 Tiled Diffusion 一起使用,这样速度更快,不容易 OOM(内存溢出)。所以我们需要安装 Tiled Diffusion 插件。
到这里我们就安装好了,我们来使用一下它。来到图生图界面,设置好基础参数信息。需要注意的是这个基础参数的设置和我们前面的方法有所区别,这也是官方推荐的。选择我们刚刚下载的 checkpoints 模型和配套 VAE。
输入正面词(不输也行)和负面词。
配置脚本参数:官方推荐的参数配置如下:如果生成图像尺寸 > 512,我们推荐使用 Tiled Diffusion & VAE,否则,图像质量可能不理想,VRAM 使用量也会很大。
这里是官方推荐的 Tiled Diffusion 设置:
- 方法 = Mixture of Diffusers
- 隐空间 Tile 大小 = 64,隐空间 Tile 重叠 = 32
- Tile 批大小尽可能大,直到差一点点就炸显存为止。
- Upscaler 必须选择 None。
下图是 24GB 显存的推荐设置。对于 4GB 的设备,只需将 Tiled Diffusion Latent tile 批处理大小改为 1,Tiled VAE 编码器 Tile 大小改为 1024,解码器 Tile 大小改为 128。 SDP 注意力优化可能会导致 OOM(内存不足),因此推荐使用 xformers。 除非你有深入的理解,否则不要改变 Tiled Diffusion & Tiled VAE 中的其他设置。这些参数对于 StableSR 基本上是最优解。
最终成像如下,可以看到细节感真的不错哈,一些细节可以再做调整,如果需要更丰富就把放大倍数再调大些:
六、几种方式的优缺点对比
| 方法名 | 优点 | 缺点 |
|---|---|---|
| 文生图高清修复 | 图片生成细节良好、操作简便 | 生成速度一般,占用较大显存 |
| 后期处理 | 生成速度很快,操作简便 | 几乎 0 重绘,对于细节的完善不足 |
| 图生图放大倍数 | 生成速度很快,操作简单,细节良好 | 生成图片细节有限 |
| 图生图 Upscale 脚本 | 生成速度中等,操作简便 | 容易生成过多不需要的画面,目前已基本废弃 |
| 图生图 Ultimate 脚本 | 生成速度中等,细节良好,可搭配 cn tile | 生成的结果具有一定的随机性,需要对参数有一定了解,进行细微调整 |
| Diffusion+StableSR | 几乎完全忠实于原图,细节最佳,最大支持放大 8K | 操作起来很麻烦,需要下载一些额外的模型,然后速度也并不快 |
| Diffusion+VAE+cn | 细节绝佳,最大支持放大 8K | 生成速度慢,可能会出现一些不需要的细节(可做调整) |
七、推荐方案和工作流
对比了这些高清放大算法后,一般我们可以选择下面几个。其他方法其实经过一些参数的调整也可以生成不错的效果,不过为了稳定和节省时间,我们可以直接选择下述列出的方法。
- 直接在文生图中开启高清修复(显存大的直接开启也无所谓啦) -> 图生图继续利用 2、3 方法放大(可选) -> 后期处理继续放大(可选)
- 在文生图中抽到好卡 -> 发送到图生图 -> 固定种子和降低重绘幅度 -> 打开 Tiled Diffision、Tiled Vae -> 打开 controlnet,选择 tile -> 生成结果 -> 后期处理继续放大(可选)
- 在文生图中抽到好卡 -> 发送到图生图 -> 修改模型和 vae -> 重新填写正反面提示词 -> 配置 Tiled Diffision、Tiled Vae、StableSR -> 生成结果 -> 后期处理继续放大(可选)
几种方法针对不同图片的表现会有所区别,可以都尝试一下,没有最好的方式,只有最适合的方式。
八、注意事项与常见问题
在进行高清放大时,可能会遇到以下问题:
- 显存溢出 (OOM): 这是最常见的问题。解决方法包括减小 Tile 大小、降低 Batch Size、使用 xformers 优化、或者升级显卡驱动。如果显存较小,优先使用 Tiled Diffusion 配合较小的 Tile 设置。
- 接缝问题: 在使用分块放大时,图片边缘可能出现明显的线条。解决方法是增加 Padding 值,或者使用 Seams Fix 功能中的 Bands pass 模式。
- 细节丢失: 如果放大后人物面部崩坏,可能是重绘幅度 (Denoising) 过高。建议将重绘幅度控制在 0.3-0.5 之间,或者使用 StableSR 等专门针对超分辨率优化的模型。
- 生成速度慢: 高清放大计算量大。建议使用 CUDA 加速,并确保安装了正确的 PyTorch 版本。如果速度过慢,可以尝试降低输出分辨率或使用更快的放大算法如 4x-UltraSharp。
总结
本文详细介绍了 Stable Diffusion 中常用的高清放大方式和常用工作流,涵盖了从基础的 Hires Fix 到高级的 Tiled Diffusion 及 StableSR 等多种技术路径。通过合理选择放大算法和参数配置,可以有效提升生成图片的分辨率和细节表现。希望这些内容能帮助你更高效地进行 AI 绘画创作。


