【论文阅读】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 等感知驱动方法改善了视觉效果,但生成的细节仍伴有不良伪影,与真实图像存在明显差距,因此需要进一步提升超分辨率图像的视觉质量。
2. WHAT
我们采用SRResNet的基本架构,其中大部分计算在LR特征空间中进行。我们可以选择或设计“基本模块Basic Block”(例如,残差模块,密集模块,RRDB)以获得更好的性能。
2.1. 生成器改进
为了进一步提高SRGAN恢复图像的质量,我们主要对生成器的结构进行了两项修改:
2.1.1. 去除 BN 层
原因
BN 层在训练时用批次均值和方差归一化特征,测试时用训练集估计均值和方差。当训练和测试数据集统计特征差异大时,会引入伪影且限制泛化能力。在 GAN 框架下训练且网络深时,BN 层更易产生伪影,违反稳定训练需求。
效果
去除 BN 层可实现稳定训练和一致性能,节省计算资源和内存,在某些情况下还能带来轻微性能改善。
2.1.2. 采用 RRDB 块
结构特点
RRDB 具有残差 - 残差结构,在不同层次进行残差学习,主路径中使用稠密块,网络容量因稠密连接而提高。比 SRGAN 中原始残差块更深更复杂。
训练促进技术
- 残差缩放:在将残差添加到主路径前乘以 0.2,防止不稳定,可解释为纠正不当初始化,避免残差网络中输入信号幅度放大。
- 较小初始化:将 MSRA 初始化计算的参数乘以 0.1,在实验中效果良好,有助于训练非常深的网络。
效果
基于观察到更多层和连接可提升性能,RRDB 能提升网络表示能力,捕捉更多语义信息,改善恢复纹理,减少不愉快噪声,使更深模型更易训练且性能卓越。
2.2. 判别器改进
原理
与 SRGAN 中的标准判别器不同,相对论判别器试图预测一个真实图像相对于一个假图像
更真实的概率。
标准判别器估计输入图像
是现实和自然的概率(
是 sigmoid 函数,
是未转换的鉴别器输出),而相对论平均鉴别器
,其中
表示对小批量中所有假数据取平均的操作。
普通判别器是判断一张图是真(自然)图还是假(生成)图。相对论判别器不一样,它是看一张真图比一张假图更真实的可能性有多大。比如说有一张真实的风景照和一张生成的风景照,它不是简单说这两张图哪个真哪个假,而是判断真实照片比生成照片更真实的程度。
对于标准判别器,它算出一个数(通过计算后再用
函数转换),这个数表示输入图
是真实自然的概率。
而相对论判别器呢,它要算真实图像的某个值(
相关的)减去假图像
的 平 均 值 (
),然后再用
函数得到结果,这个结果就是真图比假图更真实的概率。
标准鉴别器与相对论鉴别器之间的差异
判别器损失与生成器对抗损失
判别器损失:
生成器的对抗损失:
其呈对称形式且包含了和
。这使得生成器在对抗训练中受益于来自生成数据和真实数据的梯度,而在 SRGAN 中只有生成部分起作用。
判别器有自己的损失计算(),生成器也有对应的对抗损失(
)。生成器的对抗损失这样设计的好处是,它在训练的时候,既会考虑到真实图像的信息,也会考虑到生成图像的信息(因为损失里既有
又有相关
的部分)。而以前的 SRGAN,生成器训练时主要只靠生成图像那边的信息。这样一来,通过相对论判别器,生成器能学到更多东西,生成的图像边缘更清晰,纹理更细致,看起来就更像真实的照片了。
作用
在实验中,这种对鉴别器的修改有助于生成器学习更清晰的边缘和更详细的纹理,从而提升生成图像的质量,使生成的图像在视觉效果上更接近真实图像。
2.3. 感知损失改进
改进原因
SRGAN 中对激活后的特征进行约束存在问题。首先,激活特征非常稀疏,特别是在非常深的网络之后,如在 VGG19 - 543 层之后,图像 “baboon” 的激活神经元平均百分比仅为 11.17%,稀疏激活提供了弱监督,导致性能较差。其次,使用激活之后的特征还会导致与真实图像相比重建亮度不一致。
改进方式
对激活前的特征进行约束,开发更有效的感知损失。使用预训练的 19 层 VGG 网络,其中 54 表示在第 5 个最大池化层之前第 4 个卷积获得的特征(高层特征),22 表示低层特征,通过最小化生成图像与真实图像在激活前特征之间的距离来优化感知损失。
生成器总损失
生成器的总损失,其中是
内容损失,用于评估恢复图像
与真实值
之间的 1 - 范数距离,
和
是平衡不同损失项的系数。
MINC 损失探索
还探讨了 PIRM - SR 挑战中的感知损失变体 MINC 损失。与常用的采用为图像分类训练的 VGG 网络的感知损失不同,MINC 损失基于针对材料识别的微调 VGG 网络,重点关注纹理而非物体。尽管 MINC 损失带来的感知指标提升微小,但探索关注纹理的感知损失对 SR 有重要意义。
2.4. 网络插值策略
目的
在基于 GAN 的方法中去除不愉快的噪声,同时保持良好的感知质量,并且能够平衡感知质量和 PSNR(峰值信噪比)。
策略
首先训练一个以 PSNR 为导向的网络,然后通过微调获得一个基于 GAN 的网络
。对这两个网络的所有对应参数进行插值,得到插值模型
,其参数
,其中
是插值参数。
优点
插值模型能够为任何可行的生成有意义的结果,而不会引入伪影。可以在不重新训练模型的情况下,持续平衡感知质量和保真度。
与图像插值对比
图像插值是直接对输出图像进行逐像素插值,而不是网络参数插值。这种方法未能在噪声和模糊之间实现良好的折衷,插值图像要么过于模糊,要么噪声过多并带有伪影。而网络插值策略在平衡感知质量和保真度方面表现更优,能提供更平滑的控制。
在 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 自验证数据集。
图像缩放因子固定为,通过下采样 HR 图像获得 LR 图像,下采样使用 MATLAB 双三次插值核函数。
训练阶段
首先进行第一阶段训练,使用 L1 损失训练一个以 PSNR 为导向的模型。学习率初始化为,并且每
次小批量更新后衰减一个因子 2。
接着进入第二阶段,将第一阶段训练好的 PSNR 导向模型作为生成器的初始化。生成器使用公式中的损失函数进行训练,其中
,
。学习率设定为
,并在
迭代时减半。
优化方法
优化过程使用 Adam 优化算法,其中,
。在训练过程中,交替更新生成器和判别器网络,直到模型收敛。
生成器设置
生成器有两种设置,一种包含 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 中荣获第一名,充分证实了所提方法在感知质量方面的有效性和先进性。
相关文章:

