背景
当我们用Stable Diffusion生成图片时,由于硬件限制和速度考虑,通常生成的图片size会选城512*512,这样的图片很模糊,我们可以通过下面的方法,修复图片清晰度。
Stable Diffusion的后期处理功能
stable diffusion中,默认生成的图片是512*512尺寸的,分辨率较低,图像质量一般。要想生成高清大图,有两种方法。
一是在文生图的时候,选择下方的hires.fix高分辨率修复,就会将生成图片的512*512尺寸调整成1024*1024的大图。不过,这会导致出图速度变慢。

更值得推荐的是第二种方式:extras附加功能

放大算法多选框里面是各种图片无损放大算法,比如Lanczos、Nearest、4x-UltraSharp、
LDSR、R-ESRGAN 4x+、R-ESRGAN 4x+ Anime6B、SwinlR 4x等。

不同的算法会导致不同的图片放大效果:

Lanczos是传统插值算法,不推荐使用。
LDSR,图片放大质量很好,非常适合照片类图片,但速度非常慢。
4x-UltraSharp,会让图片变得平滑、锐利,非常适合修复表面纹理有问题的图片。
R-ESRGAN 4x+,是一个增强的ESRGAN,可以修复各种真实世界的图像,可以保留图片中的精细细节,并产生清晰锐利的图像。这是一种适用于大多数图像的AI放大算法。在逼真的照片类图像中,表现最佳。
R-ESRGAN-4x+-Anime6B,适合动漫类图片的放大。
SwinIR_4x,适合绘画类图片的放大。
一般情况下,选择R-ESRGAN 4x+就好了。
这些算法,默认是放大4倍,也就是说,会把512×512像素的图片放大成2048×2048 像素 。
对于人物脸部,还可以勾选下面的 CodeFormer 和 GFPGAN 。这两个选项可以修复人脸图片的一些问题,比如GFPGAN可以软化,修复眼睛。
如果勾选GFPGAN和CodeFormer算法来处理脸部细节的话,需要下载相应的模型。这两个算法可以组合起来使用。


补充:4X-UltraSharp放大模型
4x-UltraSharp这个模型也是非常的火,可以从网上搜索下载
R-ESRGAN 4X+ 与 4x-UltraSharp 放大重绘对比

【R-ESRGAN 4X+】所生成的放大图片,总有一种规则感,或者说是总有一种手绘风,缺少一点自然的纷乱感,还不够真实。
【4x-UltraSharp】,听这个名字就知道,开发者对图片放大效果的追求,是一种极致的锋利感。
仅从感官直觉而言:
【R-ESRGAN 4X+】似乎要更明亮一点,显得比较柔和。
【4x-UltraSharp】则稍显厚重,对比度范围更高,立体感更强。
【R-ESRGAN 4X+】放大处理后的图片,更像是一幅高品质的手工画作。
【4x-UltraSharp】放大处理后的图片,则更像是贴近真实的人物照片。
所以,如果用户需要的是生成非拟真性的动漫类画作,则完全可以选择【R-ESRGAN 4X+】作为首选放大工具。而如果用户需要的是生成拟真性的照片,则应该选择【4x-UltraSharp】作为目前的首选。
1.4x-UltraSharp.pth图像放大器百度网盘链接: 链接:https://pan.baidu.com/s/13arXCju-8lTf1K91-rS1hg?pwd=ws4h 提取码:ws4h 2.4x-UltraSharp 的下载地址 https://mega.nz/folder/qZRBmaIY#nIG8KyWFcGNTuMX_XNbJ_g
放到下面的目录里面
stable-diffusion-webui/models/ESRGAN/4x-UltraSharp.pth
Stable Diffusion的后期处理也支持api调用

代码例子,先绘图,再修复高清。
let requestData = { "prompt": xxxx, "negative_prompt": xxxx, "width": 512, "height": 512, "sampler_name": 'DPM++ 2M Karras', "batch_size": 1, "steps": steps, "cfg_scale": 7, "override_settings": { "sd_model_checkpoint":'dreamshaper_8.safetensors [879db523c3]' } }; axios.post('http://xxxx:7860/sdapi/v1/txt2img', requestData, { auth: { username: 'xxxx', password: 'xxxx' } }) .then(response => { // 将Base64字符串转换为缓冲区 const base64String = response.data.images[0]; let requestResizeData = { "resize_mode": 0, "gfpgan_visibility": 0.3, "codeformer_visibility": 0.2, "codeformer_weight": 0.1, "upscaling_resize": 4, "upscaling_resize_w": 512, "upscaling_resize_h": 512, "upscaler_1": 'R-ESRGAN 4x+', "image": base64String }; // 图片进行高清放大 axios.post('http://xxxx:7860/sdapi/v1/extra-single-image', requestResizeData, { auth: { username: 'xxxx', password: 'xxxx' } }) .then(response => { // 将Base64字符串转换为缓冲区 const buffer = Buffer.from(response.data.image, 'base64'); fs.writeFile(output_image_path, buffer, (err) => { if (err) { return console.log('文件写入失败!', err.message); } }); }).catch(error => { console.error('txt2img Error:', error); }); }) .catch(error => { console.error('txt2img Error:', error); });