SD系列——图像高清化算法方法

news2024/11/19 2:40:42

图像高清化算法方法

文章目录

  • 图像高清化算法方法
    • 一、通过 Extras 选项卡执行放大算法
    • 二、通过 SD upscale 脚本增强细节
    • 三、txt2img 页面下的 Hires Fix
    • 四、扩展插件 Ultimate SD upscale + ControlNet Tile
      • 参数调整
      • 单用 Ultimate SD Upscale
      • 小结
    • 五、Tiled Diffusion & VAE 扩展
    • 六、StableSR 扩展
    • 七、外部工具

Update log:

  • 2023-09-15: init

翻译+参考链接:

  • How to use AI image upscaler to improve details
  • 3 methods to upscale images in Stable Diffusion (ControlNet tile upscale, SD upscale, AI upscale)
  • How to Upscale to any resolution using the Power of ControlNet’s Tile and Ultimate SD Upscale
  • 如何用 Stable Diffusion 產生高解析度的圖?
  • 七种放大方法对比

像 ESRGAN 这样的 AI 图像放大器是提高 Stable Diffusion 生成的图像质量的不可或缺的工具。事实上,它非常常用,以至于许多 Stable Diffusion GUI 都内置了对它的支持。

Stable Diffusion v1 的默认图像大小为 512×512像素这在今天的标准中是相当低的。让我们以 iPhone 12 为例。它的相机可以产生 12MP 的图像,即 4032×3024 像素。它的屏幕显示 2532 x 1170 像素,因此未缩放的稳定扩散图像需要放大,否则看起来质量很低。

更为复杂的是,“稳定扩散”生成的复杂场景往往没有应有的清晰度。它经常在细节上挣扎。

调整图像大小的传统算法,如最近邻算法插值和 Lanczos 插值法由于仅使用图像的像素值而被人诟病。他们通过只使用图像的像素值执行数学运算来放大画布并填充新像素。然而,如果图像本身被破坏或失真,这些算法就无法准确地填充缺失的信息。

相比之下,人工智能的放大算法是用大量数据训练的模型。

高质量的图像首先被人为破坏,以模拟真实世界的退化。然后将退化的图像缩小到更小的尺寸。然后训练神经网络模型以恢复原始图像。大量的先验知识被嵌入到模型中。它能够填补缺失的信息。就好像人类不需要仔细研究一个人的脸就能记住它。我们主要关注几个关键特征。

以下是比较传统(Lanczos)和AI(R-ESRGAN)放大高清的示例。由于 AI 高清化程序中嵌入了知识,它可以高清化图像并同时恢复细节。

图片1

原图

图片2

Lanczos 放大

图片3

R-ESRGAN 4x+ 放大

图片4

LDSR 放大

一、通过 Extras 选项卡执行放大算法

  • Lanczos:传统插值算法,效果如上图,除了分辨率放大了,几乎看不出高清化效果来

  • Nearest:传统插值算法,效果差

  • LDSR:Latent diffusion super resolution,速度极其缓慢,不推荐

  • ESRGAN 4x:增强型(Enhanced)超分辨率生成对抗性网络(ESRGAN)是一个放大网络,赢得了 2018 年感知图像恢复和操作挑战。它是对之前SRGAN的增强模型。它倾向于保留精细的细节,并产生清晰的图像。

  • R-ESRGAN 4x:Real-ESRGAN(R-ESRGAN)是 ESRGAN 的增强功能,可以恢复各种真实世界的图像。它对相机镜头和数字压缩产生的各种程度的失真进行建模。与 ESRGAN 相比,它倾向于生成更平滑的图像;R-ESRGAN 在逼真的照片图像方面表现最佳。

  • Others:

    source: The DEFINITIVE Comparison to Upscalers

    放大算法照片绘画动漫/动画
    LDSR非常慢,但很适合与照片随机噪声过多较好,但仍有噪声
    BSRGAN不错,轻微锐化,不太严重还行,可能过于平滑还行,不如 R-ESRGAN 更好
    ESRGAN_4x超级清晰,但可能有点失真颗粒感太强糟糕,比非AI算法还差
    R-ESRGAN-General-4xV3类似 BSRGAN,但有点太模糊同上不如 R-ESRGAN-Anime
    R-ESRGAN-General-WDN-4xV3更接近 BSRGAN质感和清晰度都很好不如 R-ESRGAN-Anime
    R-ESRGAN-AnimeVideo不适合同上动漫第二佳,Anime6B 更好
    R-ESRGAN-4x+基本等同于 BSRGAN比 BSRGAN 质感好点基本等同于 BSRGAN
    R-ESRGAN-4x±Anime6B不适合不适合最适合
    ScuNET-GAN太模糊太模糊一般
    ScuNET-PSNR太模糊太模糊太垃圾
    SwinIR_4x不行不如 General-WDN太垃圾

