首页  >  教程  >  文章
2024-04-28 10:11

如何让AI绘制的图像高清化丨小白必看的全面科普教程丨附Upscayl使用教程

在最近半年和大家交流 AIGC 相关问题时,最让大家头疼的问题之一就是如何让 AI 绘制的图像更加清晰。

受限于服务器或硬件本身的性能,很多时候我们无法一步得到自己满意的图像,而生成拥有高清细节的大图又是每一位 AI 绘画爱好者的追求。今天我会为大家汇总并分析市面上各类常见的图像高清放大工具操作方法和运行原理,文末也为大家整理了全部下载资源,强烈推荐每位追求图像高清化的宝子们查阅收藏,快来看看吧~

以下是正文部分

01关于图像的基础认知

1.1 图像的 2 种类型:矢量图&位图

在正式介绍各类工具前,先为不少小白玩家介绍下图像文件的类型和影响图像观感的因素,方便大家更好理解决定图像清晰度的底层原理。

首先,图片的类型可以大致分为矢量图和位图两种。先来看看矢量图,我们常见的ai、eps、svg等格式后缀都是矢量图文件。矢量图是由数字线条呈现的一种图像,原理是将图像信息储存为代码公式,因此它的最大特点体积小,并且无论放大多少倍,图像依旧可以呈现出光滑的边缘,不会出现失真的效果。

图片

位图的专业称呼是点阵图或栅格图,它的常见格式有jpg、gif、png等。这类图像是由一个个像素点所组成的,每个像素点都是一个颜色方块,当不同方块组合在一起我们整体来看时,最终就是一张完整的图像了。下图是由矢量图栅格化转化成的位图,可以看到图像边缘有非常明显的颗粒感。

图片

通常我们会使用矢量图来承载简单几何图形和需要无限缩放的图像,而位图则用来承载表现色彩丰富、细节复杂的图像。对于 AI 绘图而言,目前使用的基本都是 Diffusion 扩散模型,这类模型的原理是通过逐步降噪的方式来让图像逐步具象化。因此 AI 模型绘制的图像只能是位图,而我们所讨论的图像高清化也是针对像素颗粒组成的位图而言。

图片

1.2 影响图像观感的主要因素

那影响位图显示效果的具体有哪些因素呢?对很多新手来说,最容易产生的误解就是将图像文件的大小和清晰效果划等号,以为文件越大则图像显示效果越清晰。其实,文件大小只是图像显示的结果,而并非是原因。换句话说,清晰的图像往往文件大小和尺寸都会比较大,但文件或尺寸大并不意味着图像显示效果就一定好。

举个最简单的例子,我们将一张原本 72x72 尺寸的图像放大到原有尺寸的 4 倍再导出,即使图像尺寸变大,文件大小也增大了,但实际的清晰度并没有任何改变,其原理在于放大过程中并没有增加有用的像素信息,图像细节并没有变化。这个过程就像一块蛋糕从 4 块切成了 16 块,虽然看似蛋糕数量增多了,但本质上蛋糕的实际体积并没有发生变化。

图片

那我们究竟该怎么判断图像的真正清晰程度呢?看的比较仔细的小伙伴应该发现了,在上图案例中 2 张图虽然尺寸相差4倍,但分辨率却都是72*72.而分辨率正是我们判断一张图像清晰程度的直观参数。

分辨率,又叫解析度、解像度,它决定了位图图像细节的精细程度。分辨率和图像的像素有直接关系,通常情况下图像的分辨率越高,所包含的像素细节就越多,图像就越清晰。分辨率的两个数字表示的是图片在长和宽上所占像素的单位,比如一张分辨率为 640 x 480 的图片,分辨率就达到了 640 x 480=307200 像素,也就是我们常说的 30 万像素。

图片

那么图像分辨率大,我们看到的图像就一定足够清晰吗?这也不一定,因为图像实际的成像效果还受到显示媒介的影响,比如一张高分辨率的图片在 1080P 屏和 5K 屏上看到的效果是完全不同的,那这里的显示器分辨率和图像分辨率是什么关系呢?

图片

