【论文阅读】ESRGAN

ops/2024/10/30 21:26:52/

学习资料

  • 论文题目:增强型超分辨率生成对抗网络(ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks)
  • 论文地址:[1809.00219] ESRGAN:增强型超分辨率生成对抗网络
  • 代码:xinntao / ESRGAN:ECCV18 研讨会 - 增强的 SRGAN。Champion PIRM Challenge 关于感知超分辨率。训练代码位于 BasicSR 中。

1. WHY

SRCNN→SRGAN

以PSNR为导向的方法往往输出过于平滑的结果,缺乏足够的高频细节,因为 PSNR指标在根本上与人类观察者的主观评估不一致。

所以提出了基于感知驱动的方法。 感知损失(感知损失聚焦特征空间,通过比较生成图像与真实图像在预训练网络中的特征,使模型学习到高级语义特征。这有助于生成更逼真自然、纹理细节丰富且视觉效果更好的超分辨率图像,提升模型对图像的理解与重建能力)被提出用于在特征空间而不是像素空间中优化超分辨率模型。GAN被引入到SRIR,以鼓励网络倾向于看起来更像自然图像的解决方案。进一步结合语义图像先验(利用图像中物体、场景等的已有知识。比如知道天空在上且颜色均匀,以此引导模型生成更合理的高分辨率图像,改善纹理细节,让结果更符合视觉认知),以改善恢复的纹理细节。

追求视觉愉悦结果的一个里程碑是 SRGAN。基本模型是通过残差块 [18] 构建的,并在 GAN 框架中使用感知损失进行优化。通过所有这些技术,SRGAN 显著提高了重建的整体视觉质量,超过了以 PSNR 为导向的方法。

SRGAN→ESRGAN

尽管已有如 SRGAN 等感知驱动方法改善了视觉效果,但生成的细节仍伴有不良伪影,与真实图像GT存在明显差距,因此需要进一步提升超分辨率图像的视觉质量。

2. WHAT

我们采用SRResNet的基本架构,其中大部分计算在LR特征空间中进行。我们可以选择或设计“基本模块Basic Block”(例如,残差模块,密集模块,RRDB)以获得更好的性能。

2.1. 生成器改进

为了进一步提高SRGAN恢复图像的质量,我们主要对生成器G的结构进行了两项修改:

2.1.1. 去除 BN 层

原因

BN 层在训练时用批次均值和方差归一化特征,测试时用训练集估计均值和方差。当训练和测试数据集统计特征差异大时,会引入伪影且限制泛化能力。在 GAN 框架下训练且网络深时,BN 层更易产生伪影,违反稳定训练需求。

效果

去除 BN 层可实现稳定训练和一致性能,节省计算资源和内存,在某些情况下还能带来轻微性能改善。

2.1.2. 采用 RRDB 块

结构特点

RRDB 具有残差 - 残差结构,在不同层次进行残差学习,主路径中使用稠密块,网络容量因稠密连接而提高。比 SRGAN 中原始残差块更深更复杂。

训练促进技术

  • 残差缩放:在将残差添加到主路径前乘以 0.2,防止不稳定,可解释为纠正不当初始化,避免残差网络中输入信号幅度放大。
  • 较小初始化:将 MSRA 初始化计算的参数乘以 0.1,在实验中效果良好,有助于训练非常深的网络。

效果

基于观察到更多层和连接可提升性能,RRDB 能提升网络表示能力,捕捉更多语义信息,改善恢复纹理,减少不愉快噪声,使更深模型更易训练且性能卓越。

2.2. 判别器改进

原理

与 SRGAN 中的标准判别器不同,相对论判别器试图预测一个真实图像x_r相对于一个假图像x_f更真实的概率。

标准判别器D(x)=\sigma(C(x))估计输入图像x是现实和自然的概率(\sigma是 sigmoid 函数,$C(x)$是未转换的鉴别器输出),而相对论平均鉴别器$D_{Ra}(x_r,x_f)=\sigma(C(x_r)-E_{x_f}[C(x_f)])$,其中$E_{x_f}[\cdot]$表示对小批量中所有假数据取平均的操作。


普通判别器是判断一张图是真(自然)图还是假(生成)图。相对论判别器不一样,它是看一张真图比一张假图更真实的可能性有多大。比如说有一张真实的风景照和一张生成的风景照,它不是简单说这两张图哪个真哪个假,而是判断真实照片比生成照片更真实的程度

对于标准判别器,它算出一个数(通过$C(x)$计算后再用\sigma函数转换),这个数表示输入图x是真实自然的概率。

而相对论判别器呢,它要算真实图像x_r的某个值($C(x)$相关的)减去假图像x_f的 平 均 值 ($E_{x_f}[ C( x_f) ]$),然后再用\sigma函数得到结果,这个结果就是真图比假图更真实的概率。

标准鉴别器与相对论鉴别器之间的差异

判别器损失与生成器对抗损失

判别器损失:$L_D^{Ra}=-\mathbb{E}_{x_r}\left[log\left(D_{Ra}\left(x_r,x_f\right)\right)\right]-\mathbb{E}_{x_f}\left[log\left(1-D_{Ra}\left(x_f,x_r\right)\right)\right]$