R-ESRAGN 是拍摄照片或写实绘画的好选择。动漫图像需要专门为恢复动漫而训练的放大算法。

放大算法模型数据库链接:OpenModelDB,下载的模型放置在 stable-diffusion-webui/models/ESRGAN

以下模型是很好的通用高清放大模型:

  • Universal Upscaler v2
  • Remacri
  • NMKD Siax
  • Lollypop

4x UltraSharp 网络上推荐的也很多,但是实测,该模型会抹掉很多细节,关于这一点,reddit 上也有相关的讨论.

左侧是 4x UltraSharp 效果,右侧是 R-ESRGAN-4x+ 。

二、通过 SD upscale 脚本增强细节

单独通过 Extras 选项卡执行放大算法并不理想,如果你的图片本身是 SD 生成的,可以考虑下面使用 SD Upscale 脚本的方式进行放大。

  1. 该脚本位于 img2img Tab 页面最下面的 Script 脚本区
  2. 在 img2img 面板中上传需要放大的图像
  3. 在 Script 中选择 “SD upscale”,设置放大系数,例如 2x 或 4x,选择放大算法
  4. 设置去噪强度,大约在 0.1~0.3,值越高,对图片的改变越大
  5. 设置采样步数 100,值越高,细节提高的越多
  6. 你可以使用该图片原始的 prompt 和反向 prompt,如果你实在没有,可以使用 “highly detailed” 作为 prompt
  7. 可以生成了
image-20230915103100830

左图是通过 script 脚本选择的 R-ESRGAN 4x+,右侧是通过 Extras 直接选择的 R-ESRGAN 4x+ 放大效果,不仔细看,好像看不出有啥明显区别。

这两种方法的区别在于,Extras 下的方法是在图片生成后,基于图片本身做的放大处理;而脚本的方式相当于重新跑一遍图生图,在绘图过程中进行的高清化,相对而言,后者的质量会更高一些,但由于本身这是一个 img2img 的过程,所以会改变原图,因此要求去噪强度尽可能低,对原图的改动尽可能小。

那么问题来了,SD Upscale 和 highres.fix 的区别是啥?

reddit 上有一篇讨论的帖子 Hires fix vs SD Upscale

SD Webui Discussions 区也有相关的讨论:What’s the implementation difference between highres fix and SD upscale? #7001

没发现有特别清晰的解释,higres.fix 仅适用于 txt2img,而且其本质可以理解为图生图,所以相比纯粹的 txt2img 会改变原图,而且速度很拖慢很多。

三、txt2img 页面下的 Hires Fix

下面的选项与使用 SD Upscale 脚本的选项类似。

就我个人而言,我不太使用 Hires 修复程序,因为它会减慢图像生成速度。与其放大所有的图像,我宁愿只放大我要保留的图像。

一旦你看到一个好的图像,你可以将其发送到 img2img 进行 SD 放大。

四、扩展插件 Ultimate SD upscale + ControlNet Tile

Ultimate SD upscale 脚本是一个扩展,提供类似于内置 SD Upscale 脚本的功能,但有一些高级选项。安装后在 img2img Tab 页下的 Script 脚本区能看到。关于该插件的使用方法,官方wiki有相似介绍。

