Python - Real-ESRGAN 提升图像、视频清晰度 - 最高可达 4 K

news2024/11/18 15:46:40

目录

一.引言

二.Real-ESRGAN 理论

1.模型简介

2.经典退化模型

◆ 退化过程全览

◆ K - 高斯滤波

◆ N - 噪声

◆ ↓r - Resize

◆ jpeg - 压缩

3.高阶退化模型

4.环形和超调伪影

5.网络结构

◆ ESRGAN 生成器

◆ U-Net 鉴别器

三.Real-ESRGAN 实战

1.快速体验

2.环境搭建

◆ Package 安装

◆ 预训练模型下载

◆ GFP-GAN 模型下载

3. 图像修复

◆ 运行脚本

◆ 显存不足

◆ Half Error

4.视频修复

◆ 运行脚本

◆ 修复思考 

四.总结


一.引言

前面我们介绍了 GFP-GAN,其通过检测目标脸部轮廓提升图片中人物的画面质量。今天介绍的 Real-ESRGAN [Training Real-World Blind Super-Resolution with Pure Synthetic Data] 即使用纯合成数据进行真实世界盲超分辨率训练,其用于提高图像、视频的质量。同时 Real-ESRGAN 也引入了 GFP-GAN,如果还需要额外对图像中的人物进行细粒度修复,两者可以结合。

二.Real-ESRGAN 理论

1.模型简介

Real-ESRGAN 使用纯合成训练对训练真实世界的盲超分辨率模型。为了合成更实用的退化,模型提出了一种高阶退化过程,并使用 sinc 滤波器来模拟常见的振铃和超调伪影。这里还使用具有谱归一化正则化的 U-Net 鉴别器来增加鉴别器能力并稳定训练动态。实验证明使用合成数据训练的 Real-ESRGAN 能够增强细节,同时删除大多数真实图像的恼人伪影。

上图分别为 双三次上采样、ESRGAN、RealSR 和 Real-ESRGAN 的效果。

2.经典退化模型

 退化过程全览

盲 SR 旨在从具有未知和复杂退化的低分辨率图像中恢复高分辨率图像。通常采用经典退化模型来合成低分辨率输入。通常,首先将真实图像 y 与模糊核 k 进行卷积。然后,执行具有比例因子的下采样操作。低分辨率 x 是通过添加噪声 n 获得的。最后,JPEG压缩也被采用,因为它在真实世界的图像中被广泛使用。

其中 D 表示退化过程,退化实现了将清晰图像 y 模糊为 x 的过程。

Real-ESRGAN 中采用的纯合成数据生成。它利用二阶退化过程来模拟更实际的退化,其中每个退化过程采用经典的退化模型。其中列出了模糊、调整大小、噪声和 JPEG 压缩的详细选择。除此之外模型还使用 sinc 滤波器来合成常见的振铃和超调伪影。

K - 高斯滤波

通常将模糊退化建模为具有线性模糊滤波器(内核)的卷积。各向同性和各向异性高斯滤波器是常见的选择。对于内核大小为 2t + 1 的高斯模糊核 k,其 (i, j) ∈ [−t, t] 元素从高斯分布中采样,形式如下:

其中 Σ 是协方差矩阵; C 是空间坐标; N 是归一化常数。协方差矩阵可以进一步表示如下:

其中 σ1 和 σ2 是沿两个主轴的标准差(即协方差矩阵的特征值); θ 是旋转度。当σ1 = σ2时,k 为各向同性高斯模糊核; 否则 k 为各向异性核。

y \circledast k

这一步相当于对图像进行了高斯滤波模糊。下图为不同参数下图像的模糊效果:

N - 噪声

N 即 Noisy,我们考虑两种常用的噪声类型:1) 加性高斯噪声和 2)泊松噪声。加性高斯噪声的概率密度函数等于高斯分布的概率密度函数。噪声强度由高斯分布的标准差 σ 控制。当 RGB 图像的每个通道都有独立的采样噪声时,合成噪声是颜色噪声。我们还通过将相同的采样噪声应用于所有三个通道来合成灰色噪声。泊松噪声遵循泊松分布。它通常用于近似模拟统计量子波动引起的传感器噪声,即在给定曝光水平下感知到的光子数的变化。泊松噪声的强度与图像强度成正比,不同像素的噪声是独立的。