生成器的对抗损失:$L_G^{Ra}=-\mathbb{E}_{x_r}\left[log\left(1-D_{Ra}\left(x_r,x_f\right)\right)\right]-\mathbb{E}_{x_f}\left[log\left(D_{Ra}\left(x_f,x_r\right)\right)\right]$

其呈对称形式且包含了x_rx_r。这使得生成器在对抗训练中受益于来自生成数据和真实数据的梯度,而在 SRGAN 中只有生成部分起作用。


判别器有自己的损失计算($L_D^{Ra}$),生成器也有对应的对抗损失($L_G^{Ra}$)。生成器的对抗损失这样设计的好处是,它在训练的时候,既会考虑到真实图像的信息,也会考虑到生成图像的信息(因为损失里既有x_r又有相关x_f的部分)。而以前的 SRGAN,生成器训练时主要只靠生成图像那边的信息。这样一来,通过相对论判别器,生成器能学到更多东西,生成的图像边缘更清晰,纹理更细致,看起来就更像真实的照片了。

作用

在实验中,这种对鉴别器的修改有助于生成器学习更清晰的边缘和更详细的纹理,从而提升生成图像的质量,使生成的图像在视觉效果上更接近真实图像。

2.3. 感知损失改进

改进原因

SRGAN 中对激活后的特征进行约束存在问题。首先,激活特征非常稀疏,特别是在非常深的网络之后,如在 VGG19 - 543 层之后,图像 “baboon” 的激活神经元平均百分比仅为 11.17%,稀疏激活提供了弱监督,导致性能较差。其次,使用激活之后的特征还会导致与真实图像相比重建亮度不一致。

改进方式

对激活前的特征进行约束,开发更有效的感知损失L_{percep}。使用预训练的 19 层 VGG 网络,其中 54 表示在第 5 个最大池化层之前第 4 个卷积获得的特征(高层特征),22 表示低层特征,通过最小化生成图像与真实图像在激活前特征之间的距离来优化感知损失。

生成器总损失

生成器的总损失$L_G=L_{percep}+\lambda L_G^{Ra}+\eta L_1$,其中是$L_1=\mathbb{E}_{x_i}\|G(x_i)-y\|_{1}$内容损失,用于评估恢复图像$G( x_i)$与真实值y之间的 1 - 范数距离,\lambda\eta是平衡不同损失项的系数。

MINC 损失探索

还探讨了 PIRM - SR 挑战中的感知损失变体 MINC 损失。与常用的采用为图像分类训练的 VGG 网络的感知损失不同,MINC 损失基于针对材料识别的微调 VGG 网络,重点关注纹理而非物体。尽管 MINC 损失带来的感知指标提升微小,但探索关注纹理的感知损失对 SR 有重要意义。

2.4. 网络插值策略

目的

在基于 GAN 的方法中去除不愉快的噪声,同时保持良好的感知质量,并且能够平衡感知质量和 PSNR(峰值信噪比)。

策略

首先训练一个以 PSNR 为导向的网络G_{PSNR},然后通过微调获得一个基于 GAN 的网络G_{GAN}。对这两个网络的所有对应参数进行插值,得到插值模型$G_{INTERP}$,其参数$\theta_G^{INTERP}=(1-\alpha)\theta_G^{PSNR}+\alpha\theta_G^{GAN}$,其中$\alpha\in[0,1]$是插值参数。

优点

插值模型能够为任何可行的生成有意义的结果,而不会引入伪影。可以在不重新训练模型的情况下,持续平衡感知质量和保真度。

与图像插值对比

图像插值是直接对输出图像进行逐像素插值,而不是网络参数插值。这种方法未能在噪声和模糊之间实现良好的折衷,插值图像要么过于模糊,要么噪声过多并带有伪影。而网络插值策略在平衡感知质量和保真度方面表现更优,能提供更平滑的控制。

在 PIRM - SR 挑战中的应用

对于需要更高 PSNR 的区域(如 PIRM - SR 挑战中的区域 1 和 2),使用 ESRGAN 结果与以 PSNR 为导向的方法(如 RCAN)结果之间的图像插值。对于追求最佳感知质量的区域 3,采用提出的 ESRGAN 模型(使用了网络插值等改进策略),该模型在 PIRM - SR 挑战赛(区域 3)中获得了最佳感知指数的第一名。

2.5. 实验

数据

训练主要使用 DIV2K 数据集(800 张高质量 2K 分辨率图像),还补充了 Flickr2K 数据集(2650 张 2K 高分辨率图像)和 OutdoorSceneTraining (OST) 数据集,以丰富训练集纹理。

在 RGB 通道中训练模型,并通过随机水平翻转和 90 度旋转来增强训练数据集。

评估在广泛使用的基准数据集上进行,包括 Set5、Set14、BSD100、Urban100 以及 PIRM - SR 挑战中的 PIRM 自验证数据集。

图像缩放因子固定为\times 4,通过下采样 HR 图像获得 LR 图像,下采样使用 MATLAB 双三次插值核函数。

