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

目录

一.引言

二.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/bashmodel=RealESRGAN_x4plus
input=inputs/lb.pngpython 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/bashmodel=RealESRGAN_x4plus
input=inputs/video/onepiece_demo.mp4python 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.mzph.cn/news/183801.shtml

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

相关文章

龙卷风收音机CRadio官网地址

https://cradio.live/ Welcome Oh yeah... 产品用途 龙卷风收音机是一款倾心制作的免费的电台收听软件,可添加收听全球任意电台! 功能介绍 龙卷风收音机功能强大,可以收听电台、内置录音、定时录音、定时播放、定时关机、断线自动重连…

封装flutter webview页面

例如在flutter里面跳转百度页面 需要安装webview_flutter webview_page.dart import package:flutter/material.dart; import package:webview_flutter/webview_flutter.dart;class MyWebView extends StatefulWidget {const MyWebView({super.key, required this.webViewUrl,…

初学者如何入门深度学习:以手写数字字符识别为例看AI 的学习路径,一图胜千言!

文章大纲 深度神经网络机器学习,深度学习,数据发掘之间的关系理解深度神经网络最好的可视化工具深度学习基础概念能解决神马种类的问题?卷积池化以手写字符识别为例讲述深度学习的分类问题MNIST 数据集简介初学者入门 :生成式 AI -- generative-ai-for-beginners参考文献与…

「Verilog学习笔记」状态机-非重叠的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 根据题意 定义一个五位的中间变量lock 每次始终上升沿来临时 判断当前寄存器的低四位新数据是否等于10111 如果等于 则下一时刻lock应被清空 否则lock等于当前的lock的低四…

Android : GPS定位 获取当前位置—简单应用

示例图: MainActivity.java package com.example.mygpsapp;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Manif…

亚马逊产品如何在 TikTok 上推广?

对亚马逊卖家而言,TikTok是提升品牌社交媒体影响力的理想平台。该平台在过去一年中实现了飞速增长,使得营销变得既快捷又有趣,且高效。本文将详细阐述如何在TikTok推广亚马逊产品,并如何策划更强大的品牌营销活动。 各大品牌纷纷…

ES6中对Set、Map两种数据结构的理解

Set、Map两种数据结构的理解 前言什么是集合?什么又是字典?区别? 一、Set理解增删改查add()delete()has()clear() 遍历keys方法、values 方法、entries 方法forEach() 方法扩展运算符和 Set 结构相结合实现数组或字符串去重实现并集、交集、…

虚拟化CentOS7分区大小调整+磁盘扩容=新分区

一、适应场景 1、虚拟化环境ESXI6.7下的虚拟服务器,使用一段时间后,把空闲的存储空间腾出来,给新的分区使用。 2、Linux的版本为CentOS7 3、本例为部署minio存储业务做准备 4、虚拟化存储扩容 二、配置过程 调整分区大小,为min…

PM2 在线和离线部署uvicorn和fastapi项目过程

PM2介绍 PM2 is a daemon process manager that will help you manage and keep your application online 24/7 PM2是一个后台进程管理工具,能帮助管理应用和维持应用7*24小时运行。 PM2在线安装 npm install pm2 -gPM2离线安装(适用于内网) 参见 如何离线安装pm2…

进程(4)——进程终止【linux】

进程 (4)——进程终止【linux】 一. 进程结束情况i. 正常终止ii. 出错终止iii. 异常退出 二. 进程返回值(针对正常和出错)2.1. 进程的退出方式i. returnii. exitiii. _exit 2.2. 查看C语言中的对应返回值的对应出错2.3 使用errno2…

Golang开发之------ Beego框架

1.安装go(配置环境变量) 2.安装gorm(Goland编辑器举例): go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 3.初始化项目(首先需要在工作目录新建bin文件夹,pkg文件…

Ubuntu 22.04 LTS 上 安装 Redis

Ubuntu 22.04 LTS 上的Redis安装指南 Redis是一种开源的内存数据存储,可以用作数据库、缓存和消息代理等。本文将会介绍两种不同的安装方式,包括从源代码编译安装以及通过apt包管理器安装。 一、从源代码编译安装Redis 首先,我们需要下载最…

万宾科技水环境综合治理监测系统的融合与应用

随着社会经济的快速发展,我国的水环境污染问题日益凸显,这不仅对生态环境造成了严重破坏,也严重威胁到人民群众的健康和生活质量。为了解决这一问题,城市生命线与水环境综合治理监测系统应运而生,二者的结合将为水环境…

Maven下载与安装教程

一、下载 Maven 进入 Maven 官网:maven.apache.org/download.cgi 选择 .zip 文件下载,最新版本是 3.9.5 二、安装 Maven 将 .zip 文件解压到没有中文没有空格的路径下。例如下图,在创建一个repository的空文件夹在他的下面,用于…

科研学习|论文解读——Task complexity and difficulty in music information retrieval

摘要: 关于音乐信息检索(MIR)中任务复杂度和任务难度的研究很少,而文本检索领域的许多研究发现任务复杂度和任务难度对用户效率有显着影响。本研究旨在通过探索 i) 任务复杂度和任务难度之间的关系; ii) 影响任务难度的…

Oracle E-Business Suite软件 任意文件上传漏洞(CVE-2022-21587)

0x01 产品简介 Oracle E-Business Suite(电子商务套件)是美国甲骨文(Oracle)公司的一套全面集成式的全球业务管理软件。该软件提供了客户关系管理、服务管理、财务管理等功能。 0x02 漏洞概述 Oracle E-Business Suite 的 Oracle…

基于单片机设计的激光测距仪(采用XKC-Kl200模块)

一、前言 随着科技的不断进步和应用需求的增加,测距仪成为了许多领域必备的工具之一。传统的测距仪价格昂贵、体积庞大,使用起来不够方便。本项目采用STC89C52单片机作为主控芯片,结合XKC-KL200激光测距模块和LCD1602显示器,实现…

EXCEL一对多关系将结果合并到一个单元格

EXCEL一对多关联结果,合并到1个单元格,变成一对一 需求说明 举例说明 假设给出国家省和国家市的对应表,因为每个省都有很多个城市(如图1,截取了部分),属于一对多的情况; 如何将同…

解决:ModuleNotFoundError: No module named ‘qt_material‘

解决:ModuleNotFoundError: No module named ‘qt_material’ 文章目录 解决:ModuleNotFoundError: No module named qt_material背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时,报错&…

Alignment of HMM, CTC and RNN-T,对齐方式详解——语音信号处理学习(三)(选修二)

参考文献: Speech Recognition (option) - Alignment of HMM, CTC and RNN-T哔哩哔哩bilibili 2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 Alignment - 7 - 知乎 (zhihu.com) 本次省略所有引用论文 目录 一、E2E 模型和 CTC、RNN-T 的区别 E2E 模型的思路 C…