文章较长,推荐按目录选择性查看。

        本文将重点关注SRCNN和VDSR,两种应用于超分辨率处理的经典深度学习模型。我们将深入探讨它们的原理、网络结构,根据相关资源复现模型并测试其处理效果。我们同时会提供相关文章、代码链接,以便读者实践。


目录

一:引言

关于超分辨率SR(超分辨率的概念与意义)  

概念

应用场景

基于深度学习

主题

二:传统方法概述

三:SRCNN

整体思路

(1)小块提取和表示

(2)非线性映射

(3)重建

复现结果       

四:VDSR

参考资料

1.为什么在SRCNN后提出VDSR

(1)SRCNN恢复图像细节只利用了少量的上下文信息

(2)SRCNN的收敛速度太慢

(3)SRCNN只适用于单尺度的图像

2.VDSR的神经网络结构

(1)网络架构

(2)前向传播  

(3)后向传播

3.VDSR的原理(为什么更好)

(1)越深越好

(2)使用残差加速

(3)多尺度训练

4.训练数据集

5.复现结果


一:引言

关于超分辨率SR(超分辨率的概念与意义)  

概念

        超分辨率(Super-Resolution,SR)是一种利用图像处理技术和光学原理,通过增大图像的分辨率来恢复图像的细节和数据信息的过程。它可以提高图像的清晰度和细节表现。

   3101e8bcb45d41559652fcbfd4ece009.png

        具体而言,SR通常使用已知的低分辨率图像(Low Resolution,LR)来估计具有更高分辨率(High Resolution,HR)的图像。例如,将512x512的图片放大到1024x1024的分辨率。在这个过程中,超分辨率技术通过学习低分辨率图像和高分辨率图像之间的关系,来恢复丢失的细节和增加图像的清晰度。这种重建旨在消除由于图像模糊、噪声以及有限的检测器尺寸和光学元件引起的失真。

        然而,理论上来说,超分辨率是一个ill-posed问题,即没有稳定和唯一的解。在下图的超分中,平均每个像素需要生成3个额外的像素,因此如何确定这些额外像素的值是超分辨率任务的关键。


应用场景

        1.视频和图像增强:超分辨率可以提高图像和视频的细节展示和清晰度,恢复(近似)图像信息质量。它在高清电视、监控系统、数字摄影、视频会议等领域发挥着重要作用,改善视觉感知体验,提高目标识别和追踪的准确性,以及提升交流的质量和效果

 0f126a138d6f40afa3570449ff11b33a.gif

        2.远程监测和无人机图像:在该领域,遥感图像数据量庞大,但有效信息密度低。由于高分辨率成像设备成本高昂,高分辨率图像获取困难。因此,通过利用低分辨率相机成像,再利用超分辨率技术对重复图像数据进行重建,可以降低风险和成本,提高图像资料的应用价值和军事目标的识别能力。

e90b6741e2ca403587dfad8b3fc6784a.png

        3.医学影像:医学图像处理中,包括X射线、超声波、磁共振等各种图像,对于诊断起着重要作用。超分辨率技术可以改善图像质量和精度,用于染色体分析、血球分类、X射线鉴别等应用,帮助医生做出更准确的诊断和治疗决策。

affc47f95bd542e4a3c11d35b72d4db5.png

        4.数字艺术和媒体处理:超分辨率技术可以改善图像和视频的视觉效果,提升数字艺术、广告媒体等领域的图像质量。

基于深度学习

        超分辨率方法的发展至今已经涌现出多种技术路线,主要可以分为传统方法和基于深度学习的方法,可通过综述了解:

超分辨率入门综述!(浅析) - 知乎 (zhihu.com)

        传统方法是超分辨率领域的早期方法,通常基于插值和滤波等传统信号处理技术。这些方法在提高图像分辨率方面存在一定的局限性,无法准确恢复细节和纹理。

        相比之下,基于深度学习的超分辨率方法通过使用深度神经网络模型来克服这些局限性。深度学习模型能够从大量的训练数据中自动学习图像的特征和上下文信息,并通过学习到的模式和规律来高效地重建超分辨率图像。

        深度学习是一种机器学习的方法,通过模拟人脑神经网络的结构和功能,利用深层次的神经网络模型来提取和学习数据中的特征(如下图)。深度学习的核心思想是通过多层次的非线性变换,将输入数据映射到输出结果,从而实现对复杂模式和抽象概念的学习和解析。详情请查阅相关资料:

  b3315ebd3e0948848eedef7d21505547.png