y \circledast k + n

这一步在高斯滤波的基础上为图像增加噪声。下图为不同噪声添加后的效果:

◆ ↓r - Resize

这一步其实代表 Downsampling 即下采样。下采样是合成 SR 中低分辨率图像的基本操作。更一般地说,我们考虑下采样和上采样,即调整大小操作。有几种调整算法——最近邻插值、区域大小调整、双线性插值和双三次插值。不同的调整大小操作会带来不同的效果——有些会产生模糊的结果,而有些可能会产生过锐化的图像,带有超调伪影。为了包含更多样化和复杂的调整大小效果,我们考虑了上述选择的随机调整大小操作。由于最近邻插值引入了错位问题,我们排除了它,只考虑区域、双线性和双三次运算。

↓r

这一步是在高斯滤波后对图像进行下采样。下图为下采样算法和上采样算法的不同组合的影响。图像首先被四倍的比例因子下采样,然后上采样到其原始大小:

jpeg - 压缩

JPEG 压缩是一种常用的数字图像有损压缩技术。它首先将图像转换为 YCbCr 颜色空间,并对色度通道进行下采样。然后将图像分成 8 × 8 个块,每个块用二维离散余弦变换 DCT 进行变换,然后对 DCT 系数进行量化。JPEG 压缩通常会引入不愉快的块伪影。压缩图像的质量由质量因子 q ∈ [0, 100] 决定,其中较低的 q 表示更高的压缩比和更差的质量。

[ ... ]_{jpeg}

上述操作代表对下采样且添加噪声的图像进行 jpeg 压缩。下图为 jpeg 压缩对图像画质的影响:

3.高阶退化模型

在采用上述经典退化模型来合成训练对时,训练后的模型确实可以处理一些真实样本。然而,它仍然不能解决现实世界中的一些复杂的退化,特别是未知的噪声和复杂的伪影。左侧的真实世界图片在经典退化模型的合成数据训练修正后可以解决,然后右侧更为复杂的真实世界图像的噪声却被放大了:

这是因为合成的低分辨率图像仍然与真实退化图像有很大的差距。因此,我们将经典的退化模型扩展到高阶退化过程,以模拟更实际的退化。经典的退化模型只包含一个固定的基本退化的数量,可以看作是一阶建模。然而,现实生活中的退化过程是相当多样化的,通常包括一系列程序,包括相机的成像系统、图像编辑、互联网传输等。

例如,当我们想要从互联网上恢复低质量的图像下载时,其潜在的退化涉及不同退化过程的复杂组合。具体来说,原始图像可能多年前用手机拍摄,这不可避免地包含相机模糊、传感器噪声、低分辨率和 JPEG 压缩等退化。然后使用锐化和调整大小操作对图像进行编辑,带来超调和模糊伪影。之后,它被上传到一些社交媒体应用程序,这引入了进一步的压缩和不可预测的噪音。随着数字传输也将带来伪影,当图像在互联网上传播多次时,这个过程变得更加复杂。

这种复杂的恶化过程不能用经典的一阶模型建模。因此,我们提出了一个高阶退化模型。n 阶模型涉及 n 个重复退化过程,其中每个退化过程采用具有相同过程但超参数不同的经典退化模型。请注意,这里的“高阶”与数学函数中使用的“高阶”不同。它主要是指同一操作的实现时间。但是我们强调高阶退化过程是关键,这表明并非所有打乱的退化都是必要的。为了使图像分辨率保持在合理的范围内,将式(1)中的下采样操作替换为随机调整大小操作。

根据经验,我们采用了二阶退化过程,因为它可以在保持简单性的同时解决大多数实际情况。下图描述了我们的纯合成数据生成管道的整体管道:

 这一系列的 D 就模拟了生活中一张颠沛流体的图片的传递过程。值得注意的是,改进的高阶退化过程并不完美,不能覆盖现实世界中的整个退化空间。相反,它仅通过修改数据合成过程来扩展先前盲 SR 方法的可解退化边界。

4.环形和超调伪影