ControlNet Tile 的核心是像一个智能平铺系统一样运行。它不是随意放大你的图像,而是仔细评估并准确地复制 512x512 块中的每一个微小部分。通过处理这些可管理的部分,它可以关注每个环节的复杂性。当这些部分最终拼凑在一起时,最终的结果是一个更大的图像,没有丢失任何细节。事实上,在文本驱动的指导下,它经常引入新的、和谐的细节。因此,你得到的不是一个简单的放大,而是一个不仅保留而且经常超越原作清晰度和活力的图像。相比其他方法需要强大的 GPU,Tiles 一般的就可以。

当与 Ultimate SD Upscaler 搭配时,这对充满活力的组合确保了图像的扩展性、复杂的细节,避免了在激进的放大中有时会出现的常见失真或奇怪之处。告别意想不到的第三肢体和镜像的怪异,迎来一个精致而细节丰富的放大过程。

  1. 打开 img2img Tab 页,并上传想要放大的图片
  2. 输入原始提示和否定提示。如果没有原始提示,可以使用 “highly detailed”。
  3. 设置采样步数为 50;去噪强度为 0.5
  4. 设置 ControlNet,把该图片上传到 ControlNet 中,勾选 Enable,启用 ControlNet
  5. 预处理器选择 tile_resample; 模型选择 control_v11f1e_sd15_tile
  6. 设置 Ultimate SD Upscale 扩展脚本,设置 Target size typeScale from image size
  7. 设置 Scale 系数 2 或者 4 等;设置 Upscaler 算法,可以选择,比如 R-ESRGAN 4x+
  8. 确认 Tile width 为 512,height 为 0。这将在放大过程中使用 512×512 tiles,然后就可以点击生成了。

实测去噪强度不能设置 0.5,人脸会变,0.2 就合适,但是分辨率放大不能简单的 2 倍,648x1024 的图片放大后成 1344 x 2048 了,另外效果上感觉和单独用 Extras 下的 R-ESRGAN 4x+ 差不多 😐,人脸可能略有提高,不过没有测试太多。

这种方法的缺点可能是添加了太多细节。它可能会改变图像,使其不再是原始图像的忠实放大。但这取决于你的目标。

参数调整

可以使用以下参数进行实验:

  • 去噪强度:降低它可以减少添加的细节量。
  • 下采样率(ControlNet):增加此值会使控制图像更加模糊。控制图像越模糊,模型在细节上就越自由。
  • 采样步数: 增加步数往往会提高细节和清晰度。
  • 采样方法: 采样器可以在最终细节中发挥作用。
  • 种子: 更改种子以更改细节。
  • Seam fix (Ultimate SD Upscale): 如果你觉得能看到 512×512 tiles,就启用。此选项将沿着 tiles 的边界运行一轮额外的放大操作。

如果你看到诸如额外对象之类的伪影,请尝试降低去噪强度或增加下采样率。如果你使用的是真实的照片,或者保真度对你来说很重要,或许可以放弃使用 ControlNet Tile。

在仅使用 Ultimate SD Upscaler(不使用 ControlNet)的分辨率测试中,整个图像出现了明显的变形。这归因于升级器在图块中进行处理的方法,渲染单独的图像部分,由于每个部分的独立生成,这些部分有时可能会错位。尽管如此,升级的清晰度还是值得称赞的。要辨别 1024x1024 和 2048x2048 分辨率之间的细微差别,需要仔细检查,但清晰度的提高是显而易见的。对于这些测试,分别对 1024 和 2048 分辨率应用了 2 和 4 的比例。

单用 Ultimate SD Upscale

在一些文章中称,在只使用 Ultimate SD Upscaler 而不使用 ControlNet 的分辨率测试中,整个图像可能会出现一些变形。这归因于放大器在 tiles 中处理的方法,即渲染单独的图像部分,由于每个部分的独立生成,这些图像部分有时可能会错位。尽管如此,放大的清晰性还是值得称赞的。但我测试了几个感觉单独用也不错。

小结