深度学习(Deep Learning)入门——基本概念_deeplearning-CSDN博客

一文看懂深度学习(白话解释+8个优缺点+4个典型算法) (easyai.tech)

        基于深度学习的方法具有强大的非线性拟合能力和特征提取能力。通过多层次的卷积神经网络(Convolutional Neural Networks,CNN),深度学习模型可以学习到图像中的局部和全局特征,从而更好地恢复细节和纹理。此外,引入残差连接、生成对抗网络等技术可以进一步提高重建图像的质量和真实感。

        近年来,深度学习在图像处理领域取得了巨大的发展,它为单张图像的超分辨率重建带来了新的发展前景,相关文章:

· 基于深度学习的图像超分辨率重建 - 知乎 (zhihu.com)

· 从网络设计到实际应用,深度学习图像超分辨率综述 - 知乎 (zhihu.com)

· 深度学习应用在超分辨率领域的9个模型 | My Secret Rainbow

主题

        下面,本文将重点关注SRCNN和VDSR两种经典深度学习模型。我们将深入探讨它们的原理、网络结构和实际应用,根据相关资源复现模型并测试其处理效果。我们同时会提供相关文章、代码链接,以便读者实践。

二:传统方法概述

传统的超分辨率方法主要可以分为插值方法和基于边缘信息的方法。

  1. 插值方法:

    • 插值方法是最简单和常见的超分辨率方法之一。
    • 这些方法通过对低分辨率图像进行插值操作来增加像素数量和尺寸,从而提高图像的分辨率。
    • 常见的插值方法包括双线性插值和双立方插值。
  2. 基于边缘信息的方法:

    • 基于边缘信息的超分辨率方法利用图像中的边缘信息来重建高分辨率图像。
    • 这些方法通过插值和边缘增强来恢复更多的高频信息,以提高图像的细节和清晰度。
    • 常见的技术包括基于边缘优化和基于梯度剖面的方法。

        传统方法在一定程度上能够提高图像的分辨率,但由于缺乏对复杂纹理和细节的建模能力,其结果往往不够理想。而基于深度学习的超分辨率方法取得了显著突破,能够更好地重建高分辨率图像,并成为当前超分领域的主流方法

        传统方法虽不是本文的重点,但其可实现性强,有助于数字图像处理入门者熟悉实践。若有兴趣请读者自行查阅:

· 超分辨率常见插值方法:最近邻插值、双线性插值、双三次插值_最近邻插值法计算公式

·【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用 - 知乎

