1 Real-ESRGAN介绍
1.1 Real-ESRGAN是什么?
Real-ESRGAN全名为Enhanced Super-Resolution GAN:增强的超分辨率的对抗生成网络,是由腾讯ARC实验室发布的一个盲图像超分辨率模型,它的目标是开发出实用的图像/视频修复算法,Real-ESRGAN 是在 ESRGAN 的基础上使用纯合成数据来进行训练的,基本上就是通过模拟高分辨率图像变低分辩率过程中的各种退化,然后再通过低清图倒推出它的高清图,简单说你也可以把它理解为一个图像/视频修复、放大工具。
github地址:Real-ESRGAN
论文地址:Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data
Real-ESRGAN 目前提供了五种模型,分别是 realesrgan-x4plus(默认)、reaesrnet-x4plus、realesrgan-x4plus-anime(针对动漫插画图像优化,有更小的体积)、realesr-animevideov3(针对动漫视频)和 realesrgan-x4plus-anime-6B,你可以根据你要处理的图片或视频选择合适的模型进行使用。
1.2 Real-ESRGAN原理
(1)生成器:
采用与ESRGAN[50]相同的生成器(SR网络),即一个具有多个残差-残差密集块(RRDB)的深网络,如图4所示。我们还扩展了原来×4ESRGAN架构,以执行以×2和×1为比例因子的超分辨率。由于ESRGAN是一个重型网络,我们首先使用像素unshuffle (pixel-shuffle[42]的逆操作)来减少空间大小,并在将输入输入到主ESRGAN架构之前扩大通道大小。因此,大多数计算都是在较小的分辨率空间中进行的,这可以减少GPU内存和计算资源的消耗。
Real-ESRGAN采用与ESRGAN相同的生成器网络。对于比例因子of×2和×1,它首先使用像素unshuffle操作来减小空间大小,并将信息重新排列到信道维度
(2)鉴别器:带光谱归一化(SN) 的U-Net鉴别器
由于Real-ESRGAN的目标是解决比ESRGAN更大的退化空间,原有的鉴别器设计在ESRGAN中不再适用。具体来说,Real-ESRGAN中的鉴别器对复杂的训练输出要求有更大的鉴别能力。除了区分全局样式,它还需要为局部纹理产生精确的梯度反馈。受[41,452]的启发,我们还将ESRGAN中的vgg风格鉴别器改进为带有跳跃连接的U-Net设计(图6)。UNet输出每个像素的真实值,并可以向生成器提供详细的per-pixel反馈。
同时,U-Net结构和复杂的退化也增加了训练的不稳定性。我们采用光谱归一化正则化[37]来动态稳定训练。此外,我们观察到光谱归一化也有利于缓解GAN训练引入的过分尖锐和恼人的伪影。通过这些调整,我们能够轻松地训练RealESRGAN,并实现局部细节增强和伪迹抑制的良好平衡。
(3)训练过程
分为两个阶段。首先,我们用L1损耗训练了一个psnr导向的模型。得到的模型被real-esrnet命名。然后,我们使用训练的面向psnr的模型作为生成器的初始化,并结合L1损失、感知损失[20]和GAN损失来训练real-esrgan[14,26,4]。
消融实验
二阶退化模型。我们在Real-ESRNet上进行降解的消融研究,因为Real-ESRNet更可控,更能反映降解的影响。我们将Real-ESRNet中的二阶过程替换为经典的退化模型来生成训练对。如fig .8(Top)所示,使用经典的一阶退化模型训练的模型不能有效去除墙面上的噪声或麦田中的模糊,而Real-ESRNet可以处理这些情况。
- Top:Real-ESRNet结果w/和w/o二级降解过程。
- Bottom:Real-ESRNet结果w/和w/ sinfilter。放大以获得最佳视角
sinc filters。如果在训练过程中不使用sinc filters,恢复的结果将放大存在于输入图像中的振响和超调伪影,如图8(下)所示,特别是在文本和行周围。相反,使用自适应滤波器训练的模型可以去除这些伪影。
(4)SN正则化的U-Net鉴别器
我们首先使用esrgan setting 包括vgg -style 鉴别器和它的损失权重。但是从图9可以看出,该模型不能还原详细的纹理(砖块和灌木),甚至会在灌木树枝上带来令人不快的伪影。使用U-Net设计可以改善局部细节。但是,它会引入不自然的纹理,也会增加训练的不稳定性。SN正则化可以在稳定训练动力学的同时改善复原纹理。
(5)更复杂的模糊核
在模糊合成中去掉了广义高斯核和平台形核。如图10所示,在一些真实的样本上,模型不能像RealESRGAN那样去除模糊和恢复锐利的边缘。然而,在大多数样本上,它们的差异是有限的,说明广泛使用的高阶退化过程的高斯核已经可以覆盖较大的真实模糊空间。由于我们仍然可以观察到稍微更好的性能,我们采用了Real-ESRGAN中那些更复杂的模糊内核。
1.3 创新点
- 提出了新的构建数据集的方法,用高阶处理,增强降阶图像的复杂度。
- 构造数据集时引入sinc filter,解决了图像中的振铃和过冲现象。
- 替换原始ESRGAN中的VGG-discriminator,使用U-Net discriminator,以增强图像的对细节上的对抗学习。
- 引入spectral normalization以稳定由于复杂数据集和U-Net discriminator带来的训练不稳定情况。
2 Real-ESRGAN部署运行
2.1 conda安装
annoconda安装和使用详见:annoconda环境构建
2.2 运行环境构建
git clone https://github.com/xinntao/Real-ESRGAN.git
cd Real-ESRGAN
conda create -n realesgan python=3.9
conda activate realesgan
pip install basicsr==1.4.2
pip install facexlib==0.3.0
pip install gfpgan==1.3.8
pip install -r requirements.txt
python setup.py develop
2.3 模型下载
通用模型地址:RealESRGAN_x4plus.pth
动漫模型地址:RealESRGAN_x4plus_anime_6B.pth
下载完成后,移动到weights目录下,完成通过命令查看显示如下:
[root@localhost Real-ESRGAN]# ll weights/
总用量 82996
-rw-r--r-- 1 root root 54 7月 6 19:46 README.md
-rw-r--r-- 1 root root 17938799 7月 19 11:15 RealESRGAN_x4plus_anime_6B.pth
-rw-r--r-- 1 root root 67040989 7月 7 15:26 RealESRGAN_x4plus.pth
创建gfpgan模型存储目录:
mkdir -p gfpgan/weights
下载gfpgan模型文件并存储到上面创建目录gfpgan/weights中:
detection_Resnet50_Final.pth
parsing_parsenet.pth
GFPGANv1.3.pth
完成后通过命令查看显示如下:
[root@localhost Real-ESRGAN]# ll gfpgan/weights/
总用量 530728
-rw-r--r-- 1 root root 109497761 7月 7 15:33 detection_Resnet50_Final.pth
-rw-r--r-- 1 root root 348632874 7月 7 15:33 GFPGANv1.3.pth
-rw-r--r-- 1 root root 85331193 7月 7 15:33 parsing_parsenet.pth
2.4 修改代码(避免从网络下载,从网络下载非常慢且经常失败)
vi Real-ESRGAN/inference_realesrgan.py
if args.face_enhance: # Use GFPGAN for face enhancement
from gfpgan import GFPGANer
face_enhancer = GFPGANer(
model_path='https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth',
upscale=args.outscale,
arch='clean',
channel_multiplier=2,
bg_upsampler=upsampler)
修改为:
if args.face_enhance: # Use GFPGAN for face enhancement
from gfpgan import GFPGANer
face_enhancer = GFPGANer(
model_path='./gfpgan/weights/GFPGANv1.3.pth',
upscale=args.outscale,
arch='clean',
channel_multiplier=2,
bg_upsampler=upsampler)
3 Real-ESRGAN效果展示
经过处理后的图片存储在results目录下
[root@localhost Real-ESRGAN]# ll results/
总用量 7908
-rw-r--r-- 1 root root 3029489 7月 19 11:20 00003_out.png
-rw-r--r-- 1 root root 133649 7月 19 11:17 0014_out.jpg
-rw-r--r-- 1 root root 4928934 7月 19 11:22 children-alpha_out.png
3.1 通用图像增强
python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs/0014.jpg --face_enhance
原始图片:
增强后的图片:
3.2 动漫图像增强
python inference_realesrgan.py -n RealESRGAN_x4plus_anime_6B -i inputs/0014.jpg
原始图片:
增强后的效果:
4 总结
Real-ESRGAN是一种基于深度学习的图像超分辨率增强方法,通过生成对抗网络实现高质量的图像重建。它在保留细节和增强图像逼真度方面表现出色,可以广泛应用于图像处理和增强领域。在AI数字人打造过程中,Real-ESRGAN主要用于语音驱动人脸后的图像增强,基于此增强技术构建高清数字人视频。