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

这篇具有很好参考价值的文章主要介绍了Python - Real-ESRGAN 提升图像、视频清晰度 - 最高可达 4 K。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

目录

一.引言

二.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 能够增强细节,同时删除大多数真实图像的恼人伪影。

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

2.经典退化模型

 退化过程全览

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

K - 高斯滤波

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

N - 噪声

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

◆ ↓r - Resize

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

↓r

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

jpeg - 压缩

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

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

3.高阶退化模型

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

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

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

4.环形和超调伪影

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

5.网络结构

◆ ESRGAN 生成器

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

◆ U-Net 鉴别器

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

同时,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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

视频修复

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

拖拽对应的图片视频到 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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

GFP-GAN 模型下载

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

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,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 光看图像的大小就可以看到图像质量得到了提升:

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

- 细节

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

 显存不足

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

 Half Error

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

所以我们添加了 --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 目录查看输出结果:

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

 修复思考 

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

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

python对视频画质提高,Python,深度学习,深度学习,人工智能,机器学习,Real ESRGAN,GFP-GAN

四.总结

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

论文地址: https://arxiv.org/pdf/2107.10833.pdf文章来源地址https://www.toymoban.com/news/detail-767573.html

到了这里,关于Python - Real-ESRGAN 提升图像、视频清晰度 - 最高可达 4 K的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 来自腾讯AI实验室的Real-ESRGAN将模糊老照片和视频修复成高清晰(一些错误处理)

            Real-ESRGAN:Enhanced Super-Resolution GAN: 增强的超分辨率的对抗生成网络 ,对于GAN相信大家都比较熟悉,前有阿尔法狗,现有很多GAN的延伸版本,StyleGAN1~3系列以及DragGAN对于图片的生成和编辑,出来的效果都很惊艳。         一些旧照片,时代比较久远了,那个时候

    2024年02月08日
    浏览(71)
  • Real-ESRGAN超分辨网络

    《Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data》 文章目录 一、Real-ESRGAN主要介绍 二、Real-ESRGAN主要内容 1、摘要 2、论文方法 3、方法详细介绍 · Blur · Noise · Resize(Downsampling) · JPEG compression · High-order Degradation Model · Ringing and overshoot artifacts  · U-Net结构判别

    2024年03月16日
    浏览(39)
  • 为什么视频画质会变差,如何提升视频画质清晰度。

    在数字时代,视频已经成为我们生活中不可或缺的一部分。然而,随着视频的传输和处理过程中的多次压缩,画质损失逐渐凸显,影响了我们对影像的真实感受。为了让视频画质更加清晰、逼真,我们需要采取一些措施来保护和修复视频画质,还原影像的真实之美。 1、录制

    2024年02月16日
    浏览(43)
  • Python 图像处理教程:如何提高图像细节清晰度

    Python 是一种广泛应用于图像处理的编程语言,它提供了丰富的图像处理库,例如 Pillow 和 OpenCV 等。在进行图像处理时,有时候我们需要提高图像的细节清晰度,以便更好地观察和分析图像。本教程将介绍一些 Python 图像处理技巧,帮助您提高图像细节的清晰度。 增强图像对

    2024年02月11日
    浏览(40)
  • 如何提高视频清晰度?视频调整清晰度操作方法

    现在很多小伙伴通过制作短视频发布到一些短视频平台上记录生活,分享趣事。但制作的视频有些比较模糊,做视频的小伙伴应该都知道,视频画质模糊不清,会严重影响观众的观看体验。 通过研究,总结了以下几点严重影响的点 1、寻找的素材不是高清素材 2、手机电脑视

    2024年02月10日
    浏览(43)
  • 基于PyQt5的桌面图像调试仿真平台开发(11)清晰度测试

    基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)亮度处理 基于PyQt5的桌

    2024年02月12日
    浏览(42)
  • 使用ffmpeg实现视频旋转并保持清晰度不变

    通过ffmpeg -i命令查看视频基本信息 通过命令查看,原始视频信息 分辨率为1920x1080,码率19977k, 帧率59.94 -qscale value:使用固定的视频量化标度(VBR),以value质量为基础的VBR,取值0.01-255,越小质量越好 -q:v:表示存储jpeg的图像质量 -b:v:设置输出文件的视频比特率(码率),本

    2024年01月25日
    浏览(45)
  • videojs 实现自定义组件(视频画质/清晰度切换) React

    最近使用videojs作为视频处理第三方库,用来对接m3u8视频类型。这里总结一下自定义组件遇到的问题及实现,目前看了许多文章也不全,官方文档写的也不是很详细,自己摸索了一段时间陆陆续续完成了,这是实现后的效果. 样式啥的自己检查后覆盖就行了,没啥说的,重点看

    2024年02月11日
    浏览(69)
  • 4K、2K、1080p、720p、480p、240p常见视频清晰度

    记录自用 一、清晰度对应的格式 标号 视频类型 格式尺寸 类型 比例 1 4K 4096*2160 4K 16:9 2 2K 2560*1440 2K 16:9 3 全高清 1920*1080 1080p 16:9 4 高清 1280*720 720p 16:9 5 标清 720*480 480p 3:2 6 标清 640*480 480p 4:3 7 流畅 320*240 240p ​4:3 注: 字母P意为逐行扫描 多数情况下4k特指4096 * 2160分辨率。而根

    2024年02月11日
    浏览(99)
  • html5视频播放器代码实例(含倍速、清晰度切换、续播)

    本文将对视频播放相关的功能进行说明(基于云平台),包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。  图 / html5视频播放器调用效果(倍速切换)    图

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包