要明白这个概念,首先要理解图像在显示屏上的成像原理。当一张 4096*2160 分辨率的图片应用到显示器上时,图片中的单个像素会依次映射到屏幕上的单个像素上的,如果显示器支持显示的像素数只有 1920*1080.那最终只能看到相应数量的像素点,多余的像素会被移除,因此图片实际看起来只有 1920*1080 的清晰度。

而如果显示器支持显示的像素数能达到 4096*2160(也就是我们俗称的 4K 屏),则所有像素点都能被完整显示,图片看起来就是完整的 4096*2160.这也是为什么大家会追求高 K 级的显示器,因为可以呈现更清晰完整的图像画质。

图片

这里需要注意的是,像素 Pixel 是一个相对单位,而非物理世界的实际可度量的尺寸。同样 1920 像素*1080 像素,即可以指小尺寸手机的分辨率,也可以指大尺寸笔记本的分辨率,也就是说在单个像素点在不同尺寸的屏幕上物理尺寸也是不同的,决定最终成像清晰度要综合考虑显示器尺寸和显示器分辨率 2 个因素来看。

这里就有了显示器像素密度的概念,像素密度的单位为 PPI,Pixels Per Inch 所表示的是每英寸所拥有的像素数量:PPI 数值越高,即代表显示屏能够以越高的密度显示图像,高分辨率的图像也就能被完整映射,看起来更加清晰。

图片

通过下面这个案例我们也可以看出,32 寸 2K 显示器和 24 寸 1080P 显示器的 PPI 完全相同,也就是两者的清晰度是完全一样的,并非我们平时理解的 2K 显示器一定比 1080P 清晰。(K 级针对的是横向分辨率,P 级针对的是纵向分辨率)

图片

总结来说,图像的最终显示效果同时受到图像自身分辨率和显示设备像素密度的影响,但本文重点是针对图像放大,关于显示设备此处就不做过多赘述了。而在设备不变的情况下,如果想实现图像清晰化的唯一办法就是提升图像自身分辨率,即补充画面中像素细节。这个过程就像是像素画到写实照片的过程,随着像素细节的增多,图像的画质会显著提升,视觉观感上也就愈加细腻入微。

图片

02市面上 AI 绘图工具的限制

对 AI 绘图工具而言,通常情况下只要设定好图像尺寸,在运行过程中模型就会自动给我们绘制出相应分辨率的图像来,因此图像尺寸设置越大,最终出图的分辨率也就越高,但是我们发现往往 AI 绘图工具会限制初始的出图尺寸。比如 Midjourney 的默认出图和常用功能都会限制尺寸为 1024 分辨率,这是为什么呢?

图片

对于这类在线绘图工具而言,平台方一方面需要考虑服务器资源算力分配问题。图像分辨率越高,要绘制的像素数量也就越多,会消耗更多的算力资源。但是用户通过额外付费其实可以获取更多算力资源,所以算力并不是影响出图结果的主要原因。

实际影响出图尺寸的是模型训练时采用的图像数据集。对 SD 的 V1.5 版本的绘图模型而言,通常我们的图像分辨率都是设置在 512~768 范围内,这是因为在训练模型时使用的数据集图像也是使用的这个尺寸,如果图像尺寸设置超过这个范围,模型往往会将绘图指令理解为多张小图拼合的结果,因而出图结果中会出现多人或多肢体的情况,就像下图一样。

图片

平台方在训练模型时限于成本预算和效率需要,往往采集的训练图像集不会出现过大的情况,因此在目前显卡算力的水平下,大多数在线 AI 绘图工具平台支持默认初识绘制的图像分辨率大多在 1024 左右。而要实现更加清晰的图像绘制,我们可以通过一些高清放大的工具在现有小图的基础上进行二次放大。

下面给大家介绍几种我们迄今市面上常见的图像高清化方法和技巧,在文章结尾我会为大家整理各类方法的优劣势和适用场景,方便大家自行选用。

03原生图像放大重绘

对 SD 绘制的图像而言,可以通过 WebUI 原生功能直接进行图像放大,还可以通过下载一些扩展插件来增强放大效果,我们先来看看原生放大部分。

3.1 高清修复和图生图

在 SD WebUI 的文生图模块,内置了 Hires-Fix 高清修复功能,这就是平时我们平时最常使用的高清放大功能了。

图片