训练阶段

首先进行第一阶段训练,使用 L1 损失训练一个以 PSNR 为导向的模型。学习率初始化为2\times 10^{-4},并且每2\times 10^{5}次小批量更新后衰减一个因子 2。

接着进入第二阶段,将第一阶段训练好的 PSNR 导向模型作为生成器的初始化。生成器使用公式$L_G=L_{percep}+\lambda L_G^{Ra}+\eta L_1$中的损失函数进行训练,其中\lambda =5\times 10^{-3}\eta =1\times 10^{-2}。学习率设定为1\times 10^{-4},并在[50k,100k,200k,300k]迭代时减半。

优化方法

优化过程使用 Adam 优化算法,其中\beta _{1}=0.9\beta _{2}=0.999。在训练过程中,交替更新生成器和判别器网络,直到模型收敛。

生成器设置

生成器有两种设置,一种包含 16 个残差块,其容量与 SRGAN 相似;另一种是更深的模型,包含 23 个 RRDB 块。

训练环境

实验使用 PyTorch 框架实现模型,并使用 NVIDIA Titan Xp GPU 进行训练。

实验方法

定性结果比较、消融研究、网络插值实验、PIRM - SR 挑战参赛方法

3. HOW

定性结果出色:在多个公共基准数据集上与先进方法对比,ESRGAN 在生成图像的清晰度和细节表现上超越以往方法。如在生成动物毛发、建筑结构和草地纹理等方面更加自然逼真,且有效减少了如 SRGAN 中出现的伪影等不良现象。

消融实验验证:通过逐步修改基线 SRGAN 模型进行消融研究,证明了各改进组件(如移除 BN 层、使用激活前特征计算感知损失、采用 RaGAN 判别器、使用更深层含 RRDB 的网络)对最终结果均有积极贡献,有效提升了图像质量。

网络插值有效:网络插值策略在平衡感知质量和 PSNR 方面表现卓越,能够在减少伪影的同时保持良好纹理,而图像插值在去除伪影方面效果不佳。

挑战赛成绩优异:在 PIRM - SR 挑战赛中,采用特定配置的 ESRGAN 变体,结合 MINC 损失、Pristine 数据集、高权重 L1 损失和反向投影后处理等手段,在区域 3 中荣获第一名,充分证实了所提方法在感知质量方面的有效性和先进性。


http://www.ppmy.cn/ops/129402.html

相关文章

Http 状态码 301 Permanent Rediret 302 Temporary Redirect、 重定向 重写

HTTP状态码301和302是什么? 1、HTTP状态码301 HTTP状态码301表示永久性转移(Permanent Redirect),这意味着请求的资源已经被分配了一个新的URI,以后的引用应该使用资源现在所指的URI。 HTTP 301状态码表示请求的资源…

Spring Task—定时任务

Spring Task 是 Spring 提供的一种轻量级定时任务调度功能,内置在 Spring 框架中。与 Quartz 等重量级调度框架相比,Spring Task 使用简便,无需额外依赖,适合在简单的调度任务场景中使用。通过注解配置方式,开发者可以…

LeetCode刷题日记之贪心算法(五)

目录 前言无重叠区间划分字母区间合并区间单调递增的数字监控二叉树总结 前言 随着对贪心算法的不断深入,本篇文章将继续挑战一些经典的题目,进一步巩固这一算法的应用技巧。希望博主记录的内容能够帮助大家更好地掌握贪心算法的解题思路✍✍✍ 无重叠区…

Jenkins和Gitlab整合构建CI/CD流水线

配置环境 虚拟机建议4G起步 192.168.58.199 192.168.58.200 部署Jenkins 部署Jenkins参考这篇文章:Jenkins安装部署_connecting to pkg.jenkins.io (pkg.jenkins.io)|151.-CSDN博客 安装完毕之后根据下图操作 选择git,添加git仓库克隆url,选…

贪心算法与盛雨水问题

啥是盛雨水问题?给个图就熟悉了 欸? 这其中的关键在于: 1. 容量2D化就是长 * 宽 2. 木桶效应:宽取决于短板。 那我们来分析,怎么样能达到最佳的结果呢?穷举一下所有可能性不就好了?每两个板子…

C++算法练习-day19——18.四数之和

题目来源:. - 力扣(LeetCode) 题目思路分析 题目要求在给定的整数数组 nums 和一个目标值 target 中,找出所有独特的四元组(四个数),使得这四个数的和等于 target。需要注意的是,解…

[JAVA]JDBC事务管理方式

本节我们要学习在JDBC中如何对数据库的事务进行管理,举一个生活中的例子,我们的小伙伴小红最近资金紧缺,钱包没有余额,小红便向小明借钱。于是小明很大方的借给小红100块钱,此时,小明的钱包余额便会减少100…

bluez hid host介绍,连接键盘/鼠标/手柄不是梦,安排

零. 前言 由于Bluez的介绍文档有限,以及对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度,学习曲线也相对较陡,所以我有了这个想法,专门对Bluez做一个系统…