原理介绍
按照惯例,我们先来简单聊下 Upscale 的原理。目前主流的 upscale 的方法有两种:
- Upscale pixel:将可视的图直接 upscale。如果拿 ComfyUI 节点解释,这个节点输入的是 image,输出的是 upscale 后的 image。
- Upscale latent:另一种是将不可视的潜空间图像 upscale,如果拿 ComfyUI 节点解释,这个节点输入的是 latent 输出的是 upscale 后的 latent,最后需要经过 decode 才能变成可视的图片。
这两种方法各有利弊,在后续讲解 workflow 时,我会给大家介绍它们的区别。最后,再讲下 Upscale 的算法,比较常见的有:
-
双三次插值算法:它通过使用周围像素的数值来模拟新像素的值,从而填充缺失的像素信息。这种方法看起来比较自然,但放大后的图像可能会显得模糊,因为算法在像素化和平滑之间寻求一种折中。
-
Lanczos 插值算法:它是一种更高级的算法,它试图保留图像中的边缘和纹理,但它们通常缺乏通用性,难以处理不同类型的图像。
-
基于神经网络训练后的模型:它则是一种新兴的 Upscale 方法,它利用深度学习技术,通过训练神经网络来理解图像的纹理和对象,从而在放大图像时生成更加真实和富有细节的图像。
后续你会看到这些算法在 ComfyUI 上的应用。
Upscale pixel by algorithm workflow
首先介绍下 Upscale pixel 方法,方法还挺简单的:
- 如果你是想将生图后的图 upscale 就在最后生成的图片后,加上一个 Upscale Image 节点。
- 如果是想将已有的照片 upscale 就可以在 load image 后加 Upscale Image 节点。
不过但这里有两种方式可以实现:
- 第一种是直接使用算法实现,比如前面提到的双三次插值算法等,这种方式生图速度是最快的,但效果稍逊于模型。
- 第二种是使用模型的方式实现,这种效果会相对好一些,但时间比较久一些。
我们先来看看如何用算法 Upscale:
添加 Load Image 和 Save Image 节点
首先,我们先点击右侧的 Clear 按钮,清除掉所有节点,然后从零开始搭建。
既然跟照片有关,第一步当然就是加载两个图片节点。右键 → All node → image 里可以找到这两个节点。
添加 Upscale Image by 节点
然后我们来添加跟 Upscale 有关的节点,首先是 Upscale Image by 节点,它在 All node → image → upscaling 里。 你会看到这个节点上有两个可配置的参数,首先是 method 参数,这个参数就是本章开头提到的几种 upscale 算法:
- bicubic:双三次插值算法
- bilinear:双线性法
- nearest-exact:整数最临近算法
你可以像我一样实验一下各个算法的效果。然后下面的 Scale 则是输入放大倍数,比如我就输入了 2 倍。从结果来看,我输入了一个非常低清晰度的照片,但输出结果虽然图片变大了,但清晰度依然很差。
Upscale pixel by model workflow
要解决清晰度的问题,就要用到更高级的方法,就是开头介绍原理时,提到的使用神经网络训练后的模型。以下是 ComfyUI workflow 连接步骤:
添加 Upscale Image(using Model)节点
我们可以继续使用上一个 workflow,然后先删掉 Upscale Image By 节点。然后添加 Upscale Image(using Model)节点,它在 All node → image → upscaling 里。
添加 Load Upscale Model 节点
你会发现 Upscale Image(using Model)还有一个 model 端点需要连接。那我们就要在它前面「加载」一个模型,那该节点就肯定在 loaders 里了。添加好节点后,将各个节点按顺序连起来即可。
OK,介绍完如何搭建 workflow,我们再来聊下上面没有聊到的模型。你可能会在 ComfyUI Manger 里看到一些 Upscale 模型,里面我比较推荐的是 Real-ESRGAN(opens in a new tab),它在还原风景上效果挺好的。 另外再推荐两个,你可以在 Github 上下载模型,或者到 OpenModel DB(opens in a new tab) 上下载也行:
最后,你可能在下载和使用 Upscale 模型时,遇到一些疑惑:
- 你在下载模型的时候会看到模型标题里写 X2 或 X4,它们的意思是放大的倍数,X2 就是放大两倍,以此类推。
- 根据训练集的不同,有的模型会将一个模型拆成多个,比如 Swin2SR 模型有 Lightweight、RealWorld 等,我觉得比较关键的就是他们俩,如果你在意速度就选 Lightweight,在意效果就选 RealWorld。如果你不懂模型名称里的含义,可以看模型的介绍,一般作者会进行介绍。
- 不同的模型效果也不一样,有一些 Upscale 模型更适合优化动漫题材的图片,有一些责比较适合真实图片。我在上面推荐的几个模型都比较适合真实图片。
文章评论