方法优点缺点
img2img1. 能增加细部细节 2. 可调整prompt 和denoising strength 进一步优化图片1. 解析度拉高时需算图时间长且需要更多VRAM 2. 可能改变图片细节或构图,需要调整denoising strength 或使用ControlNet
AI Upscaler1. 算图速度快且节省资源2. 放大图片与原图几乎一样1. 原图很小时,放大后细节可能不理想2. 选择某些Upscaler 可能出现细节过度锐利的现象3. 无法修复原图已经崩坏的部分
Tiled Upscaling1. 同时享有img2img 和AI Upscaler 的优点2. 使用ControlNet Tile 重绘,能增加更多细节且节省资源tile 间可能出现微小的接缝(seam artifacts)
image-20230915165123254

图片来源:Make Bigger Images in SD: Pros and Cons for Outpainting, Hires Fix, Img2Img, and ControlNet Tile

五、Tiled Diffusion & VAE 扩展

该插件的使用方法、原理、参数设置建议等,官方有比较详细的介绍。

image-20230915174017509

左侧是用该扩展处理后的,右侧是 Extras,选择的算法都是 R-ESRGAN 4x+,左侧光线稍微暗了些,其实不仔细看,也没太大区别。

六、StableSR 扩展

这个扩展是基于 SD 2.x 搞得,有 768 和 512 两个版本,分别需要使用特定的扩散模型,Stable Diffusion V2.1 768/512 EMA 检查点,官方文档中也有针对该扩展的详细说明。

(模型太大,懒得下载了,暂不放效果图了)

七、外部工具

  • Upscayl:可以下载 app,未开源其中的模型,免费使用

    image-20230915181032571
  • Topaz Gigapixel AI:付费软件,支持正版,一起监督破解版

    image-20230915181727268

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1014527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么把两首歌曲拼接在一起?

怎么把两首歌曲拼接在一起?音乐的美妙旋律能够陶冶人们的心灵,在日常生活和工作中,许多用户会使用各种歌曲来进行剪辑和制作。尤其在媒体行业工作的用户,每天都需要使用大量不同歌曲的片段,进行拼接和剪辑来进行视频制…

深入理解Linux网络笔记(一):内核是如何接收网络包的

本文为《深入理解Linux网络》学习笔记,使用的Linux源码版本是3.10,网卡驱动是Intel的igb网卡驱动 Linux源码在线阅读:https://elixir.bootlin.com/linux/v3.10/source 1、内核是如何接收网络包的 1)、Linux网络收包总览 在TCP/I…

数字IC验证23915--寄存器方法

