【论文阅读】ESRGAN

学习资料

  • 论文题目:增强型超分辨率生成对抗网络(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 中荣获第一名,充分证实了所提方法在感知质量方面的有效性和先进性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客周赛 Round 64(博弈论、思维、构造、LCA、换根DP)

文章目录 牛客周赛 Round 64(博弈论、思维、构造、LCA、换根DP)A. 小红的对错判断B. 小红的幂表达C. 小红的前缀询问D. 小红和小紫的博弈游戏(博弈论)E. 小红的字符串重排(思维、构造)F&G. 小红的树上路径查询(LCA…

LabVIEW共享变量通信故障

问题概述: 在LabVIEW项目中,使用IO服务器创建共享变量,并通过LabVIEW作为从站进行数据通信。通讯在最初运行时正常,但在经过一段时间或几个小时后,VI前面板出现错误输出,导致数据传输失败。虽然“分布式系统…

equals方法重写--自写Person类

1.Object类的equals方法(源码) public boolean equals(Object obj) {return (this obj);//判断如果比较的两个对象是同一个对象,则返回true} 2.String类重写Object类的equals方法(源码) public boolean equals(Obje…

Git的初次使用

一、下载git 找淘宝的镜像去下载比较快 点击这里 二、配置git 1.打开git命令框 2.设置配置 git config --global user.name "你的用名"git config --global user.email "你的邮箱qq.com" 3.制作本地仓库 新建一个文件夹即可,然后在文件夹…

网络一些相关术语

目录 网络一些相关术语 转发平面效率 可扩展性 控制平面 网络拓扑 服务质量(QoS) 网络协议 网络带宽 网络拥塞 网络安全 网络冗余 网络切片 网络延迟 网络地址转换(NAT) 虚拟专用网络(VPN) …

尚硅谷-react教程-求和案例-优化2-Provider组件的使用-笔记

在这篇文章的基础上,https://blog.csdn.net/weixin_41987016/article/details/143257435?spm1001.2014.3001.5501 继续优化, 借助Provider批量的给整个应用里面的所有的容器组件的添加store 原来的,src/index.js import React from "react&quo…

从0开始深度学习(17)——数值稳定性和模型初始化

在每次训练之前,都会对模型的参数进行初始化,初始化方案的选择在神经网络学习中起着举足轻重的作用, 它对保持数值稳定性至关重要。 我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快。 糟糕选择可能会导致我们在训练时遇…

云电脑的真实使用体验

最近这几年,关于云电脑的宣传越来越多。 小枣君之前曾经给大家介绍过云电脑(链接)。简单来说,它属于云计算的一个应用。通过在云端虚拟出一些虚拟电脑,然后让用户可以远程使用(仍然需要借助本地电脑&#x…

jupyter notebook改变默认启动路径

安装好Anaconda 3以后,就可以使用Jupyter notebook了,但是我们打开Jupyter notebook后,发现界面是一个默认的目录,这个目录在哪里?如果想把自己写的程序文件保存在自己新建的一个文件夹里,修改默认目录到自建的文件夹下,该如何做呢! 先看一下Jupyter notebook的默认界…

【ubuntu18.04】ubuntu18.04升级cmake-3.29.8及还原系统自带cmake操作说明

参考链接 cmake升级、更新(ubuntu18.04)-CSDN博客 升级cmake操作说明 下载链接 Download CMake 下载版本 下载软件包 cmake-3.30.3-linux-x86_64.tar.gz 拷贝软件包到虚拟机 cp /var/run/vmblock-fuse/blockdir/jrY8KS/cmake-3.29.8-linux-x86_64…

【华为路由】OSPF多区域配置

网络拓扑 设备接口地址 设备 端口 IP地址 RTA Loopback 0 1.1.1.1/32 G0/0/0 10.1.1.1/24 RTB Loopback 0 2.2.2.2/32 G0/0/0 10.1.1.2/24 G0/0/1 10.1.2.1/24 RTC Loopback 0 3.3.3.3/32 G0/0/0 10.1.2.2/24 G0/0/1 10.1.3.1/24 RTD Loopback 0 4.4.4…

大模型Transformer笔记:KV缓存

1 MHA(Multi-Head Attention) 最经典的多头注意力 等价于多个独立的单头注意力的拼接 对于LLM来说,一般都是自回归地一个一个token的输出,也就相当于只有Transformer的decoder input在变化,之前作为prompt部分的是不变…

java智能物流管理系统源码(springboot)

项目简介 智能物流管理系统实现了以下功能: 智能物流管理系统的主要使用者分为管理员,顾客,员工,店主。功能有个人中心,顾客管理,员工管理,店主管理,门店信息管理,门店…

【制造业&电子产品】电脑电子元件检测系统源码&数据集全套:改进yolo11-TADDH

改进yolo11-SCConv等200全套创新点大全:电脑电子元件检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析: 这道题提到了对于“区间”进行操作,而差分数列就是对于区间进行操作的好方法。 观察差分数列: 给定数列:1 3 5 2 7 1 差分数列:1 2 2 -3 5 6 题目要求把原数组全部…

基于Springboot+Vue的食品商城系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景:win11,duilib应用,双显示器,两台分辨率相同,分别设置不同的缩放以后,应用运行以后,程序闪一下消失或者程序还在,但是UI显示不出来。 原因 窗口风格设置不合理,所以…

记录贴 为VScode配置C语言环境

大致步骤参考这位博主的过程:如何在 VS Code 中编写、运行C语言程序 教程_visual studio code怎么写c语言-CSDN博客 第一步:安装VScode。 第二步:安装两个插件:C/C Extension Pack和code runner。(后面我发现&#x…

django5入门【03】新建一个hello界面

文章目录 1、前提条件⭐2、操作步骤总结3、实际操作示例 1、前提条件⭐ 将上一节创建的 Django 项目导入到 PyCharm 中。 2、操作步骤总结 (1)在 HelloDjango/HelloDjango 目录下,新建一个 views.py 文件。 (2)在 H…

WebGl 缩放矩阵

缩放矩阵是线性代数中的一种矩阵,用于描述图形在空间中沿着各个坐标轴进行均匀缩放的变换。在3D图形编程中,缩放矩阵通常用于调整物体的大小,而不改变其形状。 | x 0 0 0 | | 0 y 0 0 | | 0 0 z 0 | | 0 0 0 1 | 其中&#xff0…