环形伪影经常出现在图像中急剧过渡附近的虚假边缘。他们在视觉上看起来像边缘附近的波段或"幽灵"。超调伪影通常与振铃伪影相结合,表现为边缘过渡处的跳跃增加。这些伪影的主要原因是信号在没有高频的情况下是带限的。这些现象非常常见,通常由锐化算法、JPEG压缩等产生。下图显示了一些遭受振铃和超调伪影的真实样本:

上图为存在振铃和超调伪影的真实样本。下图为 sinc 内核的示例 [kernel= 21] 和相应的过滤图像,可以看到图像经过 sinc 内核滤波会出现真实世界类似的振铃和超调伪影的状态。sinc 滤波器,这是一种理想化的滤波器,可以切断高频,以合成训练对的振铃和超调伪影。sinc 滤波器内核可以表示为:

模型在两个地方采用了sinc滤波器:模糊过程和合成的最后一步。last sinc 滤波器和 JPEG 压缩的顺序被随机交换以覆盖更大的退化空间,因为一些图像可能首先被过度锐化(具有过冲伪影),然后具有JPEG压缩;而一些图像可以首先进行JPEG压缩,然后进行锐化操作。

5.网络结构

◆ ESRGAN 生成器

模型采用与 ESRGAN 相同的生成器即 SR 网络,即具有多个残差密集块 RRDB 的深度网络:

除此之外还扩展了原始的 ×4 ESRGAN 架构,以 ×2 和 ×1 的比例因子执行超分辨率。由于ESRGAN 是一个繁重的网络,我们首先使用像素 unshuffle 来减少空间大小,并在将输入输入到主ESRGAN 架构之前扩大信道大小。因此,大多数计算都是在较小的分辨率空间中进行的,可以减少 GPU 内存和计算资源消耗。

◆ U-Net 鉴别器

具有光谱归一化 SN 的 U-Net 鉴别器。由于 Real-ESRGAN 旨在解决比 ESRGAN 更大的退化空间,ESRGAN 中鉴别器的原始设计不再合适。具体来说,Real-ESRGAN 中的鉴别器需要复杂的训练输出具有更强的辨别力。它不需要区分全局样式,而是需要对局部纹理产生准确的梯度反馈。模型还将 ESRGAN 中的 VGG 样式鉴别器改进为具有跳跃连接的 U-Net 设计。UNet 输出每个像素的真实值,可以为生成器提供详细的逐像素反馈。

同时,U-Net 结构和复杂的退化也增加了训练的不稳定性。模型采用谱归一化正则化来稳定训练动力学。此外,观察到光谱归一化也有利于缓解 GAN 训练引入的过度尖锐和恼人的伪影。通过这些调整,可以能够轻松训练 Real-ESRGAN 并实现局部细节增强和伪影抑制的良好平衡。训练过程分为两个阶段。首先,我们训练了一个具有 L1 损失的面向 PSNR 的模型。获得的模型由 Real-ESRNet 命名。然后我们使用经过训练的面向 PSNR 的模型作为生成器的初始化,并使用 L1 损失、感知损失和 GAN 损失的组合训练 Real-ESRGAN。

三.Real-ESRGAN 实战

1.快速体验

图像修复

体验地址: https://arc.tencent.com/en/ai-demos/imgRestore

选择对应的图像处理任务,上传图片等待即可。

视频修复

体验地址: https://replicate.com/lucataco/real-esrgan-video

拖拽对应的图片视频到 video_path 部分,执行 run 即可等待。

2.环境搭建

 GitHub 仓库地址: GitHub - xinntao/Real-ESRGAN: Real-ESRGAN

◆ Package 安装

这里要求 Python >= 3.7 && Pytorch >= 1.7,我们直接创建 python 3.7 的环境并激活:

conda create -n Real-ESRGAN python=3.7
conda activate Real-ESRGAN

 激活后在对应环境执行下述指令并运行 setup.py 即可:

# Install basicsr - https://github.com/xinntao/BasicSR
# We use BasicSR for both training and inference
pip install basicsr
# facexlib and gfpgan are for face enhancement
pip install facexlib
pip install gfpgan
pip install -r requirements.txt
python setup.py develop

◆ 预训练模型下载

当前最新模型为 RealESRGAN_x4plus,需要下载好放入 weights 目录下,网络情况不好的情况下最好提前 wget 或者本地下载对应地址的模型再上传:

https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth

GFP-GAN 模型下载

https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth

图像质量增强的过程中,如果想要单独对人脸部分进行增强需要引入 GFP-GAN 模块,这里需要提前下载 GFP-GAN 对应的模型:

3. 图像修复

运行脚本

#!/bin/bash

model=RealESRGAN_x4plus
input=inputs/lb.png

python inference_realesrgan.py -n $model -i $input --face_enhance --fp32

模型选择上面下载的 RealESRGAN_x4plus,将我们要修复的图像上传至 input 目录下即可,根据是否需要对人像修复选择 --face_enhance 参数。

- 整体

36828 -> 5246069 光看图像的大小就可以看到图像质量得到了提升:

- 细节

脸部细节,衣服细节都得到了细化,GFP-GAN 甚至帮皇叔睁开了眼睛:

 显存不足

添加 --face_enhance 参数外,需要额外加载 GFP-GAN 模型,如果显存不足会报错:

如果有空闲显卡,可以使用 -g 指定,这里不添加 -g 参数代表使用 multi-gpu,还报错说明我们确实显存不足,如果单纯测试,可以修改 realesrgan/utils.py,将 device 写死为 cpu:

 Half Error

使用 cpu 后无法执行 half 操作,会报错 not implemented for 'Half':

所以我们添加了 --fp32 参数,强制模型精度。

4.视频修复

 运行脚本

#!/bin/bash

model=RealESRGAN_x4plus
input=inputs/video/onepiece_demo.mp4

python inference_realesrgan_video.py -n $model -i $input --fp32

在 inputs/video 目录传入对应的视频运行上述脚本即可,在 results 目录查看输出结果:

 修复思考 

如果修复带字幕的视频时,最好将字幕和视频进行分离处理,否则会出现字幕的叠影。其次,不论是图像修复还是视频修复,还是推荐使用 GPU,因为 CPU 实在是太慢辣,一帧 70s +:

 

四.总结

Real-ESRGAN + GFP-GAN 的组合可以实现真实世界的图像、视频修复的功能,效果也非常的奈斯,除了上面提到的 RealESRGAN_x4plus 模型,代码仓库中也给出了更适合动漫视频修复的 RealESRGAN_x4plus_anime_6B 专属动漫模型,有需要的同学也可以尝试。最后就是我们本文前后的呼应,大家加载本博文的文首配图有没有卡顿~ 这是因为文首的配图就是通过 Real-ESRGAN 实现图像增强的图片,其从原始的 1.5 MB 修复后大小达到 55 MB。

论文地址: https://arxiv.org/pdf/2107.10833.pdf

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

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

相关文章

CNS0项目创建交货单增加销售办事处

1、业务需求 1.1、销售办事处介绍 销售办事处是指在企业中负责销售活动的区域性单位或部门。在SD模块中,可以表示企业的不同销售地点、销售办公室、分销中心或分公司。 销售办事处扮演着多种角色和职责,例如: 销售活动管理:销售…

福州大学《嵌入式系统综合设计》 实验十二:图像压缩标准JPEG编解码

一、实验目的 掌握基于算能平台的JPEG压缩编码方法以及开发环境,包括开发主机环境搭建,硬件嵌入式开发板的连接,云平台的配置,编码程序的编译、运行等。 二、实验内容 搭建实验开发环境,并编写静止图像jpeg格式编解…

Linux常用命令——badblocks命令

在线Linux命令查询工具 badblocks 查找磁盘中损坏的区块 补充说明 badblock命令用于查找磁盘中损坏的区块。 硬盘是一个损耗设备,当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越…

渗透测试考核(靶机1)

信息收集 主机发现 nbtscan -r 172.16.17.0/24 发现在局域网内,有两台主机名字比较可疑,177和134,猜测其为目标主机,其余的应该是局域网内的其他用户,因为其主机名字比较显眼,有姓名的拼音和笔记本电脑的…

AI搜索相关性在网站和APP上的应用

设定场景:您在寻找一件新衣服,所以在浏览最喜欢的网店。您跳到搜索栏上,输入您要找的东西。您期待出现什么结果? 高度准确、相关和即时的结果。 无论在什么网站上搜索,寻找什么,甚至在打错字或使用了错误的…

【算法刷题】Day9

