TIP-2021《SRGAT: Single Image Super-Resolution With Graph Attention Network》
推荐深蓝学院的《深度神经网络加速:cuDNN 与 TensorRT》,课程面向就业,细致讲解CUDA运算的理论支撑与实践,学完可以系统化掌握CUDA基础编程知识以及TensorRT实战,并且能够利用GPU开发高性能、高并发的软件系统,感兴趣可以直接看看链接:
深蓝学院《深度神经网络加速:cuDNN 与 TensorRT》
核心思想分析
论文提出了一种基于图注意力网络(Graph Attention Network, GAT)的单幅图像超分辨率(Single Image Super-Resolution, SISR)方法,称为 SRGAT。其核心思想是利用图像内部的 patch-recurrence(小块重复性)特性,通过图神经网络(GNN)挖掘低分辨率(LR)图像中不同 patch 之间的结构相似性和互补信息,从而增强高分辨率(HR)图像的重构质量。
- Patch-Recurrence 特性:自然图像中,相似的小块(patch)在不同区域重复出现,这些 patch 可能具有不同的分辨率或丢失不同的细节信息(见论文图 1)。SRGAT 通过构建 patch 间的图结构,捕捉这些相似性,并利用 GAT 进行信息聚合,增强纹理和结构细节。
- 图注意力机制:与传统基于卷积神经网络(CNN)的 SISR 方法不同,SRGAT 在特征空间中构建图,将每个 patch 视为节点,利用 GAT 学习 patch 之间的关系,避免直接替换 patch 带来的不一致问题。
- 并行分支设计:SRGAT 结合了 图相似性分支(Graph Similarity Branch)和 内容分支(Content Branch),分别负责挖掘结构信息和纹理细节,通过特征融合提升重建效果。
目标函数分析
SRGAT 的目标函数基于 L 1 L_1 L1 范数损失,旨在最小化超分辨率图像 I S R I^{SR} ISR 与真实高分辨率图像 I H R I^{HR} IHR 之间的像素级差异。目标函数定义如下:
L ( θ ) = 1 l ∑ i = 1 l ∥ I i S R − I i H R ∥ 1 L(\theta) = \frac{1}{l} \sum_{i=1}^{l} \| I_i^{SR} - I_i^{HR} \|_1 L(θ)=l1i=1∑l∥IiSR−IiHR∥1
-
变量说明:
- θ \theta θ:SRGAT 模型的参数。
- l l l:训练集中的图像对数量。
- I i S R I_i^{SR} IiSR:第 i i i 张低分辨率图像经过 SRGAT 生成的超分辨率图像。
- I i H R I_i^{HR} IiHR:对应的真实高分辨率图像。
- ∥ ⋅ ∥ 1 \|\cdot\|_1 ∥⋅∥1: L 1 L_1 L1 范数,计算像素级绝对差的和。
-
特点:
- 简单性:论文仅使用 L 1 L_1 L1 损失,未引入复杂的对抗损失(如 GAN)或感知损失(如 VGG 特征损失),却依然取得竞争性结果,体现了模型设计的有效性。
- 鲁棒性: L 1 L_1 L1 损失对噪声和异常值较为鲁棒,适合 SISR 任务中像素级的精确重建。
- 局限性: L 1 L_1 L1 损失可能导致生成图像过于平滑,缺乏高频细节。论文通过图相似性分支挖掘 patch 间的结构信息,部分弥补了这一不足。
目标函数的优化过程
SRGAT 的优化过程通过最小化上述 L 1 L_1 L1 损失函数,使用 ADAM 优化器 进行梯度下降训练。具体优化步骤如下:
-
初始化:
- 初始学习率设为 1 0 − 4 10^{-4} 10−4,ADAM 参数设置为 β 1 = 0.9 \beta_1 = 0.9 β1=0.9, β 2 = 0.999 \beta_2 = 0.999 β2=0.999, ϵ = 1 0 − 8 \epsilon = 10^{-8} ϵ=10−8。
- 训练数据集为 DIV2K,包含 800 张训练图像,100 张验证图像和 100 张测试图像。
-
数据预处理:
- 从高分辨率图像中裁剪 patch,通过双三次插值(bicubic)下采样生成对应的低分辨率 patch。
- 数据增强包括缩放、翻转和旋转(90°、180°、270°)。
-
训练过程:
- 每个训练 batch 包含 16 个 40 × 40 40 \times 40 40×40 的低分辨率 patch。
- 训练共 1000 个 epoch,每个 epoch 包含 1000 次反向传播迭代。
- 学习率每 200 个 epoch 减半,以保证收敛。
-
反馈机制:
- SRGAT 采用反馈连接(feedback connections),在特征映射块中通过 T T T 次迭代( t ≤ T t \leq T t≤T)利用高层信息精炼低层特征表示。特征映射块的数学表达为:
F M t o u t = [ f G ( F M t i n ) ∥ f C ( F M t i n ) ] , 1 ≤ t ≤ T F_{M_t}^{out} = \left[ f_G(F_{M_t}^{in}) \| f_C(F_{M_t}^{in}) \right], \quad 1 \leq t \leq T FMtout=[fG(FMtin)∥fC(FMtin)],1≤t≤T
其中, f G ( ⋅ ) f_G(\cdot) fG(⋅) 和 f C ( ⋅ ) f_C(\cdot) fC(⋅) 分别表示图相似性分支和内容分支的操作, ∥ \| ∥ 表示特征拼接, F M t i n F_{M_t}^{in} FMtin 为第 t t t 次迭代的输入特征:
F M t i n = { f E ( I L R ) , t = 1 [ F M t − 1 o u t ∥ f E ( I L R ) ] , 1 < t ≤ T F_{M_t}^{in} = \begin{cases} f_E(I^{LR}), & t = 1 \\ \left[ F_{M_{t-1}}^{out} \| f_E(I^{LR}) \right], & 1 < t \leq T \end{cases} FMtin={fE(ILR),[FMt−1out∥fE(ILR)],t=11<t≤T
f E ( ⋅ ) f_E(\cdot) fE(⋅) 为特征提取块的操作。
- SRGAT 采用反馈连接(feedback connections),在特征映射块中通过 T T T 次迭代( t ≤ T t \leq T t≤T)利用高层信息精炼低层特征表示。特征映射块的数学表达为:
-
实现细节:
- 使用 PyTorch 框架,在 NVIDIA 1080Ti GPU 上训练。
- 模型能够在 0.2 秒内处理一张 256 × 256 256 \times 256 256×256 的图像( × 4 \times 4 ×4 尺度)。
主要贡献点
-
引入 GNN 到 SISR:
- 首次将图神经网络(GNN)应用于单幅图像超分辨率,通过在特征空间构建 patch 图,挖掘 patch 间的结构相似性,降低对精确 patch 匹配的依赖。
-
图注意力机制(GAT)的应用:
- 使用 GAT 学习 patch 间的关系,通过自注意力机制为重要特征分配更大权重,增强了模型对复杂结构(如边缘、角点)的建模能力。
-
并行分支设计:
- 提出图相似性分支和内容分支的并行结构,分别聚焦结构信息和纹理细节,通过特征融合提升重建质量。
-
鲁棒的 patch-recurrence 利用:
- 利用图像内部 patch 的冗余性,通过图结构传播互补信息,生成更鲁棒的超分辨率估计,尤其在复杂场景(如 Urban100)和高度相关 patch 场景(如 Manga109)中表现优异。
-
优异的实验表现:
- 在五个基准数据集(Set5、Set14、BSD100、Urban100、Manga109)上,SRGAT 在 × 2 \times 2 ×2、 × 3 \times 3 ×3、 × 4 \times 4 ×4 尺度下均超越或匹敌最先进方法,PSNR 和 SSIM 指标表现突出。
实验结果分析
数据集
- 训练数据集:DIV2K(800 张训练图像,100 张验证图像,100 张测试图像)。
- 测试数据集:
- Set5、Set14、BSD100:自然场景图像。
- Urban100:城市场景,包含复杂频率细节。
- Manga109:日本漫画,具有高度相关的 patch 模式。
- 评估指标:PSNR(峰值信噪比)和 SSIM(结构相似性),在 YCbCr 空间的亮度通道(Y 通道)上计算。
定量结果
- 比较方法:与 13 种最先进方法比较,包括 SRCNN、VDSR、LapSRN、DRCN、DRRN、MemNet、EDSR、SRMDNF、CARN、FRSR、RNAN、USRNet 和 OISR-RK3。
- 结果亮点(见表 I,论文页面 4911):
- 在 × 2 \times 2 ×2 尺度下,SRGAT 在 Set5(38.20/0.9610)、Set14(33.93/0.9201)、Urban100(32.90/0.9359)上取得最高 PSNR/SSIM。
- 在 × 3 \times 3 ×3 和 × 4 \times 4 ×4 尺度下,SRGAT 在大多数数据集上表现最佳或次佳,尤其在 Urban100 和 Manga109 上优势明显(例如, × 4 \times 4 ×4 尺度下 Urban100 的 PSNR 为 26.76/0.8052)。
- 与 EDSR、RNAN、OISR-RK3 相比,SRGAT 使用较少的滤波器(64 vs. 256)和参数,却依然达到竞争性性能(见图 4,论文页面 4912)。
- 运行时间(表 II,论文页面 4911):
- SRGAT 的速度略慢于 CARN,但优于 EDSR,且性能更佳。例如,处理 256 × 256 256 \times 256 256×256 图像耗时约 0.2 秒( × 4 \times 4 ×4 尺度)。
定性结果
- 视觉效果(图 7-9,论文页面 4913-4915):
- SRGAT 在自然场景(Set5、Set14)、城市场景(Urban100)和漫画场景(Manga109)上能精确重构直线、网格和复杂纹理(如建筑窗户边缘、漫画线条)。
- 相比传统方法(VDSR、LapSRN、DRRN),SRGAT 生成的图像更清晰,伪影更少。
消融实验
- 图相似性分支的作用(表 III,论文页面 4916):
- 去除 GAT 的 SRGAT(SRGAT w/o GAT)在所有数据集上的 PSNR/SSIM 下降,尤其在 Urban100(0.22)和 Manga109(0.24)上差距更大,证明 GAT 在复杂场景中的重要性。
- GNN 类型比较(表 IV,论文页面 4916):
- GAT 优于 Chebyshev 和 GCN,因为自注意力机制能更好分配权重。
- Patch 大小与特征维度(表 V,论文页面 4916):
- Patch 大小影响较小,特征维度为 64 时在性能和训练时间间取得平衡。
- 邻居节点数 k k k(表 VI,论文页面 4916):
- k = 5 k=5 k=5 时性能和计算成本平衡最佳, k ≥ 5 k \geq 5 k≥5 后性能提升有限。
算法实现过程详细解释
SRGAT 的算法实现基于一个三阶段的网络架构(见图 2,论文页面 4908),包括 特征提取块(E)、特征映射块(M) 和 重构块(R)。以下是详细的实现过程:
1. 特征提取块(E)
- 功能:从低分辨率图像 I L R I^{LR} ILR 中提取初始特征。
- 实现:
- 输入:低分辨率图像 I L R I^{LR} ILR。
- 结构:一组卷积层,生成维度为 h × w × d h \times w \times d h×w×d 的低分辨率特征,其中 h h h 和 w w w 是输入图像的空间维度, d d d 是特征通道数(论文中设为 64)。
- 输出: F E = f E ( I L R ) F_E = f_E(I^{LR}) FE=fE(ILR),作为后续特征映射块的输入。
- 细节:为加速收敛,添加长跳跃连接(long skip connection),将上采样的 I L R I^{LR} ILR 直接传递到输出。
2. 特征映射块(M)
- 功能:通过并行的图相似性分支和内容分支精炼特征,利用反馈机制迭代优化。
- 结构:
- 输入:在第 t t t 次迭代,输入特征 F M t i n F_{M_t}^{in} FMtin 定义为:
F M t i n = { f E ( I L R ) , t = 1 [ F M t − 1 o u t ∥ f E ( I L R ) ] , 1 < t ≤ T F_{M_t}^{in} = \begin{cases} f_E(I^{LR}), & t = 1 \\ \left[ F_{M_{t-1}}^{out} \| f_E(I^{LR}) \right], & 1 < t \leq T \end{cases} FMtin={fE(ILR),[FMt−1out∥fE(ILR)],t=11<t≤T - 输出:通过图相似性分支 f G ( ⋅ ) f_G(\cdot) fG(⋅) 和内容分支 f C ( ⋅ ) f_C(\cdot) fC(⋅) 的特征拼接:
F M t o u t = [ f G ( F M t i n ) ∥ f C ( F M t i n ) ] F_{M_t}^{out} = \left[ f_G(F_{M_t}^{in}) \| f_C(F_{M_t}^{in}) \right] FMtout=[fG(FMtin)∥fC(FMtin)] - 反馈机制:通过 T T T 次迭代,利用前一次迭代的输出 F M t − 1 o u t F_{M_{t-1}}^{out} FMt−1out 精炼当前特征。
- 输入:在第 t t t 次迭代,输入特征 F M t i n F_{M_t}^{in} FMtin 定义为:
图相似性分支(Graph Similarity Branch)
- 功能:利用 GAT 挖掘 patch 间的结构相似性,恢复边缘、角点等结构信息。
- 实现:
- 构建图:
- 输入特征 F M t i n F_{M_t}^{in} FMtin(维度 h × w × d h \times w \times d h×w×d)通过卷积层(步幅 s s s,核大小 p × p p \times p p×p)处理,输出维度为 h / s × w / s × d h/s \times w/s \times d h/s×w/s×d。
- 将特征图重塑为 n × d n \times d n×d 矩阵( n = h / s × w / s n = h/s \times w/s n=h/s×w/s),每行表示一个 patch 节点,构成图的节点集 h = { h ⃗ 1 , h ⃗ 2 , … , h ⃗ n } \mathbf{h} = \{ \vec{h}_1, \vec{h}_2, \ldots, \vec{h}_n \} h={h1,h2,…,hn}, h ⃗ i ∈ R d \vec{h}_i \in \mathbb{R}^d hi∈Rd。
- 边连接:为每个节点选择 k k k 个最近邻节点(基于 patch 中心欧几里得距离, k = 5 k=5 k=5)。
- GAT 层(见图 3,论文页面 4909):
- 线性变换:对每个节点特征 h ⃗ i \vec{h}_i hi 应用共享权重矩阵 W ∈ R d ′ × d \mathbf{W} \in \mathbb{R}^{d' \times d} W∈Rd′×d( d ′ = d d' = d d′=d)。
- 自注意力机制:计算节点 i i i 和 j j j 的注意力系数:
e i j = a ( W h ⃗ i , W h ⃗ j ) = LeakyReLU ( a ⃗ T [ W h ⃗ i ∥ W h ⃗ j ] ) e_{ij} = a(\mathbf{W} \vec{h}_i, \mathbf{W} \vec{h}_j) = \operatorname{LeakyReLU}(\vec{\mathbf{a}}^T [\mathbf{W} \vec{h}_i \| \mathbf{W} \vec{h}_j]) eij=a(Whi,Whj)=LeakyReLU(aT[Whi∥Whj])
其中, a a a 是一个参数化的前馈神经层, a ⃗ ∈ R 2 d ′ \vec{\mathbf{a}} \in \mathbb{R}^{2d'} a∈R2d′。 - 归一化:通过 Softmax 归一化注意力系数:
α i j = exp ( e i j ) ∑ l ∈ n exp ( e i l ) \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{l \in n} \exp(e_{il})} αij=∑l∈nexp(eil)exp(eij) - 特征更新:聚合邻居节点信息,更新节点特征:
h ⃗ i ′ = σ ( ∑ j ∈ k α i j W h ⃗ j ) \vec{h}_i' = \sigma \left( \sum_{j \in k} \alpha_{ij} \mathbf{W} \vec{h}_j \right) hi′=σ j∈k∑αijWhj
其中, σ \sigma σ 为非线性激活函数。
- 输出处理:
- GAT 层输出维度仍为 n × d n \times d n×d,重塑为 h / s × w / s × d h/s \times w/s \times d h/s×w/s×d。
- 通过反卷积上采样至 h × w × d h \times w \times d h×w×d,与内容分支输出拼接。
- 构建图:
内容分支 CDP(Content Branch)
- 功能:基于反馈块(Feedback Block)恢复纹理细节。
- 实现:
- 结构:包含多个投影组(projection groups),每个组由 1 × 1 1 \times 1 1×1 卷积、上采样反卷积和下采样卷积组成,组间通过密集跳跃连接(dense skip connections)增强特征传递。
- 输出:维度保持为 h × w × d h \times w \times d h×w×d,与图相似性分支输出拼接。
3. 重构块(R)
- 功能:将特征映射块的输出上采样并生成残差图像,最终合成超分辨率图像。
- 实现:
- 结构:包含反卷积层(用于上采样)和卷积层(生成残差图像)。
- 输出:超分辨率图像通过以下公式计算:
I S R = f R ( F M T o u t ) + I L R ↑ I^{SR} = f_R(F_{M_T}^{out}) + I^{LR}\uparrow ISR=fR(FMTout)+ILR↑
其中, f R ( ⋅ ) f_R(\cdot) fR(⋅) 表示重构块操作, I L R ↑ I^{LR}\uparrow ILR↑ 为上采样的低分辨率图像。
4. 训练与优化
- 损失函数:使用 L 1 L_1 L1 损失(公式 4),通过 ADAM 优化器最小化。
- 训练细节:如前所述,1000 epoch,初始学习率 1 0 − 4 10^{-4} 10−4,每 200 epoch 减半,batch 大小为 16。
总结
SRGAT 是一种创新的单幅图像超分辨率方法,通过引入图注意力网络充分利用图像内部 patch 的重复性,结合并行分支设计和反馈机制,显著提升了重建质量。其 L 1 L_1 L1 损失函数简单有效,优化过程通过 ADAM 和反馈机制保证收敛。实验结果表明,SRGAT 在多个基准数据集上超越或匹敌最先进方法,尤其在复杂场景中表现优异。算法实现清晰,图相似性分支和内容分支的协同工作为其高效性和鲁棒性提供了保障。