三:SRCNN

        谈到基于深度学习的图像超分辨率(SR),就不得不提到开山鼻祖SRCNN——第一篇将卷积神经网络(CNN)应用于SR领域的论文。虽然听起来很高大上,但是算法的思想实际上却并不复杂,只有三个阶段:小块提取和表示(Patch extraction and representation)、非线性映射(Non-linear mapping)以及重建(Reconstruction

        推荐资料如下:

1.原论文:

[1501.00092] Image Super-Resolution Using Deep Convolutional Networks (arxiv.org)

2.实现代码参考:(test.py中计算的PSNR有误)

fuyongXu/SRCNN_Pytorch_1.0: The implemention of SRCNN by pytorch1.0 (github.com)

3.上述代码解析参考 :

SRCNN超分辨率Pytorch实现,代码逐行讲解,附源码-CSDN博客

4.本次实验的代码仓库:

SRCNN: srcnn代码实现

整体思路

(1)小块提取和表示

        首先需要对输入的低分辨率图像切分,得到成许多个重叠的小图像块,然后将这些小图像块映射为一个个向量。这里将小块映射为向量用到了一种名叫稀疏编码(sparse coding)的方法,可以最大化利用数据,去掉冗余。

        那么,稀疏编码是什么呢?举一个简单的例子:我们都知道一个向量(x,y,z)可以通过x1(1,0,0), x2(0,1,0), x3(0,0,1)三个基向量的线性组合表示,同样的我们也可以用x1~x10这10个向量来表示,只需要将后面7个参数设为0即可,这就是一种稀疏表示。下图是一种更为普遍的情况。

        我们只需要知道稀疏系数α和一系列向量组成的矩阵D,即可求出向量X。从另一个角度看,α代表了X,所以也可以将这一步看成是特征提取。图像本质上是一种二维向量(灰度图),同样可以这样操作。

        这里的f1是图像块的大小,对应于向量X的长度N;n1是特征维度数,对应于α的长度M。

(2)非线性映射

        接下来是最核心的一步,将提取的图像块特征进行映射,得到新的特征。我们希望能够找到一个映射,使得新的特征尽可能接近高分辨率图像的图像块特征。而通过神经网络多次迭代的反向传播,我们可以优化权重参数(梯度下降法),从而逐步近似得到这样一个映射。

        左图表示的是普遍情况,f2×f2个n1向量,通过卷积操作得到1个n2向量。

        右图表示的是f2=1的特殊情况,这种情况下,相当于把n1降维(升维)到n2,等价于全连接层的效果。

(3)重建

        这一步跟第一步互为逆操作:将得到的图像块特征映射回图像块,并根据这些图像块重建图像。由于这些图像块是有重叠的,所以每一个像素实际上是由许多个图像块对应的像素加权平均得到。这一点跟传统的插值法有异曲同工之妙。

        值得注意的是,对于彩色图像时并不是将其分解成RGB三个通道的二维数组,而是采用YCbCy色彩空间,只对Y(亮度)通道进行处理,而其余的Cb和Cy(蓝色和红色的色差)只是用插值的结果。因为我们人眼对于亮度变化的敏感程度,比颜色变化的敏感程度要大得多,所以只对亮度Y处理就能达到很好的效果。

复现结果       

        代码解析请参考前面提供的博客

        在运行模型之前,我们需要了解一些常用的评估指标以衡量超分效果。其中包括峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)和结构相似性指数(Structural Similarity Index,SSIM)。这些指标可以帮助我们定量地评估超分辨率模型的性能和重建图像的质量。

  1. 峰值信噪比(PSNR):

    • 峰值信噪比是衡量重建图像与原始高分辨率图像之间差异的常用指标。
    • 它通过计算图像的均方误差(Mean Squared Error,MSE)来衡量两个图像之间的差异。
    • PSNR值越高,表示重建图像与原始图像之间的差异越小,重建质量越好。
    • 参考标准:
  2. 结构相似性指数(SSIM):

    • 结构相似性指数是一种衡量图像质量的指标,它考虑了亮度、对比度和结构三个方面的相似性。
    • SSIM通过比较原始图像和重建图像的亮度、对比度和结构信息,计算它们之间的相似性得分。
    • SSIM值的范围是0到1,值越接近1表示重建图像与原始图像之间的相似性越高,重建质量越好。

        我们以五张图片为测试集,分别使用缩小再使用双三次插值得到模糊效果,再使用SRCNN进行超分。得出结果如下:

        评估如下:

        根据直觉观感以及评价指标,使用SRCNN进行超分辨率重建后的图像尽管重建图像没有完全复原原图,但在视觉上已经相当程度上恢复了图像的细节和提高了观感。而在PSNR和SSIM上相对于低分辨率图像均有显著的提高。这表明SRCNN在超分辨率任务上具有一定的重建能力,并能够改善图像的质量。

四:VDSR

参考资料

1.原论文:

[1511.04587] Accurate Image Super-Resolution Using Very Deep Convolutional Networks (arxiv.org)

2.对论文的简要梳理

【图像超分辨率】Accurate Image Super-Resolution Using Very Deep Convolutional Networks​​​​​​

VDSR超分辨网络-详细分析 - 知乎 (zhihu.com)

3.VDSR代码仓库 with Pytorch

GitHub - Lornatang/VDSR-PyTorch: PyTorch implements "Accurate Image Super-Resolution Using Very Deep Convolutional Networks"

4.VDSR代码仓库 with jupyter notebook

GitHub - twtygqyy/pytorch-vdsr: VDSR (CVPR2016) pytorch implementation

5.VDSR与SRCNN的对比:

SR-SRCNN及优化-CSDN博客

1.为什么在SRCNN后提出VDSR

(1)SRCNN恢复图像细节只利用了少量的上下文信息

        我们回顾一下SR的基本思路:从低分辨率恢复高分辨率图像可以从像素点的角度理解,LR和HR的区别是HR具有高频信息,这些信息使得图像更加清晰。由于图像是表征真实物理世界的,所有图像的不同像素点间是存在逻辑上的关联的,所以LR图像中的一个像素点所应具有的高频信息可以从这个像素点周围的像素点进行推断和重建,这就是深度学习的卷积神经网络可以实现的功能。

