CVPR2020丨SPSR:基于梯度指导的结构保留超分辨率方法

简介: 论文提出了一个基于梯度指导的结构保留超分辨率方法SPSR,缓解了感知驱动方法生成的SR结果中普遍存在的几何变形问题。不仅设计了梯度分支网络用于生成SR 梯度特征图,同时引入梯度 Loss 做了进一步的约束。这也给后续超分辨率方法的研究提供了一个新的思路,利用不同的图像先验信息作为约束,指导 SR 模型训练,以促使SR模型生成更自然和真实的图像。


CVPR2020:Structure-Preserving Super Resolution with Gradient Guidance


640.png



我们知道,结构信息在超分辨率问题中相当重要。目前已经有很多感知驱动的方法(SRGAN、ESRGAN、EnhanceNet)使用 GAN Loss 和 Perceptual Loss 生成较为逼真,且细节丰富的超分图像。然而,在这些恢复的图像中总是存在一些我们并不希望它出现的结构变形,如下图1所示。


仅仅使用 L1 Loss 的RCAN生成图像的轮廓边缘虽然相对规则,但是整体较为模糊。SRGAN、ESRGAN、NatSR等生成的图像则存在明显的结构变形。


640.jpg

                                                           图 1. 局部图像细节对比


因此,论文提出了结构保留超分辨率方法 SPSR,以缓解结构变形的同时,保留 GAN 方法生成丰富纹理细节的优点。特别的是,论文使用了图像的梯度信息去指导图像复原。


如何通过梯度信息指导图像复原?


主要有两点:


1.SPSR 采用了一个额外的梯度分支网络,生成高分辨率梯度图,作为额外的结构先验。


2.SPSR 引入了新的梯度损失,对超分辨率图像施加了二次约束。


因此,梯度信息以及梯度 Loss 能够进一步帮助生成网络更多的关注图像的几何结构。除此之外,SPSR 这个方法同样适用于其它 SR 模型方法。


从图 1 可以看到, SPSR 不仅能够生成比 RCAN 更清晰的结果,同时保留更加精细的几何结构。

640.jpg


                                                 图 2. Overall framework of SPSR


网络结构


1.梯度图 Gradient Map


首先SPSR 从 LR 图像中提取 LR 梯度图,通过计算相邻像素之间的差异获得:


image.png


基于公式自己实现的代码如下(具体实现请参考源码):


import torch
import torch.nn as nn
class Gradient_Map(nn.Module):
    def __init__(self):
        super(Gradient_Map,self).__init__()
        self.pad =  nn.ReplicationPad2d((1,0,1,0))
    def get_gray(self,x):
        ''' 
        Convert image to its gray one.
        '''
        gray_coeffs = [65.738, 129.057, 25.064]
        convert = x.new_tensor(gray_coeffs).view(1, 3, 1, 1) / 256
        x_gray = x.mul(convert).sum(dim=1)
        return x_gray.unsqueeze(1)
    def forward(self,x):
        x = self.pad(x)
        x = self.get_gray(x)
        h = x.size()[2]
        w = x.size()[3]
        I_x = torch.pow((x[:,:,1:,1:]-x[:,:,:h-1,1:]),2)
        I_y = torch.pow((x[:,:,1:,1:]-x[:,:,1:,:w-1]),2)
        M_I = torch.pow(I_x+I_y,0.5)
        return M_I


2.梯度分支网络Gradient branch


从图2中可以看到,梯度分支网络中的模块首先会合并来自SR分支网络的几个中间层输出特征,这是由于SR分支网络中间层包含丰富的结构信息,这对于梯度图的恢复有着关键的作用。其次,在梯度分支网络末端,梯度图的特征信息又会合并到 SR 分支网络,用于指导SR 重建过程。


3.SR分支网络 SR branch


对于SR分支网络一共有两个部分:


第一部分:采用了与 ESRGAN 相同的网络结构,一共有23个 RRDB 模块。并且第5,10,15,20个RRDB 模块的输出用于合并到梯度分支网络。