高清修复的原理很简单:本质上是在原图基础上进行了一次额外的图生图重绘。操作方法也很简单,我们以 512 分辨率的图像为例,先在文生图中生成一张所需的图像,当图像内容比较满意时,我们将对应图像的种子值固定。接着勾选高清修复选项,将图像放大倍数设置为原图的 2 倍,重绘后的图像尺寸即为 512*2=1024px。

图片

这里的放大算法有很多,我们使用针对写实图片的R-ESRGAN4x+算法,将重绘幅度设置为 0.5 并点击生成,即可获取一张被放大 2 倍的图像,相较之下放大后的图像拥有更多细节,画质清晰度得到了明显提升。

图片

除了文生图模块,使用图生图进行重绘也是同样的原理,实际操作上我们只需将原图发送至图生图模块,固定种子值并设置图像尺寸后点击生成即可。

图片

使用高清修复和图生图进行图像高清放大的优点在于操作简单直接,无需其他复杂设置即可完成。受限于显卡性能和出图效率,我们在绘图前往往都是先通过抽奖的方式多生成几张小图,然后从中选择最满意的一张使用高清修复或图生图进行高清放大。

图片

由于是在原图基础上进行重绘,所以我们可以通过重绘幅度参数来控制重绘后和原图的变化强度。通常建议将重绘幅度设置在 0.5 左右,如果想保证和原图尽可能接近,还可以适当降低参数数值。

下图的案例中为了加强体现重绘幅度对图像内容的影响变化,我们在图像重绘时调整了提示词内容,实际如果只想对图像放大重绘,提示词内容应保持不变或尽可能和原图内容吻合。

图片

3.2 后期处理

除了以上方法,还有一个 SD WebUI 原生自带的图像高清化功能,叫【后期处理】模块。在顶部标签页找到并打开之后,我们会发现该模块支持设置的操作项并不多。

图片

要使用后期处理功能非常简单,只需将需要放大的图像进行上传,选择好放大算法和放大倍数点击生成即可。

图片

相较于图生图,后期处理并没有将图像进行完整的重绘,而只是使用算法进行了简单的放大处理。因此放大后的图像画质几乎没有太大的提升,这里我们即使将图像放大至原有的 4 倍,画面中之前粗糙的细节颗粒依旧会被保留。

图片

使用该方法进行图像放大几乎没有任何门槛,无需考虑原图的模型、种子值、重绘幅度等参数,甚至手机拍摄的照片也可以直接进行放大。因此后期处理模块的功能多用于对已经生成的图像进行简单处理,在日常工作中使用较少。

04扩展插件辅助重绘

以上就是 SD 原生放大图像的 2 种方法,除此之外通过安装一些扩展插件可以实现更有效的图像高清化处理,如果你用的是整合包,其中部分扩展可能已经默认帮你安装好,在图生图页面下方可以找到。如果你还没有对应扩展,可以看看下这 3 种安装方案任选其一即可。

需要注意的是,以下下载和安装过程需要在科学网络的条件下进行,否则会出现无法链接的情况。

4.1 扩展插件安装方法

方法一:官方市场安装

打开扩展-可下载-加载扩展列表,在其中搜索扩展名称即可找到对应扩展点击下载即可。

图片

方法二:URL 地址安装

将选项卡切换到从网址安装选项页,将对应的扩展插件地址粘贴到输入框中,即可自动下载和安装好扩展。

图片

方法三:本地安装

直接下载对应的扩展文件包,解压后放至 WebUI 根目录下的【\extensions】文件夹,再重载 WebUI 界面即可正常使用。

图片

我已经为大家提前下载好了所需的插件资源,大家只需在公众号后台回复【SD资源】,即可找到对应的扩展安装包。

4.2 原图切片重绘:Ultimate SD Upscale

资源地址:https://github.com/Coyote-A/ultimate-upscale-for-automatic1111.git

我们先来看看第一款插件 Ultimate SD Upscale。在前面 SD WebUI 原生的高清放大操作中,我们是直接将原图丢给模型进行完整的重绘,但是受限于显卡的算力,我们支持重绘的图像尺寸往往都比较小。那有没有方法可以在不升级硬件的情况下绘制更大尺寸的图像呢?