//感受野定义为:输出图像中每个像素能够反映输入图像区域的大小。

        SRCNN网络就是基于这个思路,利用感受野将输入图像的一部分压缩至一个像素点,这样这个像素点就汇聚了它周围像素点的信息,在根据这个信息推断高频信息即可构建出HR的图像。然而SRCNN的感受野并不大,VDSR的感受野要大得多,所以VDSR相比于SRCNN可以利用更多的像素点周围信息,重建的HR图像也就更准确。

        感受野的大小是和卷积神经网络深度有关的,如下图所示,经过两层卷积感受野就是5*3,相当于将原图15个像素点的信息压缩到了1个点。

(2)SRCNN的收敛速度太慢

        虽然说越深的卷积神经网络效果越好,但是同时对应的参数也就越多,训练收敛的时间也就越长,这是VDSR要解决的第一个问题。

        SRCNN的卷积神经网络可以看出输入一张LR图像,将这些信息传到输出层,并在这个过程中重建残差(HR-LR,即高频信息),这个过程类似于自动编码器,时间大部分就花在了学习自动编码器上,比较耗时,同时信息太多易导致梯度消失,降低收敛速度。

        同时SRCNN的损失函数是重构的HR图像和真的HR图像的均方误差,由于这两张图是非常接近的,所以损失函数大部分值很小,计算梯度也就很小,进而导致参数更新很慢,导致收敛速度慢。

(3)SRCNN只适用于单尺度的图像

        SRCNN在原理上只支持同样大小的图像进行SR,并不通用。如果要对其他大小的图像进行SR,那么就要给出对应大小的图像重新进行训练,获得对应模型。这样在现实应用中需要的模型就非常之多了。

2.VDSR的神经网络结构

(1)网络架构

输入层:经过插值得到的LR图像(大小不定)

中间64个卷积层:3*3*64的滤波器

输出层:3*3*64的滤波器进行图像构建

激活函数:reLU

(2)前向传播  

        使用0作为padding保证每次经过卷积层输入和输出图像大小不变,既保证深层网络进行卷积的可行性,又能保证图像边缘的像素可以被正确的预测,而不是直接忽视掉。

        定义残差图像:r = y - x(真实HR图像-输入的LR图像)

        损失函数定义:1/2*|| r-f(x)||2  这样损失函数的值就不会在0附近了

        损耗层:输入是残差估计,网络输入(ILR图像)和真实HR图像。

        输出:重建图像(网络输入和残差之和)与真实情况之间的欧几里得距离。

(3)后向传播

        小批量梯度下降的方法:64个样本迭代一轮

        正则化(抑制过拟合):权值衰减(使用L2惩罚λw2/2,λ=0.0001)

        动量参数:0.9(在下降时保留一部分之前的方向和速度,以此来抑制震荡。若当前的梯度方向与累积的历史梯度方向一致,当前梯度就会被加强,使得这一步的下降幅度变大,反之也成立。用于加速梯度下降

        学习率:每一层都为0.1,每20轮迭代减少一半(比SRCNN的0.0001高了不少,同时SRCNN不同层学习率还不同)

        梯度裁剪:[-θ/γ,θ/γ],其中γ表示当前学习速率。解决梯度爆炸问题(网络太深,不同层变化速度不同,导致梯度太大了,模型不稳定)

3.VDSR的原理(为什么更好)

(1)越深越好

        卷积神经网络通过强制相邻层神经元之间的局部连通性模式来利用空间局部相关性。换句话说,层m中的隐藏单元将层m-1中单元的子集作为输入,形成空间上连续的感受野。每个隐藏单元对于输入相对于感受野之外的变化均无响应。因此,该体系结构确保学习的滤波器对空间局部输入模式产生最强的响应。堆叠许多这样的层导致滤波器变得越来越全局化(即,响应于更大的像素空间区域)所以能够学到更多的信息。

(2)使用残差加速

        由于已经有一个低分辨率的图像作为输入,因此对于SR而言,预测高频分量就足够了。同时采用高学习率保证收敛速度。

        对残差建模:效率更高,性能更好。

(3)多尺度训练

        用同一个网络同时去学习不同尺度的图像,事实证明这样效果是比较好的。

4.训练数据集

Set5+Set14大部分论文都用的基准图像

Urban100城市图像数据集现有大部分方法都复原不好

B100自然图像

5.复现结果

        测试集同上。由于两次模糊处理方法不一,所以无法直接在评估数值上与SRCNN对比。但能发现使用VDSR的重建图像在两个评估数值上的改进幅度上都比SRCNN可观。

更多推荐