第二部分:连接从梯度分支网络获得的SR梯度特征图,再使用一个 RRDB 模块+一个卷积层生成最后的SR 特征。


PS关于网络模型的实现细节论文中并没有做过多的介绍,因此具体的实现还需要等待作者公开源码。


目标函数和损失


1.传统 Loss:


首先使用了 L1 Loss 和 Perceptual Loss:


image.png


同时还引入 GAN Loss:


image.png


2.梯度 Loss:


为了说明梯度 Loss 的作用,论文作者给出了一个1-D 情况下的示例。可以看到,如果仅通过L1损失在图像空间中对模型进行优化,当给定输入测试序列后,通常得到的SR序列,如图3(b)所示,而其GT序列 如图3(a)所示。


该模型无法恢复锋利的边缘,原因在于该模型倾向于从训练数据中给出所有的HR序列统计的中位数值。于是再这种情况下,如果计算并显示两个序列的梯度值,则可以观察到SR梯度是平坦且峰值较低,而HR的梯度是一个尖峰。两者梯度分布相差明显。


因此,引入梯度 Loss ,模型则能够更好地从梯度空间中学习图像特征。它有助于模型将注意力集中在图像邻域,以便可以更适当地推断出图像锐度的局部强度。于是,当图像梯度信息,如图3(f)的所示,被模型捕捉到,那么 SR 方法则能够更好地在这些梯度信息引导中,避免过度模糊或者过度锐化的复原,从而生成更加逼真的超分辨率图像。

640.png

                                                            图3. 梯度信息的1-D示例。


梯度 Loss 的具体形式如下:


image.png


image.png用于衡量SPSR 网络中生成的SR梯度特征图与真实梯度特征图之间的绝对误差。

SPSR 设计了额外的一个梯度判别网络用于优化以下损失函数,梯度特征图为 SR 图像的梯度特征图:


image.png


梯度判别网络通过对抗学习也能够监督SR 图像的生成网络:


image.png


值得注意的是:梯度提取操作符 image.png是可微的,因此模型可以直接端到端进行训练。


整体优化目标函数为:


image.png


其中, image.png 是不同 Loss的权重参数,论文中分别设置为image.png


实验结果和分析


为了说明 SPSR 的有效性,论文从定量和定性的比较进行了说明。


首先从定量的角度,论文选取了 SFTGAN,SRGAN,ESRGAN,NatSR 等基于 GAN 网络的SR 模型与 SPSR 进行对比。评价指标使用了PI 、PSNR、SSIM、LPIPS 4个指标。可以看到 SPSR 在 LPIPS指标和 PI 指标上取得了最佳的性能表现。


640.png

                                           表1.Benchmark 上的性能评价


然后通过生成图像的可视化对比,可以看到其它方法生成的图像局部区域几何结构上都存在较为明显的形变,SPSR 生成的结果则更加自然而且真实。除此之外,SPSR 图像更加纯净没有明显的伪影和形变。以上也充分说明了 SPSR 方法的有效性。


640.jpg

                                                                           图4.局部细节对比


总结


论文提出了一个基于梯度指导的结构保留超分辨率方法SPSR,缓解了感知驱动方法生成的SR结果中普遍存在的几何变形问题。不仅设计了梯度分支网络用于生成SR 梯度特征图,同时引入梯度 Loss 做了进一步的约束。这也给后续超分辨率方法的研究提供了一个新的思路,利用不同的图像先验信息作为约束,指导 SR 模型训练,以促使SR模型生成更自然和真实的图像。