Ultimate SD Upscale 插件就可以实现这样的效果,该插件最大的特点就是在绘制前先将图像切割成多个小块切片,并挨个针对每张切片进行单独绘制,最后再通过算法将切片拼合为原始的一张图。通过这样切割分块绘制的方法,可以极大的缓解硬件的运行压力,等于是间接提升图像绘制清晰度的上限。

图片

我们在安装完脚本扩展后,在图生图模块下面的脚本下拉中选择 Ultimate SD Upscale。如果你没有找到对应脚本,大概率是还在文生图模块下或没有刷新,只需重启 WebUI 并切换到图生图模块下。

使用 Ultimate SD Upscale 也很简单,一般保持默认参数即可,然后再点击生成。在生成过程中可以清楚看到该插件主要是在针对切片进行挨个绘制。

图片

下面针对使用该扩展时的一些关键参数进行说明:

图片

重绘强度:由于是针对切片进行重绘,避免重绘后切片内容差异过大,建议数值设置为 0.35.如果想尽量避免图像发生改变可设置为 0.15~0.20

目标图像尺寸设置 Target size type:可以选择跟随图生图原生设置的宽高,也可以自定义图像宽高,最大值为 8192

图像的处理方式 Type:建议优先选择 Chess,可以一定程度上减少接缝处不连贯的问题

切片宽高 Tile width / height :设置切片的宽度和高度。切片的大小影响最终图像的效果,一般切片越大,图像完整性越好但对显卡的性能要求也就越高。一般对于 2048px 的图,切片设置为 512px 就够了。

切片间重叠区域 Padding:数值越大则切片融合效果越好,但绘图时间会增长

边缘羽化程度 Mask blur:用于调整切片的融合程度,针对 512~768px 的切片,建议设置为 12~16

图像接缝的修复方式 Seams fix type:建议选择 Half tile offset pass

接缝修复 Seams fix:建议开启,可修复切片接缝

以上大部分参数都很好理解,其中为什么要在块与块之间设置重叠区域呢?这里的原理其实和图生图的【蒙版边缘模糊度】参数类似,是为了减少切片之间融合产生的边界线问题。

图片

下图中分别是设置了重叠区域和未设置时的绘图对比,可以发现在未设置重叠区域的情况下,切片之间会有明显的切缝,而设置了重叠区域后切片间融合效果好得多。需要注意的是,重叠区域的宽度通常设置为切片宽度的 1/3~1/2 即可,过大的重叠区域绘制会浪费算力,显著降低运行速度。

图片

当然如果大家觉得参数理解起来非常麻烦,下面也给大家提供了分别绘制 2048 和 4086 分辨率图像的推荐参数,在绘制对应尺寸图像时直接设置成同样的数值即可。

图片

除了 Ultimate SD Upscale 外,我们有时候还会看到 SD Upscale 等其他辅助放大图像的脚本插件,它们大多也都是采用切片重绘的操作过程,但相较之下其他插件功能单一且支持设置的参数项更少,所以建议大家只需下载 Ultimate SD Upscale 这一款功能齐全的扩展插件即可。

图片

4.3 潜空间切片重绘:Multi Diffusion

资源地址:https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111.git

说到切片重绘,除了上面的 Ultimate SD Upscale 之外,另外一款采用同样原理来提高绘图上限的插件更为被大家熟知,那就是大名鼎鼎的Multi Diffusion,作为目前市面上图像高清处理的集大成者:除了绘制速度更快,可控性更强等优势外,它还优化了 SD 对本地显存的应用,极大的降低了显存负荷。

具体效果可以看下图,同样是将 512 分辨率的图像放大 4 倍到 2048.开启 Multi Diffusion 后虽然运行时间差不多,但肉眼可见的是显存占用下降了一半之多,而实际的图像效果却基本一致,简直完美。

图片

实际场景下该扩展可以提升的绘图效率至少在 50%以上,比如原本 12G 显存默认只能绘制 1024px 左右尺寸的图像,配合 Multi Diffusion 扩展后,绘图上限直接提升到 8k 图。

图片

严格来说,Multi Diffusion 是由 Tiled Diffusion 和 Tiled VAE 两款插件组合而成的。Tiled Diffusion 生效在 Diffusion 扩散模型运作过程,而 Tiled VAE 作用在 VAE 模型图像编解码过程,在实际使用时需要同时开启 2 个扩展,配合使用体验更佳。

图片

