ESRGAN 源码级实战指南:ECCV 2018 冠军感知超分辨率网络的原理、推理与网络插值

发布时间:2026/10/15 15:38:20
ESRGAN 源码级实战指南:ECCV 2018 冠军感知超分辨率网络的原理、推理与网络插值 人工智能深度学习计算机视觉图像处理【免费下载链接】ESRGANECCV18 Workshops - Enhanced SRGAN. Champion PIRM Challenge on Perceptual Super-Resolution. The training codes are in BasicSR.项目地址https://gitcode.com/gh_mirrors/es/ESRGAN点击查看免费下载本文以仓库 README.md 为主线完整梳理 ESRGANEnhanced Super-Resolution Generative Adversarial Networks的核心设计、推理测试、网络插值策略与训练经验并结合仓库内的 RRDBNet_arch.py、test.py、net_interp.py 等源码逐行印证其底层实现。读完本文你将能够独立完成 ESRGAN 的模型推理、在 PSNR 与感知质量之间平滑权衡的网络插值操作并理解 RRDB 网络结构、残差缩放等关键技术细节为迁移到 Real-ESRGAN 等更实用的真实图像复原方案打下基础。一、项目背景从 SRGAN 到 ESRGAN 的演进ESRGAN 由 Xintao Wang 等人提出论文《ESRGAN: Enhanced super-resolution generative adversarial networks》发表于 ECCV 2018 WorkshopsECCVW并在 PIRM2018-SR 感知超分竞赛的 region 3 中夺得第一名、获得最佳感知指数perceptual index。作为 SRGAN 的增强版本ESRGAN 在生成对抗网络框架下同时追求感知质量与结构保真。需要说明的是本仓库ESRGAN定位明确训练代码位于 BasicSR 工具箱中本仓库只提供简单的测试推理代码、预训练模型与网络插值演示。README 同时指出由于部分仓库依赖本仓库代码作者将保持本仓库尤其是代码部分稳定不变。此外作者已将 ESRGAN 进一步扩展为Real-ESRGAN——一个面向真实世界图像复原的实用算法可以去除恼人的 JPEG 压缩伪影Real-ESRGAN 提供了更便捷的推理脚本支持 tile 推理、alpha 通道、灰度图、16-bit 图像以及无需安装环境的 Windows 可执行文件RealESRGAN-ncnn-vulkan内含原始 ESRGAN 模型原始 ESRGAN 模型与重训练模型均可在其中继续使用。若你以真实图像修复为目标README 推荐直接尝试 Real-ESRGAN。引用本仓库工作时的 BibTeX 如下InProceedings{wang2018esrgan, author {Wang, Xintao and Yu, Ke and Wu, Shixiang and Gu, Jinjin and Liu, Yihao and Dong, Chao and Qiao, Yu and Loy, Chen Change}, title {ESRGAN: Enhanced super-resolution generative adversarial networks}, booktitle {The European Conference on Computer Vision Workshops (ECCVW)}, month {September}, year {2018} }二、三大核心改进RRDB、相对平均 GAN 与激活前特征感知损失README 明确列出 ESRGAN 相对 SRGAN 的三个改进方向这是理解整个模型的关键采用不含批归一化BN层的更深网络使用 Residual-in-Residual Dense BlockRRDB作为基本模块移除 BN 层使用 Relativistic average GAN 替代 vanilla GAN让判别器判断真实图像比生成图像更真实的概率而非简单地判断图像真伪改进感知损失使用激活之前的特征features before activation来计算感知损失保留更多有判别力的信息。其中第一点与 SRGAN 的结论形成鲜明对比SRGAN 论文声称更深的模型越来越难训练而 ESRGAN 采用无 BN 的 RRDB 结构后更深模型不仅易训练而且性能更优。2.1 RRDB 网络结构的源码印证仓库中的 RRDBNet_arch.py 就是推理所依赖的完整网络定义包含三个层次ResidualDenseBlock_5C5 层稠密连接残差块RRDBNet_arch.pynf64为特征通道数gc32为 growth channel中间增长通道数。前向过程把每一层输出逐级拼接到后续输入torch.cat最终输出为x5 * 0.2 x其中0.2 即残差缩放系数residual scaling用于稳定深层网络训练。def forward(self, x): x1 self.lrelu(self.conv1(x)) x2 self.lrelu(self.conv2(torch.cat((x, x1), 1))) x3 self.lrelu(self.conv3(torch.cat((x, x1, x2), 1))) x4 self.lrelu(self.conv4(torch.cat((x, x1, x2, x3), 1))) x5 self.conv5(torch.cat((x, x1, x2, x3, x4), 1)) return x5 * 0.2 xRRDBResidual in Residual Dense BlockRRDBNet_arch.py由 3 个 RDB 级联而成输出同样乘以 0.2 再与输入相加形成残差中的残差结构。RRDBNet完整生成器RRDBNet_arch.py构造函数签名RRDBNet(in_nc, out_nc, nf, nb, gc32)其中nb23表示 RRDB trunk 中堆叠 23 个 RRDB 块。上采样部分采用两次F.interpolate(..., scale_factor2, modenearest)配合upconv1/upconv2实现 4 倍x4超分激活函数统一使用LeakyReLU(negative_slope0.2)。所有卷积均为 3×3、padding1、含 bias整个生成器没有任何 BN 层这一点与 README 的核心改进完全一致。下图展示了 ESRGAN 的整体生成器架构与 RRDB 模块细节来自 figures/architecture.jpg 与 figures/RRDB.png2.2 深层网络训练的实用技巧README 特别总结了训练极深网络的两条经验详见论文附录残差缩放residual scaling每个残差分支乘以小于 1 的系数本仓库实现中为 0.2避免深层梯度爆炸更小的初始化smaller initialization以较小尺度初始化卷积权重保证训练初期数值稳定。对比图见 figures/train_deeper_neta.png 与 figures/train_deeper_netb.png。2.3 训练 patch size 的影响README 还给出一个经验性观察更深网络从更大的训练 patch 中获益更多。在 Set5 数据集RGB 通道上评估深层模型随 patch 增大提升约 0.12dB而浅层模型仅提升约 0.04dB——更大的模型容量能充分利用更大的训练 patch对比图见 figures/patch_a.png 与 figures/patch_b.png。三、快速上手环境依赖与推理测试3.1 依赖与环境README 列出的依赖非常精简Python 3PyTorch 1.0若通过 CUDA 安装要求 CUDA 版本 7.5Python 包pip install numpy opencv-python3.2 推理四步走克隆仓库并进入目录git clone https://gitcode.com/gh_mirrors/es/ESRGAN cd ESRGAN将你自己的低分辨率图像放入./LR文件夹仓库已提供baboon与comic两张示例图位于 LR/。下载预训练模型README 提供 Google Drive 与百度网盘两种途径放入./models目录。仓库提供两个模型高感知质量模型与高 PSNR模型详见 models/README.md。运行推理python test.py结果输出到./results文件夹。3.3 test.py 源码逐行解读test.py 是本仓库唯一的推理入口其关键逻辑如下model_path models/RRDB_ESRGAN_x4.pth # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth device torch.device(cuda) # if you want to run on CPU, change cuda - cpu模型路径第 8 行通过修改model_path变量在RRDB_ESRGAN_x4.pth与RRDB_PSNR_x4.pth之间切换README 原始工作流中也支持直接以命令行参数形式指定模型路径如python test.py models/interp_08.pth若你的版本不接受该参数直接改model_path即可。运行设备第 9-10 行默认cudaCPU 环境将cuda改为cpu。网络实例化第 14 行arch.RRDBNet(3, 3, 64, 23, gc32)对应输入 3 通道、输出 3 通道、特征通道 64、23 个 RRDB、增长通道 32。图像预处理第 27-31 行cv2.imread以 BGR 顺序读图除以 255 归一化到 [0,1]再通过img[:, :, [2, 1, 0]]将 BGR 转 RGB 并调整维度为(C, H, W)最后unsqueeze(0)增加 batch 维度。前向推理第 33-35 行在torch.no_grad()下完成前向输出经clamp_(0, 1)截断到合法像素范围。结果保存第 35-37 行再次做 RGB→BGR 通道还原、乘以 255 取整写入results/{文件名}_rlt.png。3.4 预训练模型说明models/README.md 给出了两个预训练模型的关键信息RRDB_ESRGAN_x4.pth论文中使用的最终 ESRGAN 模型侧重感知质量RRDB_PSNR_x4.pthPSNR 导向模型具有高 PSNR 表现。⚠️重要前提两个模型均在MATLAB bicubic 下采样核下训练。如果实际低分辨率图像的降采样核与此不一致结果可能出现伪影——这是使用预训练模型时最常见的坑需根据图像来源判断是否适用。此外仓库中的 transer_RRDB_models.py 提供了一个模型权重转换脚本若下载到的旧格式 checkpoint 带有module.前缀或使用model.0、model.1.sub等旧命名该脚本会将其键名映射到RRDBNet的state_dict格式如conv_first.weight、RRDB_trunk.*、upconv1/upconv2、HRconv、conv_last便于直接用 test.py 加载。四、网络插值Network Interpolation在感知质量与 PSNR 之间自由权衡网络插值是 ESRGAN 论文提出的重要策略通过对RRDB_ESRGAN感知质量模型与RRDB_PSNRPSNR 导向模型的权重进行线性插值获得介于两者之间的模型从而平滑地控制输出在视觉美观与数值保真之间的位置。4.1 使用步骤README 原文流程运行python net_interp.py 0.8其中0.8是插值参数alpha可取[0, 1]内任意值运行python test.py models/interp_08.pth其中models/interp_08.pth为生成的插值模型路径。4.2 net_interp.py 源码解析net_interp.py 的实现非常简洁、可读性极高alpha float(sys.argv[1]) net_PSNR_path ./models/RRDB_PSNR_x4.pth net_ESRGAN_path ./models/RRDB_ESRGAN_x4.pth net_interp_path ./models/interp_{:02d}.pth.format(int(alpha*10)) net_PSNR torch.load(net_PSNR_path) net_ESRGAN torch.load(net_ESRGAN_path) net_interp OrderedDict() for k, v_PSNR in net_PSNR.items(): v_ESRGAN net_ESRGAN[k] net_interp[k] (1 - alpha) * v_PSNR alpha * v_ESRGAN torch.save(net_interp, net_interp_path)要点alpha0时插值结果完全等于 PSNR 模型alpha1时完全等于 ESRGAN 模型权重插值**逐键per-tensor**进行两模型结构必须完全一致均为RRDBNet(3,3,64,23,gc32)输出文件按int(alpha*10)命名例如alpha0.8生成models/interp_08.pth、alpha0.5生成interp_05.pth。4.3 插值效果下图展示了随插值参数从 0 变化到 1 时输出图像在清晰度/结构与感知纹理之间的连续过渡来自 figures/net_interp.jpgREADME 特别指出一个有趣现象网络插值策略能够对 RRDB_PSNR 模型与微调后的 ESRGAN 模型提供平滑、连续的控制。仓库还提供了两张插值过程的平滑动画示例figures/81.gif 与 figures/102061.gif直观展示了从 PSNR 导向逐步过渡到感知导向的动态效果。五、量化表现PSNR 对比与感知驱动结果5.1 RRDB 在标准基准上的 PSNR 表现README 强调使用DF2K 数据集由 DIV2K 与 Flickr2K 合并而成后者由 EDSR 工作提出训练的RRDB_PSNRPSNR 导向模型同样具备极高的 PSNR 性能。原表数值如下单元格格式为 PSNR / SSIM 两项指标MethodTraining datasetSet5Set14BSD100Urban100Manga109SRCNN29130.48/0.862827.50/0.751326.90/0.710124.52/0.722127.58/0.8555EDSRDIV2K32.46/0.896828.80/0.787627.71/0.742026.64/0.803331.02/0.9148RCANDIV2K32.63/0.900228.87/0.788927.77/0.743626.82/0.808731.22/0.9173RRDB (ours)DF2K32.73/0.901128.99/0.791727.85/0.745527.03/0.815331.66/0.9196可见 RRDB 在全部五个基准上均取得最高数值。示例结果图可参考 figures/baboon.jpg推理输出示例见 results/baboon_ESRGAN.png。5.2 感知驱动perceptual-driven结果README 还提供了一张覆盖多数据集的感知驱动结果清单结果可从项目公布的网盘获取HR 图像可从 BasicSR 数据集页面下载。数据集覆盖Set5、Set14、BSDS100、PIRMval, test、OST300、urban100、DIV2Kval, test对比方法包括 ESRGAN、SRGAN、EnhanceNet 与 CXDatasetsLRESRGANSRGANEnhanceNetCXSet5✅✅✅✅Set14✅✅✅✅BSDS100✅✅✅✅PIRMval, test✅✅✅❌✅OST300✅✅✅❌urban100✅✅✅❌DIV2Kval, test✅✅✅❌✅ 表示已提供❌ 表示未包含 表示 TODO。六、消融实验与 BN 伪影6.1 消融实验figures/abalation_study.png 展示了 ESRGAN 各组件的消融对比每一列代表一种配置组合表头标注配置红色标记表示相对前一模型的主要提升点。通过逐列对比可以清晰看出 RRDB 结构、相对平均 GAN 与激活前特征感知损失各自对最终视觉质量的贡献。6.2 BN 伪影BN artifactsREADME 报告了一个重要经验性发现BN 层倾向于带来伪影。这些被称为 BN artifacts 的伪影会偶尔出现在不同迭代与不同设置下违背了训练稳定性需求。实验表明以下因素会影响 BN 伪影的出现网络深度depthBN 层的位置position训练数据集训练损失这正是 ESRGAN 全面移除 BN 层的关键动机之一具体现象见 figures/BN_artifacts.jpg。七、常见问题FAQ复现 PIRM18-SR 竞赛结果QA.md 回答了社区最关心的两个问题对理解论文模型 vs 发布模型的差异极有帮助Q1如何复现 PIRM18-SR 挑战赛的低感知指数结果发布在仓库中的RRDB_ESRGAN_x4.pth不同于竞赛提交模型。作者发现更低的感知指数并不总是对应更好的视觉效果——竞赛目标是压低感知指数而 ESRGAN 工作的目标是更好的视觉质量。竞赛场景下作者使用了若干技巧见论文 Sec 4.5并配合 MATLAB 后处理main_reverse_filter.m来进一步优化感知指数。复现流程为下载竞赛模型与代码 → 将 LR 图像放入LR文件夹 →python test.py→ 在 MATLAB 中运行main_reverse_filter.m后处理。作者机器上的复现结果为Perceptual index: 1.9777RMSE: 15.304对应组别 SuperSR。Q2论文中的感知指数如何获得论文 Fig. 2PIRM 自验证集使用竞赛提交模型并施加与竞赛相同的后处理目的是展示感知-失真平面perception-distortion plane论文 Fig. 7使用仓库发布的RRDB_ESRGAN_x4.pth测试且不做任何后处理以呈现发布模型的真实感知质量。这一 FAQ 提醒读者感知指数PI在大尺度上与人工评分相关性良好但在更细粒度上并非始终吻合这也凸显了更优质感知质量指标的必要性。八、总结与延伸ESRGAN 在三个方面对 SRGAN 做了系统性升级无 BN 的 RRDB 深度网络配合残差缩放与更小初始化、相对平均 GAN与激活前特征感知损失并凭借网络插值策略在数值保真与感知质量之间提供可控的权衡。本仓库虽只提供推理与插值演示训练代码位于 BasicSR但代码量小、结构清晰是学习感知超分原理的理想起点。若你的目标是真实世界图像的复原如去除 JPEG 压缩伪影、处理任意退化核README 明确推荐升级到 Real-ESRGAN——它保留了对本仓库RRDB_ESRGAN_x4.pth及重训练模型的兼容使用并提供了 tile 推理、alpha 通道、灰度图、16-bit 图像支持及开箱即用的 Windows 可执行版本。从本仓库的推理脚本出发再迁移到 Real-ESRGAN 的推理脚本是平滑且值得推荐的进阶路径。进一步阅读仓库资源README.md项目总览、QA.md竞赛复现 FAQ、RRDBNet_arch.py网络定义、test.py推理脚本、net_interp.py网络插值脚本、transer_RRDB_models.py旧权重转换、models/README.md模型说明。赞分享人工智能深度学习计算机视觉图像处理【免费下载链接】ESRGANECCV18 Workshops - Enhanced SRGAN. Champion PIRM Challenge on Perceptual Super-Resolution. The training codes are in BasicSR.项目地址https://gitcode.com/gh_mirrors/es/ESRGAN点击查看免费下载相关推荐MMagic 中的 RealBasicVSR 实战真实世界视频超分辨率的网络原理、两阶段训练与推理指南MMagic 中的 RealBasicVSR 实战真实世界视频超分辨率的网络原理、两阶段训练与推理指南 本指南以 OpenMMLab MMagic 仓库中的媒体生成计算机视觉深度学习人工智能大模型ESRGAN超分辨率实战指南从原理到应用的完整教程ESRGAN超分辨率实战指南从原理到应用的完整教程 ESRGANEnhanced Super Resolution Generative Adversari人工智能深度学习计算机视觉图像处理GluonCV SRGAN 实战指南基于 DIV2K 数据集的 4 倍超分辨率网络训练、监控与推理GluonCV SRGAN 实战指南基于 DIV2K 数据集的 4 倍超分辨率网络训练、监控与推理 本篇技术指南围绕 GluonCV 仓库中的 SRGAN 官计算机视觉深度学习预训练创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询