文章目录 611. 有效三角形的个数![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9d627e680e9144a2b67474a1d80aa030.png)题解:代码: LCR 179. 查找总价格为目标值的两个商品题解:代码: 611. 有效三角形的个数 原题链…

双向ESD保护 汽车级TVS二极管 ESD9B3.3ST5G工作原理、特性参数、封装形式

什么是汽车级TVS二极管? TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护,防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中,由于车辆启…

零基础自学编程,中文编程工具下载,中文编程工具构件之弹出菜单构件简介

一、前言: 零基础自学编程,中文编程工具下载,中文编程工具构件之弹出菜单构件简介 编程系统化教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 给大家分享一款中文编程工具,零基础…

二阶龙格塔库积分法求解混沌产生方程(求助)

最近论文中常常接触到激光产生混沌的方程,激光器作为非线性元件,在信息处理中具有非常大的潜力,其中激光产生混沌应用在通信中很有用处。论文中对于模拟数据部分,采用了以下公式来产生混沌:以此公式产生混沌的方法应用…

【HTML】VScode不打开浏览器实时预览html

1. 问题描述 预览HTML时,不想打开浏览器,想在VScode中直接实时预览 2. 解决方案 下载Microsoft官方的Live Preview 点击预览按钮即可预览

Linux设置Nginx开机自启

文章目录 获取linux系统是多少位: getconf LONG_BIT获取CentOS版本: lsb_release -a获取nginx的版本: nginx -version第一步配置文件 vim /etc/rc.local最底部增加这一行: /usr/local/nginx/sbin/nginx 第二步注册systemctl服务 在/usr/lib/systemd/system目录…

OpenAI神秘项目“Q星”浮出水面,它会威胁人类吗?

来源: 现代快报全媒体 2023-11-26 23:55:15 百年之后,人类再看这段OpenAI的“宫斗大戏”,或许会从商战之外,看到2023年的人类面对未知世界忧心忡忡。 是否要继续投入资源,催动AI进化?身处2023年的人类…

numpy知识库:numpy数据类型转换技巧

需求背景 基于numpy和opencv生成一个随机噪声灰度图像,像素值是范围[0, 256)内的整数,图像形状为(512, 512),并显示图像,源码如下 import numpy as np import cv2img np.random.randint(0, 256, size[512, 512]) cv2.imshow(&q…

[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述

目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 (1)软件架构设计(层次划分、模块划分、职责分工): (2)软件高层设计、概要设计…

同旺科技 分布式数字温度传感器 -- Modbus Poll测试

内附链接 1、数字温度传感器 主要特性有: ● 支持PT100 / PT1000 两种铂电阻; ● 支持 2线 / 3线 / 4线 制接线方式; ● 支持5V~17V DC电源供电; ● 支持电源反接保护; ● 支持通讯波特率1200bps、2…

一文秒懂|Linux字符设备驱动

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! …

亚马逊云与生成式 AI 的融合:未来展望与综述

文章目录 前言生成式AI的定义生成式 AI应用领域AI办公软件AI创意工具AI企业服务AI网络安全AIIT 运维AI软件开发AI数据智能AI数字代理AI金融AI医疗AI教育AI工业AI汽车AI机器人 后记 前言 在当今数据时代,人工智能和云计算已经成为了企业发展和创新的必不可少的工具。…

视频监控技术入门到精通,一步到位!

在当今信息化社会,视频监控技术已经成为保障公共安全、提高工作效率以及保护财产的关键技术之一。视频监控系统不仅仅是简单的安全工具,更是一个集成了高科技设备、智能分析算法和网络通信的综合系统。 客户案例 零售业 上海某大型零售商有多个门店分布…

SourceInsight - Relation Windows

磨刀不误砍柴工,你使用的工具决定了你的下限。我平时使用较多的代码编辑工具就是SourceInsight,这个工具速度快,操作方便,但处理非常大的项目的性能不是很理想,比如你要是添加整个Linux Kernel的源代码的话。 在使用SI…

物流实时数仓ODS层——Mysql到Kafka

目录 1.采集流程 2.项目架构 3.resources目录下的log4j.properties文件 4.依赖 5.ODS层——OdsApp 6.环境入口类——CreateEnvUtil 7.kafka工具类——KafkaUtil 8.启动集群项目 这一层要从Mysql读取数据,分为事实数据和维度数据,将不同类型的数据…