下面分别介绍下 2 个扩展的一些关键参数。首先是 Tile Diffusion:

保持输入图像大小 Overwrite image size :开启后即以扩展中设置的图像尺寸为准,原生图生图中的尺寸大小将被覆盖,通过此设置可以突破 WebUI 默认的图像尺寸上限,最高可达 16384x 16384

图片

模型算法方案 Method :用来选择扩展运行的算法方案,有 MultiDiffusion 和 Mixture of Diffusers 两种。实际体验下来 2 种算法出图效果差不多,但前者运行速度会稍微快一点。

下面这部分潜空间分块设置参数是扩展最重要的参数设置项,这里决定了我们在进行图像绘制时的处理效率,需要根据显卡性能进行对应微调。要理解这类参数的作用,需要先回顾下潜空间的概念:如今的 SD 模型之所以可以在商用级显卡上运行,是沿用了潜在扩散模型的降维技术,图像在处理前会先从像素空间压缩 8 倍后,降维到潜空间中进行运算,从而缓解硬件的运算压力,而下面这些潜空间切片设置参数也就是设置在潜空间中的图像尺寸。

图片

潜空间分块宽度和高度 Latent tile width and height:更改切片的宽度和高度。切片的宽高越大,出图效果越好,但显存压力也会越大。通常建议大家将块大小设置在 64~160 之间,比如 96 和 128 都是比较合适的块大小尺寸。

潜空间分块重叠区域 Latent tile overlap:设置切片彼此重叠的程度。数值越大则图像生成时间越长,但可以有效增强切片之间的连贯性,建议设置数值比切片宽高中最低值稍微大一点即可。如果原图的宽度或高度过大并开启高清修复时,可以将数值设置小一点。

潜空间分块单批绘制数量 Latent tile batch size:设置同批次下绘制切片的数量。如果显卡的内存足够大,建议设置为 8.可以有效减少绘图时间,但对图像质量没有任何影响

Tiled Diffusion 之所以绘制大尺寸图像时有如此高的上限,很大程度上是因为它在切片重绘的基础上增加了潜空间运算的维度,通过将图像扩散生成的过程放置在潜空间内运行,可以极大的减少算力压力,从而实现更高上限的图像绘制。

图片

有朋友可能好奇潜空间切片尺寸的 64~160 这 2 个范围区间是如何得来的,我们都知道 SD 主模型基于参数量级的不同,适合绘制的图像尺寸也有很大差异:比如 v1.5 版本以下的模型适合绘制 512 分辨率图像,v2.1 适合 768 分辨率,而 SDXL 可以直出 1024 分辨率图像。

图片

而目前市面上主流模型支持的绘图尺寸基本都在 512~1280 这个范围区间内。我们前面提到的 512~1280 范围区间,降维到潜空间缩小 8 倍恰好是 64~160.对应的也就是推荐设置的切片大小。

在 Tiled Diffusion 下面还有一块分区提示词参数,该功能可以在同一画布中针对不同区域设置不同提示词,实现分区控制的效果。该功能其实有点类似 PS 的创意生成功能,但缺点是选区不够灵活,后续我会通过其他教程介绍更合适的操作方法,此处先按下不表。

图片

下面我们再来看看 Tile VAE 。VAE 模型是 SD 运行过程中不可或缺的模型,用于将图像从潜空间中解码成大图,但这个过程通常需要消耗很大一部分显存性能。而 Tile VAE 扩展可以极大程度的降低编解码过程中的显存压力,以默认参数为例,如果之前你的显卡只能支持 1.5 倍的高清放大,开启扩展后就能直出放大 2 倍的图像。

图片

由于对显存影响主要是未降维前的切片大小,因此如果你在图像生成后有提示【CUDA error: out of memory】即显存不足的报错,可以适当降低编码器切片大小 Encoder Tile Size的数值。

编码器切片大小 Encoder Tile Size:用于设置降维到潜空间的切片大小

解码器切片大小 Decoder Tile Size:用于设置还原到像素空间的切片大小

快速编码器 Fast encoder:默认启用,但有时会导致颜色变异,不建议开启

4.4 避免全局干扰:Tile 控制网络模型

资源地址:https://github.com/Mikubill/sd-webui-controlnet