【论文阅读】ESRGAN
学习资料 论文题目:增强型超分辨率生成对抗网络(ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks)论文地址:[1809.00219] ESRGAN:增强型超分辨率生成对抗网络代码:xinntao / ESRGAN&am…...

电脑异常情况总结
文章目录 笔记本无症状息屏黑屏 笔记本无症状息屏黑屏 🍎 问题描述: 息屏导致黑屏;依次操作计算机--》右键--》管理--》事件查看器--》Windows日志--》系统;从息屏到异常黑屏之间出现了很多错误,如下:事件…...

[项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp
目录 一、前言 二、项目的相关背景 三、搜索引擎的宏观原理 四、搜索引擎技术栈和项目环境 五、正排索引 VS 倒排索引--原理 正排索引 分词 倒排索引 六、编写数据去除标签和数据清洗模块 Parser 1.数据准备 parser 编码 1.枚举文件 EnumFile 2.去标签ParseHtml(…...
PL/I语言的起源?有C语言,有B语言和A语言吗?为什么shell脚本最开始可能有#!/bin/bash字样?为什么不支持嵌套注释?
PL/I语言的起源 在20世纪50~60年代,当时主流的编程语言是COBOL/FORTRAN/ALGOL等,IBM想要设计一门通用的编程语言,已有的编程语言无法实现此要求,故想要设计一门新语言,即是PL/I. PL/I是Programming Language/One的缩写…...

gin入门教程(3):创建第一个 HTTP 服务器
首先设置golang github代理,可解决拉取git包的时候,无法拉取的问题: export GOPROXYhttps://goproxy.io再查看自己的go版本: go version我这里的版本是:go1.23.2 linux/arm64 准备工作做好之后就可以进行开发了 3.…...

Vue+ECharts+iView实现大数据可视化大屏模板
Vue数据可视化 三个大屏模板 样式还是比较全的 包括世界地图、中国地图、canvas转盘等 项目演示: 视频: vue大数据可视化大屏模板...
el-table 表格设置必填项
el-table 表格设置必填项 要在 el-table 中集成 el-form 来设置必填项,并进行表单验证,可以使用 Element UI 提供的表单验证功能。下面是一个详细的示例,展示了如何在 el-table 中使用 el-form 来设置必填项,并进行验证。 示例代…...

vivo 轩辕文件系统:AI 计算平台存储性能优化实践
在早期阶段,vivo AI 计算平台使用 GlusterFS 作为底层存储基座。随着数据规模的扩大和多种业务场景的接入,开始出现性能、维护等问题。为此,vivo 转而采用了自研的轩辕文件系统,该系统是基于 JuiceFS 开源版本开发的一款分布式文件…...

Vue学习笔记(四)
事件处理 我们可以使用 v-on 指令 (通常缩写为 符号) 来监听 DOM 事件,并在触发事件时执行一些 JavaScript。用法为 v-on:click"methodName" 或使用快捷方式 click"methodName" 事件处理器的值可以是: 内联事件处理器࿱…...
发送短信,验证码
短信 注册阿里云的账号 开通短信服务 测试短信服务是否可用 导入jar <!-- 短信相关 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.0</version><…...

国内大语言模型哪家更好用?
大家好,我是袁庭新。 过去一年,AI大语言模型在爆发式增长,呈现百家争鸣之态。国内外相关厂商积极布局,并相继推出自家研发的智能化产品。 我在工作中已习惯借助AI来辅助完成些编码、创作、文生图等任务,甚至对它们产…...
OTP一次性密码、多因子认证笔记
文章目录 双因子认证(多因子认证)otp算法(ONE-TIME PASSWORD)otp算法大概分为几部 otp的机制服务端客户端(app端)两种主流算法otp流程图 otp是通用的吗 手机验证码天天在用,但是居然不知道这个是otp,伤自尊了,必须弄清原理。 先要知道几个概念…...

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

【机器学习】决策树算法
目录 一、决策树算法的基本原理 二、决策树算法的关键概念 三、决策树算法的应用场景 四、决策树算法的优化策略 五、代码实现 代码解释: 在机器学习领域,决策树算法是一种简单直观且易于理解的分类和回归方法。它通过学习数据特征和决策规则&#…...
P2818 天使的起誓
天使的起誓 题目描述 Tenshi 非常幸运地被选为掌管智慧之匙的天使。在正式任职之前,她必须和其他新当选的天使一样要宣誓。 宣誓仪式是每位天使各自表述自己的使命,他们的发言稿放在 n n n 个呈圆形排列的宝盒中。这些宝盒按顺时针方向被编上号码 1…...
数字信号处理实验简介
数字信号处理(Digital Signal Processing,简称DSP)是电子工程、通信、计算机科学等领域中的一个重要分支,它涉及到对离散时间信号进行分析、处理和合成的理论和方法。数字信号处理课程的实验环节通常旨在帮助学生将理论知识应用于实际问题中,通过实践加深对DSP概念和技术的…...
Flask-SQLAlchemy 组件
一、ORM 要了解 ORM 首先了解以下概念。 什么是持久化 持久化 (Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,…...

Could not retrieve mirrorlist http://mirrorlist.centos.org错误解决方法
文章目录 背景解决方法 背景 今天在一台新服务器上安装nginx,在这个过程中需要安装相关依赖,在使用yum install命令时,发生了以下报错内容: Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx8…...

最新PHP网盘搜索引擎系统源码 附教程
最新PHP网盘搜索引擎系统源码 附教程,这是一个基于thinkphp5.1MySQL开发的网盘搜索引擎,可以批量导入各大网盘链接,例如百度网盘、阿里云盘、夸克网盘等。 功能特点:网盘失效检测,后台管理功能,网盘链接管…...
SpringBoot面试热题
1.Spring IOC(控制反转)和AOP(面相切面编程)的理解 控制反转意味着将对象的控制权从代码中转移到Spring IOC容器。 本来是我们自己手动new出来的对象,现在则把对象交给Spring的IOC容器管理,IOC容器作为一个对象工厂,管理对象的创建和依赖关系…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...