👨🎓 博主简介:博士研究生
🔬 超级学长:超级学长@实验室(提供各种程序开发、实验复现与论文指导)
💬 个人卫星:easy_optics
🕮 目 录
-
- 摘要
- 一、研究背景与动机
-
- [1.1 传统超分辨率的局限性](#1.1 传统超分辨率的局限性)
- [1.2 真实世界退化的复杂性](#1.2 真实世界退化的复杂性)
- 二、核心技术详解
-
- [2.1 经典降质模型](#2.1 经典降质模型)
-
- [2.1.1 模糊(Blur)](#2.1.1 模糊(Blur))
- [2.1.2 噪声(Noise)](#2.1.2 噪声(Noise))
- [2.1.3 缩放(Resize)](#2.1.3 缩放(Resize))
- [2.1.4 JPEG压缩](#2.1.4 JPEG压缩)
- [2.2 高阶降质模型(核心创新)](#2.2 高阶降质模型(核心创新))
-
- [2.2.1 动机](#2.2.1 动机)
- [2.2.2 高阶降质模型](#2.2.2 高阶降质模型)
- [2.2.3 二阶降质实现](#2.2.3 二阶降质实现)
- [2.3 振铃和过冲伪影建模](#2.3 振铃和过冲伪影建模)
-
- [2.3.1 问题描述](#2.3.1 问题描述)
- [2.3.2 Sinc滤波器解决方案](#2.3.2 Sinc滤波器解决方案)
- [2.4 网络架构设计](#2.4 网络架构设计)
-
- [2.4.1 生成器(ESRGAN Generator)](#2.4.1 生成器(ESRGAN Generator))
- [2.4.2 U-Net判别器(核心改进)](#2.4.2 U-Net判别器(核心改进))
- [2.4.3 谱归一化(Spectral Normalization)](#2.4.3 谱归一化(Spectral Normalization))
- [2.5 训练策略](#2.5 训练策略)
-
- [2.5.1 两阶段训练](#2.5.1 两阶段训练)
- [2.5.2 训练对池(Training Pair Pool)](#2.5.2 训练对池(Training Pair Pool))
- [2.5.3 训练技巧:锐化真实图像](#2.5.3 训练技巧:锐化真实图像)
- 三、实验结果与分析
-
- [3.1 实验设置](#3.1 实验设置)
-
- [3.1.1 数据集](#3.1.1 数据集)
- [3.1.2 硬件配置](#3.1.2 硬件配置)
- [3.2 定量结果](#3.2 定量结果)
- [3.3 定性结果](#3.3 定性结果)
-
- [3.3.1 伪影去除能力](#3.3.1 伪影去除能力)
- [3.3.2 纹理恢复能力](#3.3.2 纹理恢复能力)
- [3.4 消融实验](#3.4 消融实验)
-
- [3.4.1 二阶降质模型的作用](#3.4.1 二阶降质模型的作用)
- [3.4.2 Sinc滤波器的作用](#3.4.2 Sinc滤波器的作用)
- [3.4.3 判别器设计的影响](#3.4.3 判别器设计的影响)
- [3.4.4 更复杂模糊核的影响](#3.4.4 更复杂模糊核的影响)
- 四、模型局限性
-
- [4.1 扭曲线问题](#4.1 扭曲线问题)
- [4.2 GAN训练伪影](#4.2 GAN训练伪影)
- [4.3 分布外退化](#4.3 分布外退化)
- 五、总结与思考
-
- [5.1 核心贡献总结](#5.1 核心贡献总结)
- [5.2 技术启示](#5.2 技术启示)
- [5.3 实际应用价值](#5.3 实际应用价值)
- 七、实践成果展示:SRResNet网络训练与测试
-
- [7.1 自主实现的网络架构](#7.1 自主实现的网络架构)
-
- [7.1.1 SRResNet生成器](#7.1.1 SRResNet生成器)
- [7.1.2 损失函数设计](#7.1.2 损失函数设计)
- [7.2 训练配置](#7.2 训练配置)
- [7.3 训练过程可视化](#7.3 训练过程可视化)
- [7.4 超分辨效果展示](#7.4 超分辨效果展示)
- [7.5 代码实现能力证明](#7.5 代码实现能力证明)
- [7.6 实践结论](#7.6 实践结论)
摘要
尽管在盲超分辨率领域已经做出了许多尝试来恢复具有未知和复杂退化的低分辨率图像,但这些方法在处理一般真实世界退化图像方面仍有很大差距。本文将强大的ESRGAN扩展到一个实用的修复应用中(即Real-ESRGAN),该模型仅使用纯合成数据进行训练。
核心贡献包括:
- 高阶降质建模过程:更好地模拟复杂的真实世界退化
- Sinc滤波器:模拟常见的振铃(ringing)和过冲(overshoot)伪影
- U-Net判别器 + 谱归一化:增强判别器能力并稳定训练动态
大量对比实验表明,Real-ESRGAN在各种真实数据集上具有优于先前方法的视觉效果。
一、研究背景与动机
1.1 传统超分辨率的局限性
单图像超分辨率(SR)旨在从低分辨率(LR)图像重建高分辨率(HR)图像。自SRCNN开创性工作以来,深度卷积神经网络方法为SR领域带来了繁荣发展。
然而,大多数方法假设一个理想的双三次下采样核,这与真实退化有很大不同。这种退化不匹配使得这些方法在真实场景中不实用。
1.2 真实世界退化的复杂性
当我们用手机拍照时,照片可能已经有多种退化:
- 相机模糊
- 传感器噪声
- 锐化伪影
- JPEG压缩
然后我们进行一些编辑并上传到社交媒体应用,这会引入进一步的压缩和不可预测的噪声。当图像在互联网上多次共享时,上述过程变得更加复杂。
这种复杂的退化过程无法用经典的一阶模型来建模。
二、核心技术详解
2.1 经典降质模型
盲超分辨率旨在从具有未知和复杂退化的低分辨率图像中恢复高分辨率图像。经典降质模型通常用于合成低分辨率输入:
x = D ( y ) = [ ( y ⊗ k ) ↓ r + n ] J P E G x = D(y) = [(y \otimes k) \downarrow_r + n]_{JPEG} x=D(y)=[(y⊗k)↓r+n]JPEG
其中 D D D 表示降质过程, y y y 是真实图像, k k k 是模糊核, ↓ r \downarrow_r ↓r 是下采样操作, n n n 是噪声。
2.1.1 模糊(Blur)
模糊退化通常建模为与线性模糊滤波器的卷积。常见选择包括:
各向同性和各向异性高斯滤波器:
k ( i , j ) = 1 N exp ( − 1 2 C T Σ − 1 C ) k(i, j) = \frac{1}{N} \exp\left(-\frac{1}{2}C^T \Sigma^{-1} C\right) k(i,j)=N1exp(−21CTΣ−1C)
其中 Σ \Sigma Σ 是协方差矩阵, C = [ i , j ] T C = [i, j]^T C=[i,j]T 是空间坐标。
协方差矩阵可进一步表示为:
Σ = R [ σ 1 2 0 0 σ 2 2 ] R T \Sigma = R \begin{bmatrix} \sigma_1^2 & 0 \\ 0 & \sigma_2^2 \end{bmatrix} R^T Σ=R[σ1200σ22]RT
其中 σ 1 \sigma_1 σ1 和 σ 2 \sigma_2 σ2 是两个主轴的标准差, θ \theta θ 是旋转角度。当 σ 1 = σ 2 \sigma_1 = \sigma_2 σ1=σ2 时为各向同性高斯模糊核。
广义高斯模糊核和高原形分布:
为了包含更多样化的核形状,Real-ESRGAN还采用:
- 广义高斯分布: 1 N exp ( − 1 2 ( C T Σ − 1 C ) β ) \frac{1}{N} \exp\left(-\frac{1}{2}(C^T \Sigma^{-1} C)^\beta\right) N1exp(−21(CTΣ−1C)β)
- 高原形分布: 1 N 1 1 + ( C T Σ − 1 C ) β \frac{1}{N} \frac{1}{1+(C^T \Sigma^{-1} C)^\beta} N11+(CTΣ−1C)β1
其中 β \beta β 是形状参数。实验发现,包含这些模糊核可以为一些真实样本产生更清晰的输出。
2.1.2 噪声(Noise)
考虑两种常用噪声类型:
1. 加性高斯噪声
- 噪声强度由高斯分布的标准差(sigma值)控制
- 当RGB图像的每个通道有独立采样的噪声时,合成的是彩色噪声
- 通过对所有三个通道使用相同的采样噪声,可以合成灰度噪声
2. 泊松噪声
- 遵循泊松分布
- 用于近似模拟由统计量子涨落引起的传感器噪声
- 泊松噪声强度与图像强度成正比,不同像素处的噪声相互独立
2.1.3 缩放(Resize)
缩放操作包括下采样和上采样。不同的缩放算法带来不同的效果:
- 最近邻插值
- 区域缩放
- 双线性插值
- 双三次插值
为了包含更多样化和复杂的缩放效果,Real-ESRGAN在area、bilinear和bicubic操作中随机选择(排除最近邻插值以避免对齐问题)。
2.1.4 JPEG压缩
JPEG压缩是一种常用的数字图像有损压缩技术:
- 首先将图像转换为YCbCr颜色空间并下采样色度通道
- 将图像分割为8×8块,每个块进行二维离散余弦变换(DCT)
- 对DCT系数进行量化
压缩图像质量由质量因子 q ∈ [ 0 , 100 ] q \in [0, 100] q∈[0,100] 决定,较低的 q q q 表示较高的压缩比和较差的质量。
2.2 高阶降质模型(核心创新)
2.2.1 动机
当采用上述经典降质模型合成训练对时,训练的模型确实可以处理一些真实样本。但是,它仍然无法解决真实世界中一些复杂的退化,特别是未知噪声和复杂伪影。
这是因为合成低分辨率图像与真实退化图像之间仍存在较大差距。
2.2.2 高阶降质模型
经典降质模型只包含固定数量的基本退化,可视为一阶建模。然而,真实世界的退化过程相当多样,通常包括一系列程序:相机成像系统、图像编辑、互联网传输等。
Real-ESRGAN提出高阶降质模型:
x = D n ( y ) = ( D n ∘ ⋯ ∘ D 2 ∘ D 1 ) ( y ) x = D_n(y) = (D_n \circ \cdots \circ D_2 \circ D_1)(y) x=Dn(y)=(Dn∘⋯∘D2∘D1)(y)
其中n阶模型涉及n次重复的降质过程,每个降质过程采用经典降质模型(相同程序但不同超参数)。
2.2.3 二阶降质实现
为了在简单性和有效性之间取得良好平衡,Real-ESRGAN采用二阶降质过程:
┌─────────────────────────────────────────────┐
│ 第一阶降质过程 │
│ ┌───────┐ ┌────────┐ ┌───────┐ ┌──────┐ │
高分辨率图像 ───►│ │ 模糊 ├──►│ 下采样 ├──►│ 噪声 ├──►│ JPEG │ │
│ └───────┘ └────────┘ └───────┘ └──────┘ │
└──────────────────────┬──────────────────────┘
▼
┌─────────────────────────────────────────────┐
│ 第二阶降质过程 │
│ ┌───────┐ ┌────────┐ ┌───────┐ ┌──────┐ │
│ │ 模糊 ├──►│ 下采样 ├──►│ 噪声 ├──►│ JPEG │ │
│ └───────┘ └────────┘ └───────┘ └──────┘ │
└──────────────────────┬──────────────────────┘
▼
┌──────────────────┐
│ Sinc滤波器 │
└────────┬─────────┘
▼
低分辨率合成图像
具体参数设置:
| 降质类型 | 参数设置 |
|---|---|
| 模糊核 | 高斯核(0.7)、广义高斯核(0.15)、高原形核(0.15);核大小7-21; σ ∈ [ 0.2 , 3 ] \sigma \in [0.2, 3] σ∈[0.2,3](第一阶)或 [ 0.2 , 1.5 ] [0.2, 1.5] [0.2,1.5](第二阶) |
| Sinc核 | 概率0.1;第二阶模糊跳过概率0.2 |
| 噪声 | 高斯噪声(0.5)、泊松噪声(0.5); σ ∈ [ 1 , 30 ] \sigma \in [1, 30] σ∈[1,30];灰度噪声概率0.4 |
| JPEG压缩 | 质量因子 q ∈ [ 30 , 95 ] q \in [30, 95] q∈[30,95] |
| 最终Sinc滤波器 | 概率0.8 |
2.3 振铃和过冲伪影建模
2.3.1 问题描述
振铃伪影(Ringing Artifacts)通常表现为图像中尖锐过渡附近的虚假边缘,视觉上看起来像边缘附近的条纹或"鬼影"。
过冲伪影(Overshoot Artifacts)通常与振铃伪影结合出现,表现为边缘过渡处的跳变增强。
这些伪影的主要原因是没有高频成分的带限信号。它们非常常见,通常由锐化算法、JPEG压缩等产生。
2.3.2 Sinc滤波器解决方案
Real-ESRGAN采用Sinc滤波器来合成振铃和过冲伪影:
k ( i , j ) = ω c 2 π i 2 + j 2 J 1 ( ω c i 2 + j 2 ) k(i, j) = \frac{\omega_c}{2\pi \sqrt{i^2 + j^2}} J_1\left(\omega_c \sqrt{i^2 + j^2}\right) k(i,j)=2πi2+j2 ωcJ1(ωci2+j2 )
其中:
- ( i , j ) (i, j) (i,j) 是核坐标
- ω c \omega_c ωc 是截止频率
- J 1 J_1 J1 是第一类一阶贝塞尔函数
Sinc滤波器的应用位置:
- 模糊过程中
- 合成过程的最后一步
最后Sinc滤波器和JPEG压缩的顺序随机交换,以覆盖更大的退化空间(有些图像可能先过度锐化再有JPEG压缩,有些则相反)。
2.4 网络架构设计
2.4.1 生成器(ESRGAN Generator)
Real-ESRGAN采用与ESRGAN相同的生成器架构,即包含多个残差密集块(RRDB)的深度网络:
输入图像
│
▼
┌─────────────┐
│ Pixel │ (×2和×1模型使用,减少空间尺寸)
│ Unshuffle │
└──────┬──────┘
│
▼
┌─────────────┐
│ 初始卷积 │ Conv 3×64, kernel=9
│ + ReLU │
└──────┬──────┘
│
▼
┌─────────────┐
│ RRDB Block │ ×23
│ ... │
└──────┬──────┘
│
▼
┌─────────────┐
│ 中间卷积 │ Conv 64×64, kernel=3 + BN
└──────┬──────┘
│ (全局残差连接)
│◄──────────────────────────────────┐
▼ │
┌─────────────┐ │
│ 上采样模块 │ PixelShuffle ×2 │
│ (×2) │ │
└──────┬──────┘ │
│ │
▼ │
┌─────────────┐ │
│ 上采样模块 │ PixelShuffle ×2 │
│ (×2) │ │
└──────┬──────┘ │
│ │
▼ │
┌─────────────┐ │
│ 输出卷积 │ Conv 64×3, kernel=9 │
└──────┬──────┘ │
│ │
▼ │
输出图像 ──────────────────────────────┘
关键特点:
- 对于×2和×1放大因子,首先使用像素反洗牌(pixel-unshuffle)减少空间尺寸,将信息重新排列到通道维度
- 大部分计算在较小的分辨率空间进行,减少GPU内存和计算资源消耗
2.4.2 U-Net判别器(核心改进)
Real-ESRGAN需要处理的退化空间比ESRGAN大得多,原始VGG风格判别器不再适用:
问题分析:
- 判别器需要更强的判别能力来区分复杂训练输出的真实性
- 需要为局部纹理提供准确的梯度反馈
解决方案 :将VGG风格判别器改进为U-Net设计,带有跳跃连接:
输入图像
│
▼
┌───────────────┐
│ Conv Block │
│ (下采样) │
└───────┬───────┘
│
┌──────────┴──────────┐
│ │
▼ │
┌───────────────┐ │
│ Conv Block │ │ 跳跃连接
│ (下采样) │ │
└───────┬───────┘ │
│ │
┌────┴────┐ │
│ │ │
▼ │ │
┌─────┐ │ │
│中间 │ │ │
│层 │ │ │
└──┬──┘ │ │
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐
│ Conv Block │────►│ 上采样+融合 │
│ (上采样) │ └───────┬───────┘
└───────────────┘ │
▼
┌───────────────┐
│ 输出层 │
│ (逐像素真值) │
└───────────────┘
优势:
- U-Net输出每个像素的真实值,可以为生成器提供详细的逐像素反馈
- 跳跃连接保留多尺度特征信息
2.4.3 谱归一化(Spectral Normalization)
U-Net结构和复杂退化增加了训练不稳定性。Real-ESRGAN采用谱归一化(SN)正则化来稳定训练动态:
W S N = W σ ( W ) W_{SN} = \frac{W}{\sigma(W)} WSN=σ(W)W
其中 σ ( W ) \sigma(W) σ(W) 是权重矩阵 W W W 的谱范数(最大奇异值)。
谱归一化的作用:
- 稳定训练动态
- 减轻GAN训练引入的过度锐化和恼人伪影
- 实现局部细节增强和伪影抑制的良好平衡
2.5 训练策略
2.5.1 两阶段训练
第一阶段:训练PSNR导向模型(Real-ESRNet)
- 损失函数:L1损失
- 学习率: 2 × 10 − 4 2 \times 10^{-4} 2×10−4
- 迭代次数:1000K
第二阶段:训练Real-ESRGAN
- 初始化:使用Real-ESRNet权重
- 损失函数组合:L1损失 + 感知损失 + GAN损失
- 权重:{1, 1, 0.1}
- 感知损失:使用VGG19的{conv1,...conv5}特征图,权重{0.1, 0.1, 1, 1, 1}
- 学习率: 1 × 10 − 4 1 \times 10^{-4} 1×10−4
- 迭代次数:400K
2.5.2 训练对池(Training Pair Pool)
为了提高训练效率,所有降质过程都在PyTorch中用CUDA加速实现,可以即时合成训练对。
但批处理限制了批次中合成退化的多样性(例如,批次中的样本不能有不同的缩放因子)。因此,采用训练对池来增加批次中的退化多样性:
- 池大小:180
- 每次迭代从池中随机选择训练样本
2.5.3 训练技巧:锐化真实图像
在训练期间对真实图像进行锐化,可以在不引入可见伪影的情况下视觉改善锐度:
- 传统方法(如非锐化掩蔽USM)容易引入过冲伪影
- 训练期间锐化真实图像可实现锐度和过冲伪影抑制的更好平衡
- 使用锐化真实图像训练的模型记为 Real-ESRGAN+
三、实验结果与分析
3.1 实验设置
3.1.1 数据集
训练数据:
- DIV2K
- Flickr2K
- OutdoorSceneTraining
训练HR patch大小:256
3.1.2 硬件配置
- 4块NVIDIA V100 GPU
- 总批次大小:48
- 优化器:Adam
3.2 定量结果
在多个真实世界图像测试数据集上进行NIQE(无参考图像质量评估)对比:
| 方法 | RealSR-Canon | RealSR-Nikon | DRealSR | DPED-iphone | OST300 | ADE20K val |
|---|---|---|---|---|---|---|
| Bicubic | 6.1269 | 6.3607 | 6.5766 | 6.0121 | 4.4440 | 7.5239 |
| ESRGAN | 6.7715 | 6.7480 | 8.6335 | 5.7363 | 3.5245 | 3.6905 |
| DAN | 6.5282 | 6.6063 | 7.0720 | 6.1414 | 5.0232 | 6.3839 |
| RealSR | 6.8692 | 6.7390 | 7.7213 | 5.5855 | 4.5715 | 3.4102 |
| CDC | 6.1488 | 6.3265 | 6.6359 | 6.2738 | 4.7441 | 6.9219 |
| BSRGAN | 5.7489 | 5.9920 | 6.1362 | 5.9906 | 4.1662 | 3.9434 |
| Real-ESRGAN | 4.5899 | 5.0753 | 4.9796 | 5.4352 | 2.8659 | 3.7886 |
| Real-ESRGAN+ | 4.5314 | 5.0247 | 4.8458 | 5.2631 | 2.8191 | 3.5778 |
注:NIQE分数越低越好。Real-ESRGAN+在大多数测试数据集上获得最低NIQE分数。
3.3 定性结果
Real-ESRGAN在以下方面表现出色:
3.3.1 伪影去除能力
- 振铃/过冲伪影:第一个测试样本包含过冲伪影(字母周围的白色边缘)。直接上采样会放大这些伪影(如DAN和BSRGAN)。Real-ESRGAN用Sinc滤波器模拟这些伪影,能有效去除。
- 复杂伪影:第二个测试样本包含未知和复杂的退化。大多数算法无法有效消除,而Real-ESRGAN使用二阶降质过程训练,可以处理。
3.3.2 纹理恢复能力
Real-ESRGAN能够恢复更真实的纹理:
- 砖块纹理
- 山脉纹理
- 树木纹理
而其他方法要么无法去除退化,要么添加不自然的纹理(如RealSR和BSRGAN)。
3.4 消融实验
3.4.1 二阶降质模型的作用
| 方法 | 效果 |
|---|---|
| 一阶降质模型 | 无法有效去除墙面噪声或麦田模糊 |
| 二阶降质模型 | 能处理这些复杂情况 |
3.4.2 Sinc滤波器的作用
| 方法 | 效果 |
|---|---|
| 无Sinc滤波器 | 放大输入图像中存在的振铃和过冲伪影,特别是文本和线条周围 |
| 有Sinc滤波器 | 能去除这些伪影 |
3.4.3 判别器设计的影响
| 判别器设计 | 效果 |
|---|---|
| ESRGAN设置(VGG风格) | 无法恢复详细纹理(砖块和灌木),甚至在灌木枝条中带来不愉快伪影 |
| U-Net判别器(无SN) | 改善局部细节,但引入不自然纹理并增加训练不稳定性 |
| U-Net判别器 + SN | 改善恢复纹理并稳定训练动态 |
3.4.4 更复杂模糊核的影响
| 模糊核类型 | 效果 |
|---|---|
| 仅高斯核 | 在大多数样本上与Real-ESRGAN差异不大 |
| 高斯核 + 广义高斯核 + 高原形核 | 在一些真实样本上能更好地去除模糊并恢复锐利边缘 |
四、模型局限性
尽管Real-ESRGAN能够恢复大多数真实世界图像,但仍存在一些局限性:
4.1 扭曲线问题
一些恢复图像(特别是建筑和室内场景)由于混叠问题而出现扭曲线。
4.2 GAN训练伪影
GAN训练在一些样本上引入不愉快的伪影。
4.3 分布外退化
无法去除真实世界中分布外的复杂退化,甚至可能放大这些伪影。
五、总结与思考
5.1 核心贡献总结
Real-ESRGAN的成功源于三个关键创新:
- 高阶降质模型
- 思想:真实退化是多次降质过程的组合
- 实现:二阶降质过程,每个过程采用经典降质模型但参数不同
- 效果:覆盖更广的退化空间
- Sinc滤波器建模
- 思想:振铃和过冲伪影由带限信号产生
- 实现:在模糊过程和最后步骤中使用Sinc滤波器
- 效果:有效模拟和去除常见伪影
- U-Net判别器 + 谱归一化
- 思想:更大退化空间需要更强判别能力
- 实现:U-Net提供逐像素反馈,SN稳定训练
- 效果:细节增强与伪影抑制的良好平衡
5.2 技术启示
-
数据合成的艺术:纯合成数据可以训练出强大的模型,关键在于合成过程能否很好地模拟真实分布
-
建模思想:将复杂问题分解为简单过程的重复组合(高阶建模)是一种有效策略
-
架构匹配:网络架构应与任务复杂度匹配,更大的退化空间需要更强的判别器
5.3 实际应用价值
Real-ESRGAN具有极高的实用价值:
- 纯合成训练:无需收集真实的配对数据
- 广泛适用性:能处理大多数真实世界图像
- 开源贡献:提供完善的代码和预训练模型
七、实践成果展示:SRResNet网络训练与测试
基于对Real-ESRGAN论文的深入理解,本人独立实现了一套完整的图像超分辨率深度学习系统。本节展示实践训练过程与结果,证明已具备深度学习图像处理的核心开发能力。
7.1 自主实现的网络架构
7.1.1 SRResNet生成器
基于论文思想,独立设计并实现了SRResNet网络架构:
SRResNet 架构设计
├── 输入层: Conv(3, 64, kernel=9) + PReLU
├── 残差块组 (×16)
│ └── 每个残差块: Conv(64, 64, kernel=3) + BN + PReLU ×2 + 残差连接
├── 中间层: Conv(64, 64, kernel=3) + BN
├── 上采样模块 (×2)
│ └── Conv(64, 256, kernel=3) + PixelShuffle(×2) + PReLU
└── 输出层: Conv(64, 3, kernel=9) + Tanh
关键技术创新:
- 16个残差块:深层特征提取,避免梯度消失
- PixelShuffle上采样:高效亚像素卷积,避免棋盘格伪影
- PReLU激活函数:自适应学习负半轴斜率,提升表达能力
- 全局残差学习:加速收敛,稳定训练
7.1.2 损失函数设计
采用复合损失函数:
L t o t a l = L M S E + λ ⋅ L L 1 L_{total} = L_{MSE} + \lambda \cdot L_{L1} Ltotal=LMSE+λ⋅LL1
其中:
- L M S E L_{MSE} LMSE: 均方误差损失,优化像素级重建精度
- L L 1 L_{L1} LL1: L1损失,提升感知质量
- λ = 0.1 \lambda = 0.1 λ=0.1: 平衡系数
7.2 训练配置
| 配置项 | 参数值 |
|---|---|
| 框架 | PyTorch 2.0+ |
| 优化器 | Adam (β1=0.9, β2=0.999) |
| 初始学习率 | 1e-4 |
| 学习率调度 | StepLR (step=10, γ=0.5) |
| 批次大小 | 8 |
| 训练轮次 | 20 epochs |
| 图像块大小 | 96×96 |
| 放大因子 | ×4 |
7.3 训练过程可视化
训练过程中记录了PSNR和SSIM指标的变化:

训练曲线分析:
| 训练阶段 | Epoch | PSNR (dB) | SSIM | 说明 |
|---|---|---|---|---|
| 初始阶段 | 1 | 15.34 | 0.4521 | 网络初始化,输出模糊 |
| 快速提升 | 5 | 21.87 | 0.6543 | 残差学习发挥作用 |
| 稳定收敛 | 10 | 23.56 | 0.7012 | 细节逐步恢复 |
| 精细优化 | 15 | 24.21 | 0.7198 | 接近收敛 |
| 最终结果 | 20 | 24.42 | 0.7279 | 达到最优性能 |
关键观察:
- PSNR从15.34dB提升至24.42dB,提升幅度达9.08dB
- SSIM从0.4521提升至0.7279,结构相似度显著提高
- 训练曲线平滑收敛,证明网络设计合理
7.4 超分辨效果展示

结果分析:
上图中展示了三个不同场景的超分辨效果对比:
| 场景 | 双三次插值PSNR | SRResNet PSNR | 提升幅度 |
|---|---|---|---|
| 场景1 | 21.56 dB | 24.49 dB | +2.93 dB |
| 场景2 | 20.87 dB | 23.92 dB | +3.05 dB |
| 场景3 | 22.13 dB | 25.18 dB | +3.05 dB |
| 平均 | 21.52 dB | 24.53 dB | +3.01 dB |
视觉效果对比:
- 双三次插值:图像模糊,细节丢失,边缘不清晰
- SRResNet重建:边缘锐利,纹理清晰,细节恢复明显
7.5 代码实现能力证明
实现能力总结:
| 能力项 | 实现状态 |
|---|---|
| 网络架构设计 | ✅ 独立完成 |
| 数据加载与增强 | ✅ 独立完成 |
| 损失函数设计 | ✅ 独立完成 |
| 训练循环实现 | ✅ 独立完成 |
| 指标计算(PSNR/SSIM) | ✅ 独立完成 |
| 可视化结果生成 | ✅ 独立完成 |
| 模型保存与加载 | ✅ 独立完成 |
7.6 实践结论
通过本次实践,验证了以下能力:
-
理论理解能力:深入理解Real-ESRGAN论文的核心技术,包括降质模型、网络架构、训练策略
-
工程实现能力:能够独立从零开始实现完整的深度学习超分辨率系统,包括数据准备、模型构建、训练优化、结果评估全流程
-
问题解决能力:解决了依赖库兼容性问题,实现了无basicsr依赖的独立可运行程序
-
实验分析能力:能够设计合理的实验,分析训练过程,评估模型性能