除了硬件方面的显存要求,另一个让大家很头疼的就是重绘时切片内容问题,简单来说就是切割后的每张切片图在重绘时都会收到全局提示词的影响。举个例子,我们的全局提示词是“女孩”,当我们绘制大尺寸图像时,原图被分割为多张切片,我们希望的是每个切片重绘各自原有的内容,但实际上每张切片都会被识别成一张独立的图片,导致每个块中可能都会理解成单独绘制一个女孩,出现如下图所示变形的结果。

图片

而 ControlNet 中的 Tile 模型正好可以巧妙的解决这个问题,该模型最大的特点就是在优化图像细节的同时不会影响画面结构。因此我们在使用 ControlNet 模型时,可以直接将重绘幅度设置为最大值 1.ControlNet 依旧可以稳定的控制绘图结果,而很少出现产生夸张的变形。

图片

之所以会有这样的效果,是因为在运行过程中 Tile 进行了 2 步额外的处理:

忽略原有图像中的细节并生成新的细节。

如果小方块的原有语义和提示词不匹配,则会忽略全局提示词,转而使用局部的上下文来引导绘图。

通过这种方式,我们在绘制图像时启用 Tile 模型,便可主动识别每张切片中的语义信息,减少全局提示的影响,也因此 ControlNet Tile 被广泛用于图像细节修复和高清放大等场景,可以说和切片重绘的处理方式是天作之合。

图片

关于 ControlNet 中的 Tile 模型在之前的 ControlNet 教程中已经做过介绍,需要安装和学习的朋友可以翻看之前的文章进行查阅。

4.5 Upscayl-免费开源的 AI 图像放大工具

资源地址:https://github.com/upscayl

以上方法主要是针对使用 SD 中的插件来实现图像高清放大的效果,在日常工作中,我们还会遇到很多轻量化放大图像的场景,如果每次都打开 SD 来进行放大,未免太过麻烦。下面再给大家推荐一款好用且免费开源的 AI 图像处理工具 Upscayl,它具有免费开源、无损放大、处理快速、支持多格式、简单易用等特点,无需联网和额外付费就能轻松实现最高 16 倍的图像放大。

图片

使用 Upscayl 方法非常简单,我们从 Upscayl 官网或官方 Github 页面下载程序后进行本地安装。安装完成后打开 Upscayl,在其中拖入需要放大的图像,直接点击执行放大按钮,即可生成一张放大 4 倍的图像。

图片

由于没有经过扩散模型的重绘过程,因此Upscayl 的放大效果类似WebUI原生后期处理功能的升级版,只能在原图基础上增加像素数量,但无法针对画面细节进行补充和重构,所以Upscayl 多用来处理画面内容模糊、边缘粗糙等简单修复。

图片

当然,除了操作便捷、免费开源等优点,Upscayl 也支持切换不同的放大算法,可以自行下载更多算法模型用于不同类型的图像处理。此外批量处理、设置放大倍数、切换视图模式等功能也是支持的,更多玩法大家可以自行尝试。

图片

注意并不建议大家每次都直接开启 Multi-Diffusion 或 ControlNet Tile 来绘制任意尺寸图像,大炮射蚊子的操作虽然简单粗暴,但有时候并不会生效还会白白浪费硬件算力。

05总结

下面是针对今天分享内容整理的总结,大家可以根据自己的实际使用场景选择最佳的放大处理方式:

针对使用SD绘制的图像,如果本身显卡算力足够且放大倍数在2倍以内,可以直接通过 WebUI 原生的高清修复、图生图来进行放大。

如果放大倍数超2倍或提示显存不足时,我们可以开启Ultimate SD Upscale 或 Multi-Diffusion 来进一步提升图像绘制尺寸的上限并降低显存压力。

如果重绘后尺寸超过2048或出现多人多肢体的变形图时,可以启用 ControlNet Tile 模型来稳定图像内容,避免出现元素重复等问题。

如果只想简单快速的将图像进行粗处理放大时,建议直接使用 Upscayl 来进行一键高清放大即可,省去特意启用SD的步骤。

此外,关于本文中所有提及的图像放大方法和类似功能的插件我也给大家整理了以下表格,希望能对大家有所帮助。

图片

4
查看相关话题: #ai绘画 #Stable Diffusion #高清化

相关文章