相关文章
|
算法 数据库 计算机视觉
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
|
机器学习/深度学习 数据可视化 TensorFlow
TensorFlow的可视化工具:TensorBoard的使用
【4月更文挑战第17天】TensorBoard是TensorFlow的官方可视化工具,用于展示和分析模型训练过程、结构和数据。它包括标量、图像、音频、模型图和直方图等多种可视化功能。通过`tf.summary`记录数据,使用`tensorboard --logdir`启动。高级功能包括自定义仪表板、嵌入和插件,助力深度学习的调试与优化。
|
6月前
|
存储 NoSQL Java
Tablestore集成MCP协议: 标量与向量混合检索的新范式
基于表格存储(Tablestore)实现的MCP(Model Context Protocol)服务,支持文档存储与混合检索工具两大功能。通过Cherry-Studio界面和通义千问qwen-max模型进行演示,展示了文本数据上传、向量嵌入及查询过程。此外,详细说明了Python和Java版本的本地运行步骤、环境配置及二次开发方法,并提供了集成三方工具如Cherry Studio的应用示例。Tablestore凭借混合查询、Serverless低成本、弹性扩展等优势,为MCP场景提供高效解决方案。
746 3
|
8月前
|
人工智能 知识图谱
SVFR:全能视频人脸修复框架,支持提升清晰度、色彩填充和缺失补全等图像修复任务
SVFR 是一个通用视频人脸修复框架,支持人脸修复、着色和修复任务,基于 Stable Video Diffusion 技术,提供高质量的视频修复效果。
523 23
SVFR:全能视频人脸修复框架,支持提升清晰度、色彩填充和缺失补全等图像修复任务
|
算法
ECCV 2024:盲视频去闪烁通用方法BlazeBVD来了,美图&国科大联合提出
【8月更文挑战第15天】随着多媒体的兴起,视频成为信息传播的关键媒介,但视频中的闪烁问题影响观看体验。美图与中国科学院大学联合研发的BlazeBVD算法,采用直方图辅助方法简化学习过程,提高了视频去闪烁的质量与速度。该算法通过2D网络恢复纹理,3D网络修正时间一致性,实现了高效能与高保真度。实验结果显示,BlazeBVD在多种视频类型上表现优秀,推理速度提升显著。尽管如此,算法在处理局部闪烁和复杂场景时仍存在局限性,未来有进一步优化的空间。[论文链接](https://arxiv.org/pdf/2403.06243v1)
226 1
|
11月前
|
数据可视化 算法 Python
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
本文介绍了如何利用Python脚本结合动态模态分解(DMD)技术,分析从OpenFOAM模拟中提取的二维切片数据,以深入理解流体动力学现象。通过PyVista库处理VTK格式的模拟数据,进行POD和DMD分析,揭示流场中的主要能量结构及动态特征。此方法为研究复杂流动系统提供了有力工具。
563 2
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
|
12月前
|
机器学习/深度学习 数据采集 计算机视觉
深度学习之缺失数据的图像修复
基于深度学习的缺失数据图像修复是一种通过深度学习技术填补图像中缺失或损坏部分的过程。这种技术在图像处理领域具有重要意义,能够改善图像的视觉质量,并在许多实际应用中发挥作用,如图像恢复、视频编辑和图像生成等。
302 4
|
11月前
|
机器学习/深度学习 算法 数据挖掘
稀疏促进动态模态分解(SPDMD)详细介绍以及应用
稀疏促进动态模态分解(SPDMD)结合了动态模态分解(DMD)的数学优雅性和稀疏优化技术,有效提取高维数据中的关键特征。SPDMD通过稀疏约束自动筛选出最重要模态,去除冗余信息,提升模型的可解释性和计算效率。该方法在流体动力学、图像处理、时间序列分析及金融数据等领域广泛应用,能够识别主要趋势、周期性模式及异常现象。SPDMD不仅提高了数据分析效率,还为各领域研究提供了强有力的工具。通过自动选择最相关的模态,SPDMD尤其适用于大规模数据集和实时应用。
301 4
|
机器学习/深度学习 编解码 PyTorch
基于MeshCNN和PyTorch的三维对象分类和分割
基于MeshCNN和PyTorch的三维对象分类和分割
541 0
基于MeshCNN和PyTorch的三维对象分类和分割
|
NoSQL Java Redis
Redis 从入门到精通之Redis操作删除指定Key
删除redis 可以使用Del、unlinke。推荐使用unlink。Redis是一个内存数据库,删除key会立即释放内存,因此要慎重删除,避免误删重要数据。
6933 126