文章目录 镜像值与期望值predication的分类自动预测显示预测 uvm_reg的访问方法寄存器健康检查![在这里插入图片描述](https://img-blog.csdnimg.cn/8b1832ab43854068970bb5a66d851d06.png) 镜像值与期望值 寄存器模型中的每一个寄存器,都应该有两个值,…

【计算机基础】Git系列2:配置多个SSH

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

Python 07面向对象的三大特点【封装、继承、多态】

😀前言 在软件开发的过程中,面向对象编程(Object-Oriented Programming,简称 OOP)已经成为了一种不可或缺的编程范式。它允许开发人员创建属于自己的对象,具有其特征和行为,通过将数据和方法绑定…

Python中进行特征重要性分析的9个常用方法

特征重要性分析用于了解每个特征(变量或输入)对于做出预测的有用性或价值。目标是确定对模型输出影响最大的最重要的特征,它是机器学习中经常使用的一种方法。 为什么特征重要性分析很重要? 如果有一个包含数十个甚至数百个特征的数据集,每个特征都可能…

排序与分页——“MySQL数据库”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是MySQL数据库里面的排序与分页,下面,让我们进入排序与分页的世界吧!!! 排序数据 分页 排序数据 排序规则 使用 ORDER BY 子句排序 ASC&#xf…

在JavaScript中,什么是浏览器事件循环(browser event loop)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浏览器事件循环(Browser Event Loop)⭐ 执行同步任务⭐ 处理微任务队列(Microtask Queue)⭐ 处理宏任务队列(Macrotask Queue)⭐ 重复循环⭐ 写在最后 ⭐ 专栏简介 前…

一、K近邻算法K-NN

一、算法思路 K近邻算法,k-nearest neighbor,即K-NN 通俗来说:给定一个元素,然后以该元素坐标为圆心开始画圆,其中K值是超参数需要人为给定,圆的半径逐渐增大(距离度量采用欧氏距离),直到包含其…

【电子元件】常用电子元器件的识别之电容器

目录 前言1. 电容器的简介2.电容器的识别1. 铝电解电容器2.钽电解电容器3.固态电解电容器4.瓷介电容器5. 贴片陶瓷电容器6. 聚丙烯电容7. 金属化聚丙烯薄膜电容器8. 独石电容器9. 涤纶电容器10. 超小型金属化聚酯薄膜电容器11. 可变电容器11.1 空气可变电容器11.2 薄膜介质可变…

Vue前端页面打印

前端依赖10-插件"print-js": “^1.6.0” 一:简介 print-js 是一个 Vue.js 插件,用于在 Vue.js 项目中实现打印功能。它依赖于 print-js 库,所以需要安装这个库。 能实现以下功能: PDF打印(默认&#xff…

Python语言:求水仙花数案例讲解

求水仙花数是循环和判断语句相结合的一个经典案例。 思路分析 通过循环遍历100到999之间的数字然后根据他们的个位,十位,百位上的数字立方和是否为他本身来判断分析得出什么数是水仙花数。 1)如何循环遍历100到999的所有数字? 使…

10分钟开发Kubernetes Operator

Operator是扩展原生Kubernetes能力的主要模式,本文通过一个简单示例,介绍了如何从0开始构建Kubernetes Operator实现用户自定义功能。原文: Build a Kubernetes Operator in 10 Minutes 你也许能够将应用熟练的部署到Kubernetes[1]上,但你知道…

MAUI android连接sqlserver

PDA是android系统,调用金蝶云星空webapi实现仓库收发料,使用读取webapi有些功能无法实现,需要直接读写数据库,读取报错,如图: 用控制台程序测试正常读取 google搜索了一圈, 都需要使用ssl证书才…

华为云云耀云服务器 L 实例评测|配置教程 + 用 Python 简单绘图

文章目录 Part.I IntroductionChap.I 云耀云服务器 L 实例简介Chap.II 参与活动步骤 Part.II 配置Chap.I 初步配置Chap.II 配置安全组 Part.III 简单使用Chap.I VScode 远程连接华为云Chap.II 简单绘图 Reference Part.I Introduction 本篇博文是为了参与华为“【有奖征文】华…

为建模而建模,高成本的临床预测模型意义何在?

9.23-24 郑老师“量表与中介研究数据分析”课程,欢迎报名 “量表与中介研究数据分析”9.23-24直播课,发文后退款 关于预测模型,周三有位同学过来咨询我,说“郑老师,毕业论文,建一个脑卒中患者抑郁的预测模型…

Linux 简介 启动过程

简介 Linux 是一套免费使用和自由传播的开放源码的类 UNIX 操作系统,英文解释为: Linux is not Unix。1991 年由林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的,主要受到 Minix 和 Unix 思想的…

JavaSE---常用的API

1. 什么是API? API (Application Programming interface) 应用程序编程接口。通俗来讲,就是Java已经帮我们写好了一些方法,我们直接拿过来用即可。 iodraw:https://www.iodraw.com/ API在线中文文档:https://www.ma…

Python入门教程39:教你使用distutils本地发布模块与模块安装的操作

★★★★★博文创作不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习编程小技巧。使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞收藏分享置顶,小红牛在此表示感谢…

RabbitMQ消息可靠性(一)-- 生产者消息确认

前言 在项目中,引入了RabbitMQ这一中间件,必然也需要在业务中增加对数据安全性的一层考虑,来保证RabbitMQ消息的可靠性,否则一个个消息丢失可能导致整个业务的数据出现不一致等问题,对系统带来巨大的影响,…