精华内容
下载资源
问答
  • 本文将二阶广义全变差用于基于正则化的多帧图像超分辨率重建问题,构建了基于二阶广义全变差正则项的图像分辨率模型.为了更好地保持重建图像的边缘和细节,采用图像空域自适应正则化参数,并针对该重建模型的非光滑性...
  • 文中构建了超分辨率重建图像的一般框架。在对图像模糊的不确定性和复杂性作一定限制...并进一步 提出了采用改进的递归最速下降迭代算法实现多帧图像超分辨率重建。计算机模拟结果表明,该方法具有较好的重建图像质量。
  • 代码包括低分辨率图像的获取和矫正和重构,已经解释和测试
  • 然后根据低分辨率词典对输入的低分辨率图像用LLC方法进行编码,再依据高分辨率词典及编码系数初步重建高分辨率图像,最后添加全局约束重建高分辨率图像,并将该算法推广到多帧图像超分辨率重建层面。分析和对幅...
  • 基于结构聚类和字典学习的多帧图像超分辨率重建.pdf
  • 本代码实现了单帧超分辨率重建,效果比传统的样条插值好很,关于本代码的IEEE文献后期再上传 本代码实现了单帧超分辨率重建,效果比传统的样条插值好很,关于本代码的IEEE文献后期再上传
  • 05 基于通道忆阻脉冲耦合神经网络的多帧图像超分辨率重建算法.pdf
  • 稀疏性正则化多帧图像超分辨率重建的线性化Bregman算法,孙玉宝,韦志辉,基于图像在过完备字典(系统)下的稀疏表示,提出了一种新的稀疏性正则化的多帧图像超分辨凸变分模型,模型中的正则项刻画了理想
  • 非线性各向异性GVF-休克扩散方法在多帧图像超分辨率重建中的应用
  • 该文从观测模型和先验模型入手,探讨了观测模型和先验模型在重建图像边缘和细节中的作用,提高多帧超分辨率重建算法的准确率。 研究现状 截取一段我自己感兴趣的(看得懂的~) 观测、先验模型 观测模型描述图片从...

    引言

    这是认识多帧的第二篇文章,是华中科技大学的博士论文。
    超分辨率重建算法研究,超分辨率重建的目的是通过融合一幅或多幅同一场景下的已知图像信息建立一幅高分辨率的图像,该问题是一个由输出信息求输入信息的数学物理反问题。该文从观测模型和先验模型入手,探讨了观测模型和先验模型在重建图像边缘和细节中的作用,提高多帧超分辨率重建算法的准确率。

    研究现状

    截取一段我自己感兴趣的(看得懂的~)

    观测、先验模型

    观测模型描述图片从高清到低清的过程,和认识多帧1中描述的图像退化(包括图片模糊和图片噪声)类似,这里作者细分观测模型的观测过程,包括形变、模糊、降采样和噪声等,用公式表示为:
    v k = D k B k M k u + n k v_k=D_kB_kM_ku+n_k vk=DkBkMku+nk
    其中 D k D_k Dk为降采样矩阵, B k B_k Bk为模糊矩阵, M k M_k Mk为形变矩阵且形变包括旋转、平移和尺度缩放。为了方便描述,令 W k = D k B k M k W_k=D_kB_kM_k Wk=DkBkMk,则:
    v k = W k u + n k v_k=W_ku+n_k vk=Wku+nk
    在多帧图像超分辨率重建方法中,不同低分辨率图片之间有少量的偏移——运动、模糊与缩放。因此准确对低分辨率图片进行配准是必要的,认识多帧1中简单介绍了图片配准的概念,在本篇论文中,假设图像都是运动幅度较小的全局运动,故使用以下方程对图片配准
    ▽ v x = v x ′ − v x = v x ′ − v x c o s θ + v y s i n θ − α \bigtriangledown v_x=v'_x-v_x=v'_x-v_xcos\theta +v_ysin\theta -\alpha vx=vxvx=vxvxcosθ+vysinθα
    ▽ v y = v y ′ − v y = v y ′ − v y c o s θ − v x s i n θ − b \bigtriangledown v_y=v'_y-v_y=v'_y-v_ycos\theta -v_xsin\theta -b vy=vyvy=vyvycosθvxsinθb
    式中的 θ \theta θ能够使用泰勒展开求取(论文没有说明这个 θ \theta θ的详细求取步骤)
    模糊作为另一个影响重建效果的因素,主要为高斯模糊和均值模糊,模糊函数未知的情况下,使用盲卷积的方式进行,而在该论文中假设模糊已知
    超分辨重建中,保护边缘和去除噪声是一对矛盾体
    观测模型中的退化因素多种多样,且模型的描述也是一种理想化的近似,传感器量化误差等难以在该模型中得到体现,目前人们对贝叶斯算法的研究多集中于对图像先验模型的研究,好的先验模型虽然可以有效的保留图像的细节信息,但是均以现有观测模型为基础,无法弥补在降质过程中所丢失的信息。
    **注:**这里提出了观测模型和先验模型各自的优缺点

    频域超分辨率重建

    将低分辨率图片映射到频域中,从频域中估计高分辨率图片,最后将得到的频域超分辨率图片映射回空间域。根据算法不同,可分为基于傅里叶变换的超分辨率重建算法和基于小波变换的超分辨率重建算法。

    单帧图像超分辨率重建

    单帧超分辨率重建,期望的高频信息会大量丢失,导师插值后的图片出现模糊。

    多帧图像超分辨率重建

    千呼万唤始出来
    把同一场景下各低分辨率图片间的互补信息融合到同一幅图像中,达到提高分辨率的目的。实际应用中,很容易接触到具有相互运动的图像序列,该重建方法直观且容易实现,图像重建利用观测到的多帧低分辨率图像重建出理想的高分辨率图像。为了保证求解过程的稳定性,需要加入不同性质的先验模型来约束重建过程

    算法模型

    两种该论文研究的框架
    最大后验概率
    是贝叶斯框架下利用梯度下降法求解超分辨率图片的一种高效算法,基本思想为:给定一组低分辨率图片{ v k v_k vk},通过贝叶斯准则估计超分辨率图片
    p ( u ~ ∣ v k ) = p ( v 1 , v 2 , . . . , v k ∣ u ) p ( u ) p ( v 1 , v 2 , . . . , v k ) ∝ p ( v 1 , v 2 , . . . , v k ∣ u ) p ( u ) p(\tilde{u}|{v_k})=\frac{p(v_1,v_2,...,v_k|u)p(u)}{p(v_1,v_2,...,v_k)}\propto{p(v_1,v_2,...,v_k|u)p(u)} p(u~vk)=p(v1,v2,...,vk)p(v1,v2,...,vku)p(u)p(v1,v2,...,vku)p(u)
    求取对数并使用MAP估计超分辨率图片得:
    u ~ M A P = a r g m a x u ( l o g p ( v 1 , v 2 , . . . , v k ∣ u ) + l o g p ( u ) ) \tilde{u}_{MAP}=arg max_u(log p(v_1,v_2,...,v_k|u)+log p(u)) u~MAP=argmaxu(logp(v1,v2,...,vku)+logp(u))
    加上低分辨率图片独立同分布,故:
    u ~ M A P = a r g m a x u ( l o g ∏ k = 1 K p ( v k , u ) + l o g p ( u ) ) = a r g m a x u ( ∑ k = 1 K l o g p ( v k , u ) + l o g p ( u ) ) \tilde{u}_{MAP}=arg max_u(log \prod_{k=1}^{K}p(v_k,u)+log p(u))=arg max_u(\sum_{k=1}^Klog p(v_k,u)+log p(u)) u~MAP=argmaxu(logk=1Kp(vk,u)+logp(u))=argmaxu(k=1Klogp(vk,u)+logp(u))
    由共轭梯度法得:
    p ( v k ∣ u ) = 1 C 1 e x p ( − ∣ ∣ v k ˉ − v k ∣ ∣ 2 2 2 σ k 2 ) p(v_k|u)=\frac{1}{C_1}exp(\frac{-||\bar{v_k}-v_k||_2^2}{2\sigma_k^2}) p(vku)=C11exp(2σk2vkˉvk22)
    其中, v k ˉ = W k u \bar{v_k}=W_ku vkˉ=Wku C 1 C_1 C1是一个常数, σ k 2 \sigma_k^2 σk2是第 k k k幅图像的噪声方差,引入关于超分辨率图片 u u u的先验模型后,MAP方法的目标函数可以写为:
    u ~ = a r g m i n u ( ∑ k = 1 K ∣ ∣ v k ˉ − v k ∣ ∣ 2 2 + λ ∣ ∣ f u ∣ ∣ p ) \tilde{u}=arg min_u(\sum_{k=1}^K||\bar{v_k}-v_k||_2^2+\lambda||f{u}||_p) u~=argminu(k=1Kvkˉvk22+λfup)其中 λ \lambda λ是正则化参数,求取最优正则化参数 λ \lambda λ也有多种方法。
    变分贝叶斯
    分为两部分:贝叶斯模型和贝叶斯推断。对于贝叶斯模型,又可以分为三步:1)假设图像降质模型;2)假设先验分布模型;3)假设超参数的分布模型。

    先验模型

    ……未完待续

    展开全文
  • 图像超分辨率重建原理学习

    千次阅读 多人点赞 2020-02-15 12:44:06
    传统的图像超分辨率重建技术简介 基于插值的图像超分 基于重建的图像超分辨率 基于学习的图像超分辨率 基于深度学习的图像超分辨率重建技术 两种常用的评价超分的指标——PSNR和SSIM SRCNN(Super-Res...

    原文链接:https://blog.csdn.net/gwplovekimi/article/details/83041627

    目录

    超分辨率(Super Resolution,SR)

    传统的图像超分辨率重建技术简介

    基于插值的图像超分

    基于重建的图像超分辨率

    基于学习的图像超分辨率

    基于深度学习的图像超分辨率重建技术

    两种常用的评价超分的指标——PSNR和SSIM

    SRCNN(Super-Resolution Convolutional Neural Network)

    FSRCNN(Fast Super-Resolution Convolutional Neural Networks)

    ESPCN(Efficient Sub-Pixel Convolutional Neural Network)

    VESPCN(Video Efficient Sub-Pixel Convolutional Neural Network)

    VDSR(VeryDeep Convolutional Networks)

    DRCN(Deeply-Recursive Convolutional Network)

    RED(very deep Residual Encoder-Decoder Networks)

    DRRN(Deep Recursive Residual Network)

    LapSRN(Laplacian PyramidSuper-Resolution Network)

    SRDenseNet

    SRGAN(SRResNet,super-resolution generative adversarial network)

    EDSR(enhanced deep super-resolution network)

    参考材料


     

    超分辨率(Super Resolution,SR)

    超分辨率是计算机视觉的一个经典应用。SR是指通过软件或硬件的方法,从观测到的低分辨率图像重建出相应的高分辨率图像(说白了就是提高分辨率),在监控设备、卫星图像遥感、数字高清、显微成像、视频编码通信、视频复原和医学影像等领域都有重要的应用价值。

    超分分为以下两种:

    • Image SR。只参考当前低分辨率图像,不依赖其他相关图像的超分辨率技术,称之为单幅图像的超分辨率(single image super resolution,SISR)。
    • Video SR。参考多幅图像或多个视频帧的超分辨率技术,称之为多帧视频/多图的超分辨率(multi-frame super resolution)。对于video SR,其核心思想就是用时间带宽换取空间分辨率。简单来讲,就是在无法得到一张超高分辨率的图像时,可以多取相邻几帧,然后将这一系列低分辨率的图像组成一张高分辨的图像。

    一般来讲Video SR相比于Image SR具有更多的可参考信息,并具有更好的高分辨率视频图像的重建质量,但是其更高的计算复杂度也限制了其应用。本博文主要介绍SISR。SISR是一个逆问题,对于一个低分辨率图像,可能存在许多不同的高分辨率图像与之对应,因此通常在求解高分辨率图像时会加一个先验信息进行规范化约束。在传统的方法中,这个先验信息可以通过若干成对出现的低-高分辨率图像的实例中学到。而基于深度学习的SR通过神经网络直接学习分辨率图像到高分辨率图像的端到端的映射函数。

     

    传统的图像超分辨率重建技术简介

    基于插值的图像超分

          通过某个点周围若干个已知点的值,以及周围点和此点的位置关系,根据一定的公式,算出此点的值,就是插值法。对于如何把原图像的点摆放在新图中并确定具体坐标;未知的点计算时,需要周围多少个点参与,公式如何,如何计算,不同的方案选择,就是不同的插值算法。图像处理中,常用的插值算法有:最邻近元法,双线性内插法,三次内插法等等。

    例如:现有一张分辨率为3 x 2的图片,原图每个像素点的亮度值是:

    我们要把它变成分辨率为6 x 4的图片,把这6个已经知道的点,放在他们大概应该在新图的位置:

    那么我们已经知道6 x 4新图中6个已知的点(绿色),下面只需要求剩余18个点(蓝色)的值即可。通过某个点周围若干个已知点的值,以及周围点和此点的位置关系,根据一定的公式,算出此点的值,就是插值法。如何把原图像的点摆放在新图中(确定具体坐标);未知的点计算时,需要周围多少个点参与,公式如何。不同的方案选择,就是不同的插值算法。图像处理中,常用的插值算法有:最邻近元法,双线性内插法,三次内插法等等。但是实际上,通过这些插值算法,提升的图像细节有限,所以使用较少。通常,通过多幅图像之间的插值算法来重建是一个手段。另外,在视频超分辨重建中,通过在两个相邻帧间插值添加新帧的手段,可以提升视频帧率,减少画面顿挫感。

    基于重建的图像超分辨率

    基于重建的方法通常都是基于多帧图像的,需要结合先验知识。有如下方法:

    • 凸集投影法(POCS)

    • 贝叶斯分析方法

    • 迭代反投影法(IBP)

    • 最大后验概率方法

    • 正规化法

    • 混合方法

    基于学习的图像超分辨率

    机器学习领域(非深度学习邻域)的图像超分方法如下:

    • Example-based方法

    • 邻域嵌入方法

    • 支持向量回归方法

    • 虚幻脸

    • 稀疏表示法

     

    基于深度学习的图像超分辨率重建技术

    基于深度学习的图像超分辨率重建的研究流程如下:

    1,首先找到一组原始图像Image1;

    2,然后将这组图片降低分辨率为一组图像Image2;

    3,通过各种神经网络结构,将Image2超分辨率重建为Image3(Image3和Image1分辨率一样)

    4,通过PSNR等方法比较Image1与Image3,验证超分辨率重建的效果,根据效果调节神经网络中的节点模型和参数

    5,反复执行,直到第四步比较的结果满意

     

    两种常用的评价超分的指标——PSNR和SSIM

    对SR的质量进行定量评价常用的两个指标是PSNR(Peak Signal-to-Noise Ratio)和SSIM(Structure Similarity Index)。这两个值越高代表重建结果的像素值和标准越接近。

    1、PSNR(Peak Signal to Noise Ratio)峰值信噪比:

    MSE表示当前图像X和参考图像Y的均方误差(Mean Square Error),H、W分别为图像的高度和宽度

    PSNR的单位是db,数值越大表示失真越小。n为每像素的比特数,一般的灰度图像取8,即像素灰阶数为256. 

     

    SRCNN(Super-Resolution Convolutional Neural Network)

    (Learning a Deep Convolutional Network for Image Super-Resolution, ECCV2014)

    code: http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html

    传统的SR方法都是学习compact dictionary or manifold space to relate low/high-resolution patches。

    SRCNN是深度学习在图像超分辨率重建上的开山之作,通过采用卷积神经网络来实现低分辨率到高分辨率图像之间端到端的映射。网络的结构如下图所示:

    对于一个低分辨率得图像,首先采用双三次插值(bicubic)将低分辨率图像放大成目标尺寸,接着通过三层卷积网络拟合非线性映射,最后输出高分辨率图像结果。在文种,作者将三层卷积的结构解释成三个步骤:图像块的提取和特征表示,特征非线性映射和最终的重建。三个卷积层使用的卷积核的大小分为为9x9,,1x1和5x5,前两个的输出特征个数分别为64和32。用Timofte数据集(包含91幅图像)和ImageNet大数据集进行训练。使用均方误差(Mean Squared Error, MSE)作为损失函数,有利于获得较高的PSNR。

    SRCNN的流程为:

    step1:图像块提取(Patch extraction and representation)。先将低分辨率图像使用双三次(实际上,bicubic也是一个卷积的操作,可以通过卷积神经网络实现)插值放大至目标尺寸(如放大至2倍、3倍、4倍,属于预处理阶段),此时仍然称放大至目标尺寸后的图像为低分辨率图像(Low-resolution image),即图中的输入(input)。从低分辨率输入图像中提取图像块,组成高维的特征图。

    其中,W1和B1为超参。激活函数采样ReLu

    step2:非线性映射(Non-linear mapping)。第一层卷积:卷积核尺寸9×9(ff1),卷积核数目64(n1),输出64张特征图;第二层卷积:卷积核尺寸1×1(ff2),卷积核数目32(n2),输出32张特征图;这个过程实现两个高维特征向量的非线性映射;

    W2为n1*1*1*n2。采用了1*1卷积(single convolutional layer,目的应该是压缩feature map的深度,同时也起到非线性映射的作用)。

    step3:重建(Reconstruction)。第三层卷积:卷积核尺寸5×5(ff3),卷积核数目1(n3),输出1张特征图即为最终重建高分辨率图像;

    模型参数结构如下:

    • 第一层卷积:卷积核尺寸9×9(f1×f1),卷积核数目64(n1),输出64张特征图;
    • 第二层卷积:卷积核尺寸1×1(f2×f2),卷积核数目32(n2),输出32张特征图;
    • 第三层卷积:卷积核尺寸5×5(f3×f3),卷积核数目1(n3),输出1张特征图即为最终重建高分辨率图像。

    LOSS function(Mean Squared Error (MSE))。估计超参为重构的结果,为ground truth。Using MSE as the loss function favors a high PSNR.

    下面是SRCNN与传统算法得结果对比

    SRCNN的本质就是用了深度卷积网络实现了稀疏编码的方法。只不过稀疏编码的参数需要人工优化,而且能优化的参数有限。但是SRCNN能根据输入的训练集自动优化学习所有参数。因此效果比以前的方法要好。

     

    FSRCNN(Fast Super-Resolution Convolutional Neural Networks)

    (Accelerating the Super-Resolution Convolutional Neural Network, ECCV2016)

    code: http://mmlab.ie.cuhk.edu.hk/projects/FSRCNN.htmlhttp://

    对于一幅240*240的图片,要放大三倍,SRCNN的速度为1.32fps(而实际要求起码要到24fps)

    FSRCNN是对SRCNN的改进(主要起到加速的作用,40times)。改进结果体现在非常快的处理速度上和稍稍提高的输出质量。其主要贡献有三点:

    1. 在最后使用了一个反卷积层(deconvolution layer)放大尺寸(并将反卷积层放于最后,可以缩少计算时间),因此可以将原始的低分辨率图像直接输出到网络中,不需要先通过bicubic interpolation方法放大尺寸,直接对低分辨率图像进行处理(去掉预处理阶段,可以大大提升速度);
    2. 非线性映射部分也十分耗费计算时间(通过shrink the network scale来提高实时性)。改变特征维数,更小的卷积核,更多的映射层;在映射前缩少输入特征的维数,然后再扩展;
    3. 可共享其中的卷积层,如需训练不同上采样倍率的模型,只需fine-tuning最后的反卷积层。only need to do convolution operations once, and upsample an image to different scales using the corresponding deconvolution layer.

    由于FSRCNN不需要在网络外部进行放大图像尺寸(小的图片尺寸可以降低训练时间),同时用一些小的卷积层来代替SRCNN中的大卷积层,因此速度上FSRCNN有较大的提升。且如果仅仅需要FSRCNN得到不同分辨率的图片,只需单独训练反卷积层即可,更加省时,不需要重新训练整个网络。SRCNN与FSRCNN的网络结构对比如下图所示:

    FSRCNN分为五个步骤(每个卷积层的激活函数采用PReLU):

    step1:特征的提取(feature extraction)。SRCNN中针对的是插值后的低分辨率图像,选取的核大小为9×9。而FSRCNN是直接是对原始的低分辨率图像进行操作,因此可以选小一点,设置为5×5。

    step2:收缩(shrinking)。在SRCNN中,特征提取完就进行非线性映射,但当feature map的深度较大时,计算复杂度较高。故此在FSRCNN中,通过应用1×1的卷积核进行降维,减少网络的参数(降低深度),降低计算复杂度。

    step3:非线性映射(mapping,The non-linear mapping step is the most important part that affects the SR performance,主要体现在每一层的滤波器数目,以及层数(也即是深度))。感受野大,能够表现的更好。在SRCNN中,采用的是5×5的卷积核,但是5×5的卷积核计算量会比较大。用两个串联的3×3的卷积核可以替代一个5×5的卷积核,同时两个串联的小卷积核需要的参数3×3×2=18比一个大卷积核5×5=25的参数要小。FSRCNN网络中通过m个核大小为3×3的卷积层进行串联。

    step4:扩张(expanding)。作者发现低维度的特征带来的重建效果不是太好,因此应用1×1的卷积核进行扩维,相当于收缩的逆过程(用1*1的卷积核进行扩张,增加深度)。

    step5:反卷积层(deconvolution,卷积层的逆操作)。如果步长为n,那么尺寸放大n倍,实现了上采样的操作。

    For convolution, the filter is convolved with the image with a stride k, and the output is 1=k times of the input. Contrarily, if we exchange the position of the input and output, the output will be k times of the input。如下图所示

    卷积与反卷积的示意:

    整个结构为:

    loss function 跟SRCNN一样

    结果对比如下:

     

    ESPCN(Efficient Sub-Pixel Convolutional Neural Network)

    (Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network, CVPR2016)

    github(tensorflow): https://github.com/drakelevy/ESPCN-TensorFlowhttps://

    github(pytorch): https://github.com/leftthomas/ESPCNhttps://

    github(caffe): https://github.com/wangxuewen99/Super-Resolution/tree/master/ESPCNhttps://

    (本文同时实现了video和image的超分)

    本文的作者提到:对于类似于SRCNN的方法,由于需要将低分辨率图像通过上采样插值得到与高分辨率图像相同大小的尺寸,再输入到网络中,这意味着要在交大的尺寸上进行卷积操作,从而增加了计算复杂度。为此本文作者提出了一种直接在低分辨率图像尺寸上提取特征,计算得到高分辨率图像的高效方法(efficient sub-pixel convolution layer 来代替插值处理)。ESPCN网络结构如下图所示。

    ESPCN的核心概念是亚像素卷积层(sub-pixel convolutional layer)。网络的输入是原始低分辨率的图像,经过三个CONV后,得到通道数为 r^{2} 的与输入图像大小一样的特征图像。再将特征图像每个像素的 r^{2} 个通道重新排列成一个 \[r \times r\] 的区域,对应高分辨率图像中一个 \[r \times r\] 大小的子块,从而大小为 \[H \times W \times {r^2}\] 的特征图像被重新排列成 \[rH \times rW \times 1\] 的高分辨率图像(理解如下图所示)。而图像尺寸放大过程的插值函数被隐含地包含在前面的卷积层中,有神经网络自己学习到。由于卷积运算都是在低分辨率图像尺寸大小上进行,因此效率会较高。

    其效果如下图所示:

    (对 1080 HD 格式的视频进行3倍放大,SRCNN 每帧需要0.435s,而 ESPCN 则只需0.038s)

     

    VESPCN(Video Efficient Sub-Pixel Convolutional Neural Network)

    Real-Time Video Super-Resolution with Spatio-Temporal Networks and Motion Compensation,CVPR2017)

    STN(Spatial Transform Networks, STN

           CNN分类时,通常需要考虑输入样本的局部性、平移不变性、缩小不变性,旋转不变性等,以提高分类的准确度。而实现这些不变性的传统方法实际上就是对图像进行空间坐标变换,我们所熟悉的一种空间变换就是仿射变换,图像的仿射变换公式可以表示如下:

    式中,表示原图像像素点,表示仿射变换后的图像像素点。系数矩阵θ即为仿射变换系数,可以通过调整系数矩阵θ,实现图像的放大、缩小、平移、旋转等。

           而STN网络提出了一种叫做空间变换网络的模型,该网络不需要关键点的标定,能够根据分类或者其它任务自适应地将数据进行空间变换和对齐(包括平移、缩放、旋转以及其它几何变换等)。在输入数据空间差异较大的情况下,这个网络可以加在现有的卷积网络中,提高分类的准确性。该空间变换网络包括三个部分,网络结构如下图所示:

    Localisation Network——该网络就是一个简单的回归网络。将输入的图片进行几个卷积操作,然后全连接回归出6个角度值(假设是仿射变换),2*3的矩阵。

    Grid generator——网格生成器负责将V中的坐标位置,通过矩阵运算,计算出目标图V中的每个位置对应原图U中的坐标位置。即生成T(G)

    Sampler——采样器根据T(G)中的坐标信息,在原始图U中进行采样,将U中的像素复制到目标图V中。

    简而言之,STN网络首先通过一个简单的回归网络生成6个θ,用以进行原图的仿射变换。然后依据θ矩阵,将目标图上每个点与原图进行对应。最后使用采样器,将原图上的像素值采样到目标图中。流程如下图:

    但是,在VESPCN中,并不按照这个变换顺序。作者使用一个近10层的卷积网络,计算整一张输入图片的光流。即直接实现了STN网络中的第二部分,然后再利用二次插值进行采样操作。作者同样将这个操作称为Spatial Transform。

    好,介绍完STN后,正式介绍VESPCN。

    在视频图像的SR问题中,相邻几帧间具有很强的关联性。VESPCN(属于video超分)提出使用视频中的时间序列图像进行高分辨率重建(可以达到实时性处理)。算法主要包括以下三个方面:

    step 1:纠正相邻帧的位移偏差,先通过Motion estimation(动作补偿,可采用光流法)估计出位移,然后利用位移参数对相邻帧进行空间变换,将二者对齐;

    step 2:把对齐后的相邻若干帧叠放在一起,当作一个三维数据;在低分辨率的三维数据上使用三维卷积,得到的结果大小为\[H \times W \times {r^2}\]

    step 3:采用ESPCN,将特征图像被重新排列成\[rH \times rW \times 1\]的高分辨率图像;

    VESPCN的网络结构如下图所示

    VESPCN主要分为两块:相邻帧之间的位移估计和SR重建,两者都通过神经网络来实现(Spatio-temporal networks & Subpixel convolution SR)。SR重建采用的就是上面介绍的ESPCN。下面介绍一下动作补偿

    Motion estimation这个过程可以通过传统的光流算法来计算,VESPCN使用了STN网络进行动作补偿(其框架如下图所示)。Spatial Transformer Networks, 通过CNN来估计空间变换参数。首先通过初始的两帧(低的分辨率上)估计粗糙的光流,并生成粗糙的目标帧,这两个再与原始的两个帧插值(高的分辨率)输入网络,得到精细的光流。精细的光流和粗糙光流一起得到最后的帧。输出使用tanh激活层。

    具体来说,在VESPCN中,是利用video前后两帧图像的信息来进行高分辨率的重建,然而在视频序列中,前后两帧中的场景与物体会发生(微小)的位移,因此在SR前,要先对两帧图像进行“对齐”。“对齐”的过程可以看作是对图像做仿射变换的过程,图片并不是只通过平移就可以“对齐”,还要进行旋转、缩放等操作。因此作者借鉴了STN网络和光流的思想,使用动作补偿网络来实现两帧图片的对齐功能。具体步骤如下:

    • 代表前后两帧图片,首先将它们进行堆叠(即在第三维上拼接),后通过一个6层的卷积网络(如下图)得到长宽与原图相同,通道数为2的一张feature map,即图中的∆c(代表其x方向分量),称为粗糙光流。

    • Warp是STN网络的步骤,即利用得到的光流图对进行仿射变换(对齐)得到。这样做得到的动作补偿仍然达不到理想要求。因此还要计算精细光流。
    • 将原图的前后两帧()、粗糙光流、经过首次warp之后得到的图片(即),三张图进行堆叠,使用一个6层的卷积网络(上图)计算得到一张通道数为2的精细光流。
    • 将粗糙光流图与精细光流图相加,得到联合光流图(图中)。再利用联合光流图对进行仿射变换,即使用STN。得到最终的经过动作补偿后的

    loss function

    损失函数由三个部分组成:

    1. 高分辨率输出图MSE损失 (ESPCN网络的损失函数)

    2. [前一帧+当前]动作补偿图MSE损失 + Huber 损失 (光流与STN)

    3. [后一帧+当前]动作补偿图MSE损失 + Huber 损失 (光流与STN)

    图像融合

    Spatio-temporal networks可以处理输入为许多帧的情况,对于前中后三帧(多个帧)融合的方法有early fusion,slow fusion,3D convolution三种。其中3D convolution是slow fusion的权重共享的形式。如下图所示

    在VESPCN中使用的是early fusion方法,即在三张图片输入网络之前就进行堆叠。但是论文作者认为slow fusion在网络变深时效果才好于early fusion。

    结果展示:

     

    VDSR(VeryDeep Convolutional Networks)

    (Accurate Image Super-Resolution Using Very Deep Convolutional Networks, CVPR2016)

    code: https://cv.snu.ac.kr/research/VDSR/

    github(caffe): https://github.com/huangzehao/caffe-vdsrhttps://

    github(tensorflow): https://github.com/Jongchan/tensorflow-vdsrhttps://

    github(pytorch): https://github.com/twtygqyy/pytorch-vdsrhttps://

    VDSR是从SRCNN的基础上改进的网络。正如它的名字Very Deep Super-Resolution,其最大的结果特点就是层数很多。它的最终效果准确率非常地高,并且还比SRCNN快。作者认为SRCNN有三个缺点:

    1、学习的信息有限。

    SR是一个逆问题,解决SR问题是借助大量的学习信息得到结果。直观地认为,如果学习的数据越多,学习的上限越大,那么得到的准确性越高。在深度学习中,就是感受野越大,理论上得到的准确性越高。而SRCNN只有三层,得到感受野只有13*13,结果受限于那13*13个像素。

    2、收敛太慢。

    虽然SRCNN相比于当时其他的SR算法已经算快了,但在还是无法满足实际需求,SRCNN训练一个网络花了一星期之久,而SR的应用领域之非常多,要实现实际的应用,对算法收敛速度的提升是很有必要的。

    3、无法实现统一模型的多尺度方法。

    虽然放大倍数是在训练前认为设计的,但在生活中人们放大一张图可以是任意倍数的(包括小数)。SRCNN一个网络只能训练一个放大倍数,倘若对每一个倍数都训练一个SRCNN,那是不现实的。所以我们期望一种新的网络能实现不同倍数的超分辨。

    这三个缺点,也是作者针对SRCNN的改进方向,最终创造一种多层网络能优化以上缺点,命名为VDSR。

    对于超分的问题,实际上,输入的低分辨率图像与输出的高分辨率图像在很大程度上是相似的。也就是,低分辨率图像的低频信息与高分辨率图像的低频信息相近。那么实际上,低分辨率图片与高分辨率图片只是缺乏高频部分的残差,若训练的时候,仅仅训练高分辨率和低分辨率之间的高频残差部分,那么就不需要在低频部分花太多的时间。为此,作者引入了ResNet的思想(参见博文:学习笔记之——基于深度学习的分类网络(未完待续))输出的结果=低分辨率输入(经过插值变成目标尺寸的低分辨率图像)+网络学习到的残差。残差网络结构的思想特别适合用来解决超分辨率问题,可以说影响了之后的深度学习超分辨率方法。VDSR是最直接明显的学习残差的结构,其网络结构如下图所示

    VDSR的改进:

    1.加深了网络结构(20层),使得越深的网络层拥有更大的感受野。文章选取3×3的卷积核,深度为D的网络拥有(2D+1)×(2D+1)的感受野。

    本文的作者认为多层网络对提高SR的准确性非常有帮助,原因有两个:(i)多层网络能获得非常大的感受野理论上,感受野越大,学习的信息越多,准确率越大。对于一个m层全卷积网络,如果每层的过滤器大小(假设长和宽相等)是fi,那么用数学归纳法最终得到的感受野为当m=20,fi=3。得到的感受野为(20*3+1-20)* (20*3+1-20),即为41*41。(ii)多层网络能现实复杂的非线性映射,如下图所示,为层数对VDSR的效果影响,可以看出层数越多,效果越好

    但太多层网络也有不好的地方。首先是多层网络的收敛问题,SRCNN层提出4层的网络,但训练了一星期得出的结果不好。作者认为这是由于4层SRCNN的收敛速度低和收敛稳定不好而导致的。为了解决收敛问题,作者采用了残差学习和自适应梯度剪切的方法。

    2.采用残差学习,残差图像比较稀疏,大部分值都为0或者比较小,因此收敛速度快。VDSR还应用了自适应梯度裁剪(Adjustable Gradient Clipping),将梯度限制在某一范围,也能够加快收敛过程。与此同时再采用高学习率。

    残差学习

    由于输入图像和输出图像有着高度的相似性(高分率图像可以看出是低分辨率图像+高分率图像的信息)。所以我们可以改用学习输出与输入的残差(即高分辨率的特征)取代直接学习全部(高分辨率的特征+低分辨率的特征)。输入图像是x,f(x)是经过学习得到的残差,r=y-x是实际的残差。那么损失函数为,当损失函数够小时,f(x)+x就能逼近y了。残差学习能提高收敛速度,因为只需学习高分辨率的特征。从上面网络结构图中的特征图上可以看到,很多是空的,残差学习只学习了高分辨率的特征。下图为用残差学习和不用残差学习的算法比较。可以看到残差学习(蓝色的线)的学习速度非常的快(Epochs很小的时候就收敛了)

    上图中为VDSR的论文原图,作者用VDSR(使用残差学习)和另外一个不用残差学习的网络比较。但这可能并非严格的控制变量法,论文的描述为“Performance curve for residual and non-residual networks.”VDSR除了使用残差学习,还用了多层网络、自适应梯度剪切、高学习率等技巧。如果拿VDSR和SRCNN比较,并不能说明残差学习的优越。

    自适应梯度剪切

    由于链式法则的计算,当网络的层数非常多时,经常出现梯度消失或者梯度爆炸的现象。体现在图像,就是损失函数有一个悬崖式的变化。如果设置的学习率太大,那么可能出现修改过度,甚至丢失已经优化好的数据。而自适应梯度剪切就是根据你的学习率,调整梯度的角度,确保收敛的稳定性。

    高学习率

    提高收敛速度的最直接方式就是增大学习率,但单纯的增大高学习率会产生收敛问题(收敛不稳定),虽然作者已经用了自适应梯度剪切的方法来增大收敛稳定性。但作者在设置学习率时,也能使用一下技巧来增强收敛稳定性。具体的做法是,一开始设置一个很大的学习率(CDSR简单地令每层的学习率相同),每过20个epochs,将学习率缩小十倍。这么做的原理也很直观,一开始训练时网络损失函数还较大,能够大胆地用高学习率来缩短收敛时间,随着训练次数得增多,模型趋向收敛,如果继续用高学习率,就会破坏收敛稳定性,所以改用小学习率,确保网络收敛。这么多次缩小学习率,进一步缩小了收敛时间。

    3.对于采用非常深的网络来预测输出,会导致每一次进行卷积运算,feature map的大小都会减少,这样甚至会造成高清新图像的尺寸会比低分辨图像的尺寸小。这与其他超分辨率方法是一致的,因为许多方法需要周围的像素来正确地推断中心像素。这个中心环绕关系是有用的,因为周围区域为这个超分辨率这个病态问题提供了更多的约束。对于图像边界附近的像素影响最大,因为边界像素与周边像素的关系最强,随着尺度变小,周边像素的影响力减小,对边界像素的学习不是好事。许多SR方法对结果图像进行裁剪。然而,如果所需的环绕区域非常大,这种方法就无效了。裁剪后,最终的图像太小,无法达到视觉效果。为了解决这个问题,VDSR在每次卷积前都对图像进行补0操作,这样保证了所有的特征图和最终的输出图像在尺寸上都保持一致,解决了图像通过逐步卷积会越来越小的问题,又突出了边界像素的特征。文中说实验证明补0操作对边界像素的预测结果也能够得到提升。

    4.多尺度学习。VDSR将不同尺度的图像混合在一起训练,这样训练出来的一个模型就可以解决不同倍数的超分辨率问题(同一个模型学习多个尺度的放大)。那么就不存在SRCNN中网络只适用于单一规模的问题了。

    可以根据实验结果得出几点结论。

    1. 对于低倍数图像,用多尺度训练的网络几乎和用单尺度训练的网络一样
    2. 对于高倍数图像,采用多尺度训练的效果比采用单尺度训练的网络的效果好

    原因是高倍数放大和低倍数放大有相似之处,它们间可以互相学习,尤其是高倍数的放大,能从低倍数放大的学习中额外获得新的信息,从而导致对于高倍数图像,采用多尺度训练的网络比采用单尺度训练的网络好。

     

    VDSR之后,几乎所有的网络都借鉴了其学习残差的思想,原因在下图的效果图里就可以看出来

    结果对比如下图所示:

    DRCN(Deeply-Recursive Convolutional Network)

    (Deeply-Recursive Convolutional Network for Image Super-Resolution, CVPR2016)

    code: https://cv.snu.ac.kr/research/DRCN/

    githug(tensorflow): https://github.com/jiny2001/deeply-recursive-cnn-tfhttps://

    DRCN与上面的VDSR都是来自首尔国立大学计算机视觉实验室的工作,两篇论文都发表在CVPR2016上,两种方法的结果非常接近。其贡献主要如下:

    1、将RNN(递归神经网络,Recursive Neural Network)的结构应用于SR中。RNN用于非线性映射时,通过RNN,数据循环多次地通过该层,而将这个RNN展开的话,就等效于使用同一组参数的多个串联的卷积层;

    2、利用了ResNet的思想,加入了skip-connection,加深了网络结构(16个递归),增加了网络感受野,提升了性能。DRCN网络结构如下图所示:

    DRCN输入的是插值后的图像,分为三个模块,第一个是Embedding network,相当于特征提取,第二个是Inference network, 相当于特征的非线性映射,第三个是Reconstruction network,即从特征图像恢复最后的重建结果。其中的Inference network是一个递归网络,即数据循环地通过该层多次。将这个循环进行展开,等效于使用同一组参数的多个串联的卷积层,如下图所示。

    其中的  到  是D个共享参数的卷积层。将这D个卷积层的每一层的结果都通过相同的Reconstruction Net,在Reconstruction Net中与输入的图像相加,得到D个输出重建结果。这些所有的结果在训练时都同时被监督,即所有的递归都被监督,作者称之为递归监督(Recursive-Supervision),避免了梯度消失/爆炸问题。将D个递归得到的结果再加权平均:,得到一个总输出。每个加权在训练的过程中也不断地更新。最终的目标函数就需要优化每一个递归层输出的误差和总输出的误差:

    表示的是权值衰减(weight decay)。 的初始值设置得比较高以使得训练过程稳定,因为训练开始的阶段递归更容易收敛。随着训练的进行,  逐渐衰减来提升最终输出的性能。

    结果对比如下所示:

    RED(very deep Residual Encoder-Decoder Networks)

    (Image Restoration Using Convolutional Auto-encoders with Symmetric Skip Connections, NIPS2016)

    这篇论文提出了一个由对称的卷积层——反卷积层构成的网络结构,如下图所示(可以看作为ResNet+VDSR):

    卷积层——反卷积层结构有点类似与编码——解码结构。其网络结构是对称的,每个卷积层都对应有反卷积层,卷积层将输入图像尺寸减小后,再通过反卷积层上采样变大,使得输入输出的尺寸一样。卷积层用于提取图像的特征,相当于编码的作用。而反卷积层用于放大特征的尺寸并恢复图像细节。而每一组镜像对应的卷积和反卷积有skip connection将两部分具有同样尺寸的特征(要输入卷积层的特征和对应的反卷积层输出的特征)做相加操作(ResNet那样的操作)后再输入到下一个反卷积层。这样的结构能够让反向传播信号能够直接传递到底层,解决了梯度消失问题,同时能将卷积层的细节传递给反卷积层,能够恢复出更干净的图片。与此同时,网络中有一条线是将输入的图像连接到后面与最后的一层反卷积层的输出相加,也就是VDSR中用到的方式,因此RED中间的卷积层和反卷积层学习的特征是目标图像和低质图像之间的残差。(个人理解如下图所示)

    结果如下图所示:

    DRRN(Deep Recursive Residual Network)

    (Image Super-Resolution via Deep Recursive Residual Network, CVPR2017)

    github(caffe): https://github.com/tyshiwo/DRRN_CVPR17

    可以看作:ResNet+VDSR+DRCN

    DRRN中的每个残差单元都共同拥有一个相同的输入,即递归块中的第一个卷积层的输出。每个残差单元都包含2个卷积层。在一个递归块内,每个残差单元内对应位置相同的卷积层参数都共享(图中DRRN的浅绿色块或浅红色块)。作者列出了ResNet、VDSR、DRCN和DRRN四者的主要策略。ResNet是链模式的局部残差学习。VDSR是全局残差学习。DRCN是全局残差学习+单权重的递归学习+多目标优化。DRRN是多路径模式的局部残差学习+全局残差学习+多权重的递归学习。

    文章中比较了不同的递归块和残差单元数量的实验结果,最终选用的是1个递归块和25个残差单元,深度为52层的网络结构。总之,DRRN就是通过对之前已有的ResNet等结构进行调整,采取更深的网络结构得到结果的提升。

    结果对比如下图所示:

    LapSRN(Laplacian PyramidSuper-Resolution Network)

    (Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution, CVPR2017)

    github(matconvnet): https://github.com/phoenix104104/LapSRN

    github(pytorch): https://github.com/twtygqyy/pytorch-LapSRNhttps:/

    github(tensorflow): https://github.com/zjuela/LapSRN-tensorflowhttps:/

    作者总结了之前的基于深度学习的SR方法,主要有以下三个缺点:

    1、关于上采样的问题。

    • 基于预处理的上采样。使用预先定义好的上采样操作(如bicubic操作)来获得目标的空间尺寸,这样做增加了额外的计算开销,且会导致重建伪影;
    • 基于亚像素卷积层(ESPCN)或反卷积层(FSRCNN)。这些方法的网络结构又相对比较简单,性能较差,并不能学好低分辨率图像到高分辨率图像复杂的映射;

    2、在训练网络时使用 l_{2} 型损失函数时,不可避免地会产生模糊的预测,恢复出的高分辨率图片往往会太过于平滑;

    3、在重建高分辨率图像时,如果只用一次上采样的操作,在获得大倍数(8倍以上)的上采样因子时就会比较困难。而且在不同的应用时,需要训练不同上采样倍数的模型。

    因此作者提出了Lap SRN网络结构,其结构如下图所示

    LapSRN可以看成由多级组成的分级网络,每一级完成一次2倍的上采样(若要实现8倍,就要3级)。在每一级中,先通过一些级联的卷积层提取特征,接着通过一个反卷积层将提取出的特征的尺寸上采样2倍。反卷积层后连有两个卷积层,一个卷积层的作用是继续提取特征,另外一个卷积层的作用是预测出这一级的残差。输入图像在每一级也经过一个反卷积层使尺寸上采样2倍,再与对应级的残差相加,就能重构出这一级的上采样结果。(个人理解的图示如下)

    结果对比如下图所示:

     

    SRDenseNet

    (Image Super-Resolution Using Dense Skip Connections, ICCV2017)

    DenseNet在稠密块(dense block)中将每一层的特征都输入给之后的所有层,使所有层的特征都串联起来,而不是像ResNet那样直接相加。这样的结构给整个网络带来了减轻梯度消失问题、加强特征传播、支持特征复用、减少参数数量的优点。一个稠密块的结构如下图所示。

    Dense Block是通过将许多个卷积网络分成3~4个部分,这些部分叫做dense block(有点类似于残差网络中的残差块)。在每个block中,都执行密集链接,block的输出再通过池化降低特征图尺寸。如下图所示:

    SRDenseNet将稠密块结构应用到了超分辨率问题上(在dense block上再加上skip connection),其结构可以分为四个部分:

    step 1:用一个卷积层学习低层的特征;

    step 2:用多个稠密块学习高层的特征;

    step 3:通过几个反卷积层进行上采样;

    step 4:最后再通过一个卷积层生成高分辨率输出;

    网络结构如下图所示

    结果对比如下图所示

     

    SRGAN(SRResNet,super-resolution generative adversarial network)

    (Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, CVPR2017)

    github(tensorflow): https://github.com/zsdonghao/SRGANhttps://

    github(tensorflow): https://github.com/buriburisuri/SRGANhttps://

    github(torch): https://github.com/junhocho/SRGANhttps:/AN

    github(caffe): https://github.com/ShenghaiRong/caffe_srganhttps:///caffe_srgan

    github(tensorflow): https://github.com/brade31919/SRGAN-tensorflowhttps://RGAN-tensorflow

    github(keras): https://github.com/titu1994/Super-Resolution-using-Generative-Adversarial-Networkshttps://er-Resolution-using-Generative-Adversarial-Networks

    github(pytorch): https://github.com/ai-tor/PyTorch-SRGAN

    将生成对抗网络(Generative Adversarial Network, GAN)用在了超分辨率问题上。其出发点是传统的方法一般处理的是较小的放大倍数,当图像的放大倍数在4以上时,很容易使得到的结果显得过于平滑,而缺少一些细节上的真实感。因此SRGAN使用GAN来生成图像中的细节。

    关于GAN的理解如下图所示:

    传统的方法使用的代价函数一般是最小均方差(MSE),即:

    该代价函数使重建结果有较高的峰值信噪比,但是恢复出来的图像通常会丢失高频细节,出现过度平滑的纹理,使人不能有好的视觉感受。SRGAN的理念是:应当使重建的高分辨率图像与真实的高分辨率图像无论是低层次的像素值上,还是高层次的抽象特征上,和整体概念和风格上,都应当接近。MSE和GAN方法的区别如下图

    SRGAN利用感知损失(perceptual loss)和对抗损失(adversarial loss)来提升恢复出的图片的真实感。感知损失是利用卷积神经网络提取出的特征,通过比较生成图片经过卷积神经网络后的特征和目标图片经过卷积神经网络后的特征的差别,使生成图片和目标图片在语义和风格上更相似。简单来说,一个GAN所要完成的工作就是:G网通过低分辨率的图像生成高分辨率图像,由D网判断拿到的图像是由G网生成的,还是数据库中的原图像。当G网能成功骗过D网的时候,那我们就可以通过这个GAN完成超分辨率了。SRGAN网络结构如下图(SRGAN还是用SRRESNET来进行超分工作 但增加了一个对抗网络来判断生成的图片是原图还是超分出来的图):

    在生成网络部分(SRResNet)部分包含多个残差块,每个残差块中包含两个3×3的卷积层,卷积层后接批规范化层(batch normalization, BN)和PReLU作为激活函数,两个2×亚像素卷积层(sub-pixel convolution layers)被用来增大特征尺寸。在判别网络部分包含8个卷积层,随着网络层数加深,特征个数不断增加,特征尺寸不断减小,选取激活函数为LeakyReLU,最终通过两个全连接层和最终的sigmoid激活函数得到预测为自然图像的概率。

    SRGAN的损失函数为:

    第一部分是基于内容的代价函数(content loss),第二部分是基于对抗学习的代价函数(adversarial loss)。

    content loss可以是基于均方误差的损失的损失函数:

    也可以是基于训练好的以ReLU为激活函数的VGG模型的损失函数:

    i和j表示VGG19网络中第i个最大池化层(maxpooling)后的第j个卷积层得到的特征。然后,又对内容损失分别设置成基于均方误差、基于VGG模型低层特征和基于VGG模型高层特征三种情况作了比较,研究表明在基于均方误差的时候表现最差,基于VGG模型高层特征比基于VGG模型低层特征的内容损失能生成更好的纹理细节。

    adversarial loss为:

    结果对比如下

     

    EDSR(enhanced deep super-resolution network)

    (Enhanced Deep Residual Networks for Single Image Super-Resolution, CVPRW2017)

    github(torch): https://github.com/LimBee/NTIRE2017https://2017

    github(tensorflow): https://github.com/jmiller656/EDSR-Tensorflowhttps://

    github(pytorch): https://github.com/thstkdgus35/EDSR-PyTorchhttps://

    EDSR,单幅图像超分辨率增强深度残差网络。EDSR最有意义的模型性能提升是去除掉了SRResNet的批量标准化(batch normalization, BN)层。由于批量标准化层对特征进行了规范化,因此通过规范化特征可以摆脱网络的范围可变性,最好将其删除

    ,从而可以扩大模型的尺寸来提升结果质量。相当于SRResNet的改进,EDSR与原始 ResNet 和SRResnet的对比图如下

    此外,由于BN层消耗的内存量与前面的卷积层相同,因此去掉BN层后,EDSR的GPU内存使用量也会减少。与SRResNet相比,基准模型没有批量标准化层,在培训期间可节省大约40%的内存使用量。因此,可以在有限的计算资源下构建一个比传统ResNet结构具有更好性能的更大模型。

    提高网络模型性能的最简单方法是增加参数数量。在卷积神经网络中,可以通过堆叠多个层或通过增加滤波器的数量来增强模型性能。一般的CNN架构的深度(层数)B和宽度(特征Channels的数量)F约占内存与参数。因此,当考虑有限的复合资源时,增加F而不是B可以最大化模型容量。

    但是,将特征图的数量增加到一定水平以上会使训练过程在数值上不稳定。这里通过采用因子0.1的残差缩放来解决这个问题。在每个残余块中,在最后的卷积层之后放置恒定的缩放层。当使用大量滤波器时,这些模块极大地稳定了训练过程。在测试阶段,该层可以集成到之前的卷积层中,以提高计算效率。使用上面三种网络对比图中提出的残差块(即结构类似于SRResNet,但模型在残差块之外没有ReLU激活层)构建单尺度模型。此外,因为每个卷积层仅使用64个特征图,所以单尺度模型没有残余缩放层。在最终单尺度模型EDSR中,通过设置B=32,F=256并使用比例因子0.1来扩展单尺度模型。模型架构如下图所示:

    在训练上采样因子×3和×4的模型时,用预训练的×2网络初始化模型参数,这种预训练策略加速了训练并提高了最终性能,如下图所示。红线表示绿线的最佳性能。对于向上扩展×4,如果使用预先训练的尺度×2模型(蓝线),则训练收敛速度远远快于从随机初始化(绿线)开始的训练。(启发:可先用低放大倍数来做预训练,最终再采用高放大倍数来做最终训练

    从上图中的观察,作者得出结论,多尺度的超分辨率是相互关联的任务。于是通过构建一个多尺度架构来进一步探索这个想法,该架构利用了VDSR的尺度间相关性。将多尺度基线模型设计为具有B=16个残差块的单个主分支,以便大多数参数在不同尺度上共享,简单来说,MDSR(multiscale architecture SR)的中间部分还是和EDSR一样,只是在网络前面添加了不同的预训练好的模型来减少不同倍数的输入图片的差异。在网络最后,不同倍数上采样的结构平行排列来获得不同倍数的输出结果。如下图所示

    在多尺度架构中,通过引入特定规模的处理模块来处理多尺度的超分辨率。首先,预处理模块位于网络的前面,以减少不同尺度的输入图像的差异。每个预处理模块由两个具有5×5内核的残差块组成。通过采用更大的内核作为预处理模块,可以使不同尺度部分保持浅薄,而而较大的感受野被覆盖在网络的早期阶段。在多尺度基线模型的最后,进行特定尺度的上采样模块并行定位,以处理多尺度重建。上采样模块的体系结构类似于EDSR中描述的单尺度基线模型的体系结构。

    基于这些要素,构建了最终的多尺度模型MDSR,其中B=80和F=64。虽然这里针对3种不同尺度的单尺度基线模型分开了看各有约150万个参数,简单相加总计为450万个,但最后的多尺度基线模型只有320万个参数,然而多尺度基线模型可以表现出与单尺度基线模型相当的性能。此外,多尺度模型在深度方面还具有可扩展性。尽管最终的MDSR的深度大约是多尺度基线模型的5倍,但其实只需要2.5倍的参数,因为残余块比特定尺度的部件的参数数量更少。MDSR显示出与比例特定的EDSR相当的性能。

    下图是不同尺度不同模型训练得到的(PSNR(dB) / SSIM)值对比,红色代表最佳表现,蓝色代表次之(baseline即基线模型):

    结果对比如下图所示:

     

    参考材料

    https://blog.csdn.net/prinstinadl/article/details/80825638

    https://mp.weixin.qq.com/s?__biz=MzU3MDMyNzc1Mg==&mid=2247485054&idx=1&sn=83f2b5589149428d1968631a7f2a3430&chksm=fcf051d9cb87d8cf145c8e6990862726007c02b6b764b959d315d47cbfd3240e980bf5f3dfe8&mpshare=1&scene=24&srcid=1011h21ziMx5baUPsmVBplTC#rd

    https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247484150&idx=1&sn=b165feed640c9df9f4487eac85ff5a85&chksm=ec1fef0fdb6866197253c1311a048bfe20bc9d57958977eca099c91d6e9d259dcb89ca7de5d6&mpshare=1&scene=1&srcid=1011ahCRVF94OJohJLAAUh4d#rd

    https://blog.csdn.net/zjyruobing/article/details/49908979(PSNR和SSIM)

    https://mp.weixin.qq.com/s?__biz=MzAwNDI4ODcxNA==&mid=2652249131&idx=3&sn=d44ded4e2b1e080e607daec028506576&chksm=80cc858eb7bb0c984d42612bb476b10e7485c146f7ef0351baf3789dbb7c321080eacaff3cf9&mpshare=1&scene=24&srcid=1011KJe0Nh62sOt3FV84WwCw#rd

    https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247491802&idx=1&sn=35fb3c579a05ebb5cffa67dd1e650b15&chksm=96ea3f5aa19db64cb0eb0ec3a4d2045a0c85b11454283066e9d323813988dc59e7692d076e6c&mpshare=1&scene=24&srcid=1011Xt9HxeNm43MrRSQ6aXrT#rd(SRCNN的复现)

    https://blog.csdn.net/Autism_/article/details/79401798(SRCNN)

    https://blog.csdn.net/Cyiano/article/details/78368263?locationNum=4&fps=1(VESPCN)

    https://blog.csdn.net/itleaks/article/details/80336825(反卷积)

     

     

    展开全文
  • 图像超分辨率重建概述 1. 概念 图像分辨率是一组用于评估图像中蕴含细节信息丰富程度的性能参数,包括时间分辨率、空间分辨率及色阶分辨率等,体现了成像系统实际所能反映物体细节信息的能力。相较于低分辨率图像...

    一.  图像超分辨率重建概述

    1. 概念

    图像分辨率是一组用于评估图像中蕴含细节信息丰富程度的性能参数,包括时间分辨率、空间分辨率及色阶分辨率等,体现了成像系统实际所能反映物体细节信息的能力。相较于低分辨率图像,高分辨率图像通常包含更大的像素密度、更丰富的纹理细节及更高的可信赖度。但在实际上情况中,受采集设备与环境、网络传输介质与带宽、图像退化模型本身等诸多因素的约束,我们通常并不能直接得到具有边缘锐化、无成块模糊的理想高分辨率图像。提升图像分辨率的最直接的做法是对采集系统中的光学硬件进行改进,但是由于制造工艺难以大幅改进并且制造成本十分高昂,因此物理上解决图像低分辨率问题往往代价太大。由此,从软件和算法的角度着手,实现图像超分辨率重建的技术成为了图像处理和计算机视觉等多个领域的热点研究课题。

    图像的超分辨率重建技术指的是将给定的低分辨率图像通过特定的算法恢复成相应的高分辨率图像。具体来说,图像超分辨率重建技术指的是利用数字图像处理、计算机视觉等领域的相关知识,借由特定的算法和处理流程,从给定的低分辨率图像中重建出高分辨率图像的过程。其旨在克服或补偿由于图像采集系统或采集环境本身的限制,导致的成像图像模糊、质量低下、感兴趣区域不显著等问题。

    简单来理解超分辨率重建就是将小尺寸图像变为大尺寸图像,使图像更加“清晰”。具体效果如下图所示:

     

    图片

     

     

    可以看到,通过特定的超分辨率重建算法,使得原本模糊的图像变得清晰了。读者可能会疑惑,直接对低分辨率图像进行“拉伸”不就可以了吗?答案是可以的,但是效果并不好。传统的“拉伸”型算法主要采用近邻搜索等方式,即对低分辨率图像中的每个像素采用近邻查找或近邻插值的方式进行重建,这种手工设定的方式只考虑了局部并不能满足每个像素的特殊情况,难以恢复出低分辨率图像原本的细节信息。因此,一系列有效的超分辨率重建算法开始陆续被研究学者提出,重建能力不断加强,直至今日,依托深度学习技术,图像的超分辨率重建已经取得了非凡的成绩,在效果上愈发真实和清晰。

    2. 应用领域

    1955年,Toraldo di Francia在光学成像领域首次明确定义了超分辨率这一概念,主要是指利用光学相关的知识,恢复出衍射极限以外的数据信息的过程。1964年左右,Harris和Goodman则首次提出了图像超分辨率这一概念,主要是指利用外推频谱的方法合成出细节信息更丰富的单帧图像的过程。1984 年,在前人的基础上,Tsai和 Huang 等首次提出使用多帧低分辨率图像重建出高分辨率图像的方法后, 超分辨率重建技术开始受到了学术界和工业界广泛的关注和研究。

    图像超分辨率重建技术在多个领域都有着广泛的应用范围和研究意义。主要包括:

    (1) 图像压缩领域

    在视频会议等实时性要求较高的场合,可以在传输前预先对图片进行压缩,等待传输完毕,再由接收端解码后通过超分辨率重建技术复原出原始图像序列,极大减少存储所需的空间及传输所需的带宽。

    (2) 医学成像领域

    对医学图像进行超分辨率重建,可以在不增加高分辨率成像技术成本的基础上,降低对成像环境的要求,通过复原出的清晰医学影像,实现对病变细胞的精准探测,有助于医生对患者病情做出更好的诊断。

    (3) 遥感成像领域

    高分辨率遥感卫星的研制具有耗时长、价格高、流程复杂等特点,由此研究者将图像超分辨率重建技术引入了该领域,试图解决高分辨率的遥感成像难以获取这一挑战,使得能够在不改变探测系统本身的前提下提高观测图像的分辨率。

    (4) 公共安防领域

    公共场合的监控设备采集到的视频往往受到天气、距离等因素的影响,存在图像模糊、分辨率低等问题。通过对采集到的视频进行超分辨率重建,可以为办案人员恢复出车牌号码、清晰人脸等重要信息,为案件侦破提供必要线索。

    (5) 视频感知领域

    通过图像超分辨率重建技术,可以起到增强视频画质、改善视频的质量,提升用户的视觉体验的作用。

    3. 研究进展

    按照时间和效果进行分类,可以将超分辨率重建算法分为传统算法和深度学习算法两类。

    3.1 传统超分辨率重建算法

    传统的超分辨率重建算法主要依靠基本的数字图像处理技术进行重建,常见的有如下几类:

    (1) 基于插值的超分辨率重建

    基于插值的方法将图像上每个像素都看做是图像平面上的一个点,那么对超分辨率图像的估计可以看做是利用已知的像素信息为平面上未知的像素信息进行拟合的过程,这通常由一个预定义的变换函数或者插值核来完成。基于插值的方法计算简单、易于理解,但是也存在着一些明显的缺陷。

    首先,它假设像素灰度值的变化是一个连续的、平滑的过程,但实际上这种假设并不完全成立。其次,在重建过程中,仅根据一个事先定义的转换函数来计算超分辨率图像,不考虑图像的降质退化模型,往往会导致复原出的图像出现模糊、锯齿等现象。常见的基于插值的方法包括最近邻插值法、双线性插值法和双立方插值法等。

    (2) 基于退化模型的超分辨率重建

    此类方法从图像的降质退化模型出发,假定高分辨率图像是经过了适当的运动变换、模糊及噪声才得到低分辨率图像。这种方法通过提取低分辨率图像中的关键信息,并结合对未知的超分辨率图像的先验知识来约束超分辨率图像的生成。常见的方法包括迭代反投影法、凸集投影法和最大后验概率法等。

    (3) 基于学习的超分辨率重建

    基于学习的方法则是利用大量的训练数据,从中学习低分辨率图像和高分辨率图像之间某种对应关系,然后根据学习到的映射关系来预测低分辨率图像所对应的高分辨率图像,从而实现图像的超分辨率重建过程。常见的基于学习的方法包括流形学习、稀疏编码方法。

    3.2 基于深度学习的超分辨率重建算法

    机器学习是人工智能的一个重要分支,而深度学习则是机器学习中最主要的一个算法,其旨在通过多层非线性变换,提取数据的高层抽象特征,学习数据潜在的分布规律,从而获取对新数据做出合理的判断或者预测的能力。随着人工智能和计算机硬件的不断发展,Hinton等人在2006年提出了深度学习这一概念,其旨在利用多层非线性变换提取数据的高层抽象特征。凭借着强大的拟合能力,深度学习开始在各个领域崭露头角,特别是在图像与视觉领域,卷积神经网络大放异,这也使得越来越多的研究者开始尝试将深度学习引入到超分辨率重建领域。

    2014年,Dong等人首次将深度学习应用到图像超分辨率重建领域,他们使用一个三层的卷积神经网络学习低分辨率图像与高分辨率图像之间映射关系,自此,在超分辨率重建率领域掀起了深度学习的浪潮,他们的设计的网络模型命名为SRCNN(Super-Resolution Convolutional Neural Network)。

    SRCNN采用了插值的方式先将低分辨率图像进行放大,再通过模型进行复原。Shi等人则认为这种预先采用近邻插值的方式本身已经影响了性能,如果从源头出发,应该从样本中去学习如何进行放大,他们基于这个原理提出了ESPCN (Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network)算法。该算法在将低分辨率图像送入神经网络之前,无需对给定的低分辨率图像进行一个上采样过程,而是引入一个亚像素卷积层(Sub-pixel convolution layer),来间接实现图像的放大过程。这种做法极大降低了SRCNN的计算量,提高了重建效率。

    这里需要注意到,不管是SRCNN还是ESPCN,它们均使用了MSE作为目标函数来训练模型。2017年,Christian Ledig等人从照片感知角度出发,通过对抗网络来进行超分重建(论文题目:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network)。他们认为,大部分深度学习超分算法采用的MSE损失函数会导致重建的图像过于平滑,缺乏感官上的照片真实感。他们改用生成对抗网络(Generative Adversarial Networks, GAN)来进行重建,并且定义了新的感知目标函数,算法被命名为SRGAN,由一个生成器和一个判别器组成。生成器负责合成高分辨率图像,判别器用于判断给定的图像是来自生成器还是真实样本。通过一个博弈的对抗过程,使得生成器能够将给定的低分辨率图像重建为高分辨率图像。在SRGAN这篇论文中,作者同时提出了一个对比算法,名为SRResNet。SRResNet依然采用了MSE作为最终的损失函数,与以往不同的是,SRResNet采用了足够深的残差卷积网络模型,相比于其它的残差学习重建算法,SRResNet本身也能够取得较好的效果。

    由于SRGAN这篇论文同时提出了两种当前主流模式的深度学习超分重建算法,因此,接下来将以SRGAN这篇论文为主线,依次讲解SRResNet和SRGAN算法实现原理,并采用Pytorch深度学习框架完成上述两个算法的复现。

    二.  SRResNet算法原理和Pytorch实现

    1. 超分重建基本处理流程

    最早的采用深度学习进行超分重建的算法是SRCNN算法,其原理很简单,对于输入的一张低分辨率图像,SRCNN首先使用双立方插值将其放大至目标尺寸,然后利用一个三层的卷积神经网络去拟合低分辨率图像与高分辨率图像之间的非线性映射,最后将网络输出的结果作为重建后的高分辨率图像。尽管原理简单,但是依托深度学习模型以及大样本数据的学习,在性能上超过了当时一众传统的图像处理算法,开启了深度学习在超分辨率领域的研究征程。SRCNN的网络结构如图2所示。

    图片

     

    SRCNN作为早期开创性的研究论文,也为后面的工作奠定了处理超分问题的基本流程:

    (1) 寻找大量真实场景下图像样本;

    (2) 对每张图像进行下采样处理降低图像分辨率,一般有2倍下采样、3倍下采样、4倍下采样等。如果是2倍下采样,则图像长宽均变成原来的1/2.。下采样前的图像作为高分辨率图像H,下采样后的图像作为低分辨率图像L,L和H构成一个有效的图像对用于后期模型训练;

    (3) 训练模型时,对低分辨率图像L进行放大还原为高分辨率图像SR,然后与原始的高分辨率图像H进行比较,其差异用来调整模型的参数,通过迭代训练,使得差异最小。实际情况下,研究学者提出了多种损失函数用来定义这种差异,不同的定义方式也会直接影响最终的重建效果;

    (4) 训练完的模型可以用来对新的低分辨率图像进行重建,得到高分辨率图像。

    从实际操作上来看,整个超分重建分为两步:图像放大和修复。所谓放大就是采用某种方式(SRCNN采用了插值上采样)将图像放大到指定倍数,然后再根据图像修复原理,将放大后的图像映射为目标图像。超分辨率重建不仅能够放大图像尺寸,在某种意义上具备了图像修复的作用,可以在一定程度上削弱图像中的噪声、模糊等。因此,超分辨率重建的很多算法也被学者迁移到图像修复领域中,完成一些诸如jpep压缩去燥、去模糊等任务。

     

    图片

     

     

    简化版的超分重建处理流程如图3所示,当然,图像放大和修复两个步骤的顺序可以任意互换。

     

    2. 构建深度网络模型提高超分重建性能

    SRCNN只采用了3个卷积层来实现超分重建,有文献指出如果采用更深的网络结构模型,那么可以重建出更高质量的图像,因为更深的网络模型可以抽取出更高级的图像特征,这种深层模型对图像可以更好的进行表达。在SRCNN之后,有不少研究人员尝试加深网络结构以期取得更佳的重建性能,但是越深的模型越不能很好的收敛,无法得到期望的结果。部分研究学者通过迁移学习来逐步的增加模型深度,但这种方式加深程度有限。因此,亟需一种有效的模型,使得构建深层网络模型变得容易并且有效。这个问题直到2015年由何凯明团队提出ResNet网络才得以有效解决。

    ResNet中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很广泛的运用。ResNet在传统卷积神经网络中加入了残差学习(residual learning),解决了深层网络中梯度弥散和精度下降(训练集)的问题,使网络能够越来越深,既保证了精度,又控制了速度。

    ResNet可以直观的来理解其背后的意义。以往的神经网络模型每一层学习的是一个 y = f(x) 的映射,可以想象的到,随着层数不断加深,每个函数映射出来的y误差逐渐累计,误差越来越大,梯度在反向传播的过程中越来越发散。这时候,如果改变一下每层的映射关系,改为 y = f(x) + x,也就是在每层的结束加上原始输入,此时输入是x,输出是f(x)+x,那么自然的f(x)趋向于0,或者说f(x)是一个相对较小的值,这样,即便层数不断加大,这个误差f(x)依然控制在一个较小值,整个模型训练时不容易发散。

     

    图片

     

     

     

     

    上图为残差网络的原理图,可以看到一根线直接跨越两层网络(跳链),将原始数据x带入到了输出中,此时F(x)预测的是一个差值。有了残差学习这种强大的网络结构,就可以按照SRCNN的思路构建用于超分重建的深度神经网络。SRResNet算法主干部分就采用了这种网络结构,如下图所示:

     

     

    图片

     

     

    上述模型采用了多个深度残差模块进行图像的特征抽取,多次运用跳链技术将输入连接到网络输出,这种结构能够保证整个网络的稳定性。由于采用了深度模型,相比浅层模型能够更有效的挖掘图像特征,在性能上可以超越浅层模型算法(SRResNet使用了16个残差模块)。注意到,上述模型每层仅仅改变了图像的通道数,并没有改变图像的尺寸大小,从这个意义上来说这个网络可以认为是前面提到的修复模型。下面会介绍如何在这个模型基础上再增加一个子模块用来放大图像,从而构建一个完整的超分重建模型。

     

     

    3.  基于子像素卷积放大图像尺寸

    子像素卷积(Sub-pixel convolution)是一种巧妙的图像及特征图放大方法,又叫做pixel shuffle(像素清洗)。在深度学习超分辨率重建中,常见的扩尺度方法有直接上采样,双线性插值,反卷积等等。ESPCN算法中提出了一种超分辨率扩尺度方法,即为子像素卷积方法,该方法后续也被应用在了SRResNet和SRGAN算法中。因此,这里需要先介绍子像素卷积的原理及实现方式。

    采用CNN对特征图进行放大一般会采用deconvolution等方法,这种方法通常会带入过多人工因素,而子像素卷积会大大降低这个风险。因为子像素卷积放大使用的参数是需要学习的,相比那些手工设定的方式,这种通过样本学习的方式其放大性能更加准确。

    具体实现原理如下图所示:

     

    图片

     

    上图很直观得表达了子像素卷积的流程。假设,如果想对原图放大3倍,那么需要生成出3^2=9个同等大小的特征图,也就是通道数扩充了9倍(这个通过普通的卷积操作即可实现)。然后将九个同等大小的特征图拼成一个放大3倍的大图,这就是子像素卷积操作了。

    实现时先将原始特征图通过卷积扩展其通道数,如果是想放大4倍,那么就需要将通道数扩展为原来的16倍。特征图做完卷积后再按照特定的格式进行排列,即可得到一张大图,这就是所谓的像素清洗。通过像素清洗,特征的通道数重新恢复为原来输入时的大小,但是每个特征图的尺寸变大了。这里注意到每个像素的扩展方式由对应的卷积来决定,此时卷积的参数是需要学习的,因此,相比于手工设计的放大方式,这种基于学习的放大方式能够更好的去拟合像素之间的关系。

    SRResNet模型也利用子像素卷积来放大图像,具体的,在图5所示模型后面添加两个子像素卷积模块,每个子像素卷积模块使得输入图像放大2倍,因此这个模型最终可以将图像放大4倍,如下图所示:

     

    图片

     

     

    4.  SRResNet结构剖析

    SRResNet使用深度残差网络来构建超分重建模型,主要包含两部分:深度残差模型、子像素卷积模型。深度残差模型用来进行高效的特征提取,可以在一定程度上削弱图像噪点。子像素卷积模型主要用来放大图像尺寸。完整的SRResNet网络结果如下图所示:

     

    图片

     

     

    上图中,k表示卷积核大小,n表示输出通道数,s表示步长。除了深度残差模块和子像素卷积模块以外,在整个模型输入和输出部分均添加了一个卷积模块用于数据调整和增强。

    需要注意的是,SRResNet模型使用MSE作为目标函数,也就是通过模型还原出来的高分辨率图像与原始高分辨率图像的均方误差,公式如下:

    图片

     

    MSE也是目前大部分超分重建算法采用的目标函数。后面我们会看到,使用该目标函数重建的超分图像并不能很好的符合人眼主观感受,SRGAN算法正是基于此进行的改进。

     

    5. Pytorch实现

    本节将从源码出发,完成SRResNet算法的建模、训练和推理。本文基于深度学习框架Pytorch来完成所有的编码工作,读者在阅读本文代码前需要熟悉Pytorch基本操作命令。

    代码,模型,数据集获取方式

    关注微信公众号 datayx  然后回复 超分 即可获取。

    AI项目体验地址 https://loveai.tech

     

    该工程比较大,主要是包含了用于训练的COCO2014数据集。提供这样一个完整的工程包是为了方便读者只需要下载和解压就可以直接运行,而不需要再去额外的寻找数据集和测试集。代码里也提供了已经训练好的.pth模型文件。

     

     

    训练结果

    训练共用时5小时19分6秒(2块GTX 1080Ti显卡),训练完成后保存的模型共17.8M。下图展示了训练过程中的损失函数变化。可以看到,随着训练的进行,损失函数逐渐开始收敛,在结束的时候基本处在收敛平稳点。

    图片

     

     

    下图展示了训练过程中训练数据超分重建的效果图,依次展示epoch=1、60和130时的效果,每张图像共三行,第一行为低分辨率图像,第二行为当前模型重建出的超分图像,第三行为实际的真实原始清晰图像。可以看到,随着迭代次数的增加,超分还原的效果越来越好,到了第99个epoch的时候还原出来的图像已经大幅削弱了块状噪点的影响,图像更加的平滑和清晰。

     

    图片

     

    图片

    图片

     

     

     

     

    三.  SRGAN算法原理和Pytorch实现

    SRResNet算法是一个单模型算法,从图像输入到图像输出中间通过各个卷积模块的操作完成,整个结构比较清晰。但是SRResNet也有不可避免的缺陷,就是它采用了MSE作为最终的目标函数,而这个MSE是直接通过衡量模型输出和真值的像素差异来计算的,SRGAN算法指出,这种目标函数会使得超分重建出的图像过于平滑,尽管PSNR和SSIM值会比较高,但是重建出来的图像并不能够很好的符合人眼主观感受,丢失了细节纹理信息。下面给出一张图来说明SRResNet算法和SRGAN算法超分重建效果的不同之处:

     

    图片

     

    从图上可以看到,原图因为分辨率较低,产生了模糊并且丢失了大量的细节信息,双线性插值无法有效的去模糊,而SRResNet算法尽管能够一定程度上去除模糊,但是其纹理细节不清晰。最后会发现,SRGAN算法不仅去除了模糊,而且还逼真的重建出了水面上的纹理细节,使得重建的图片视觉上与真值图非常吻合。

    那怎么让模型在纹理细节丢失的情况下“无中生有”的重建出这些信息呢?答案就是生成对抗网络(Generative Adversarial
    Network, GAN)。

    1. 生成对抗网络(GAN)

     GAN的主要灵感来源于博弈论中博弈的思想,应用到深度学习上来说,就是构造两个深度学习模型:生成网络G(Generator)和判别网络D(Discriminator),然后两个模型不断博弈,进而使G生成逼真的图像,而D具有非常强的判断图像真伪的能力。生成网络和判别网络的主要功能是:

    • G是一个生成式的网络,它通过某种特定的网络结构以及目标函数来生成图像;

    • D是一个判别网络,判别一张图片是不是“真实的”,即判断输入的照片是不是由G生成;

    G的作用就是尽可能的生成逼真的图像来迷惑D,使得D判断失败;而D的作用就是尽可能的挖掘G的破绽,来判断图像到底是不是由G生成的“假冒伪劣”。整个过程就好比两个新手下棋博弈,随着对弈盘数的增加,一个迷惑手段越来越高明,而另一个甄别本领也越来越强大,最后,两个新手都变成了高手。这个时候再让G去和其它的人下棋,可以想到G迷惑的本领已经超越了一众普通棋手。

    以上就是GAN算法的原理。运用在图像领域,例如风格迁移,超分重建,图像补全,去噪等,运用GAN可以避免损失函数设计的困难,不管三七二十一,只要有一个基准,直接加上判别器,剩下的就交给对抗训练。相比其他所有模型, GAN可以产生更加清晰,真实的样本。

    2. 感知损失

    为了防止重建图像过度平滑,SRGAN重新定义了损失函数,并将其命名为感知损失(Perceptual loss)。感知损失有两部分构成:

    感知损失=内容损失+对抗损失

    对抗损失就是重建出来的图片被判别器正确判断的损失,这部分内容跟一般的GAN定义相同。SRGAN的一大创新点就是提出了内容损失,SRGAN希望让整个网络在学习的过程中更加关注重建图片和原始图片的语义特征差异,而不是逐个像素之间的颜色亮度差异。以往我们在计算超分重建图像和原始高清图像差异的时候是直接在像素图像上进行比较的,用的MSE准则。SRGAN算法提出者认为这种方式只会过度的让模型去学习这些像素差异,而忽略了重建图像的固有特征。实际的差异计算应该在图像的固有特征上计算。但是这种固有特征怎么表示呢?其实很简单,已经有很多模型专门提出来提取图像固有特征然后进行分类等任务。我们只需要把这些模型中的特征提取模块截取出来,然后去计算重建图像和原始图像的特征,这些特征就是语义特征了,然后再在特征层上进行两幅图像的MSE计算。在众多模型中,SRGAN选用了VGG19模型,其截取的模型命名为truncated_vgg19。所谓模型截断,也就是只提取原始模型的一部分,然后作为一个新的单独的模型进行使用。

    至此重新整理下内容损失计算方式:

    • 通过SRResNet模型重建出高清图像SR;

    • 通过truncated_vgg19模型对原始高清图像H和重建出的高清图像SR分别进行计算,得到两幅图像对应的特征图H_fea和SR_fea;

    • 计算H_fea和SR_fea的MSE值;

    从上述计算方式上看出,原来的计算方式是直接计算H和SR的MSE值,而改用新的内容损失后只需要利用truncated_vgg19模型对图像多作一次推理得到特征图,再在特征图上进行计算。

    3. SRGAN结构剖析

    SRGAN分为两部分:生成器模型(Generator)和判别器模型(Discriminator)。

    生成器模型采用了SRResNet完全一样的结构,只是在计算损失函数时需要利用截断的VGG19模型进行计算。这里注意,截断的VGG19模型只是用来计算图像特征,其本身并不作为一个子模块加在生成器后面。可以将此处的VGG19模型理解为静止的(梯度不更新的),只是用它来计算一下特征而已,其使用与一般的图像滤波器sobel、canny算子等类似。

    判别器模型结构如下所示:

    图片

     

     

     Pytorch实现

    Pytorch实现沿用前面SRResNet的设计框架。由于SRGAN算法的生成器部分采用的是与SRResNet模型完全一样的结构,因此我们在训练时就可以直接使用前面训练好的SRResNet模型对生成器进行初始化以加快整个算法的收敛。

    下图分别展示了整个训练过程中内容损失、生成损失和判别损失的变化曲线。

     

    图片

     

     

    图片

     

    图片

     

     

    从上图中可以看到,相对SRResNet的收敛曲线,SRGAN非常不平稳,判别损失和生成损失此消彼长,这说明判别器和生成器正在做着激烈的对抗。一般来说,生成对抗网络相比普通的网络其训练难度更大,我们无法通过查看loss来说明gan训练得怎么样。目前也有不少文献开始尝试解决整个问题,使得GAN算法的训练进程可以更加明显。

    尽管不能从loss损失函数变化曲线上看出训练进程,我们还可以从每次epoch的训练样本重建效果上进行查看。下图分别显示了epoch=1、25和50 部分训练样本重建效果图,第一行为低分辨率图,第二行为超分重建图,第三行为原始高清图。

     

     

    图片

    图片

    图片

     

     

    从训练图上可以看到,在epoch=50即训练结束的时候,其生成到的超分图已经非常接近原始高清图,重建出的图像视觉感受更加突出,细节较丰富,相比SRResNet的过度平滑,其生成的图像更符合真实场景效果。

    图像超分辨率重建算法,让模糊图像变清晰(附数据和代码)

    原文


    所有代码和数据可以从百度云上进行下载:链接: https://pan.baidu.com/s/1U6ZwxIFQtkskQAWrdx4aOg 提取码: izcs 

    展开全文
  • 基于多层卷积神经网络学习的单帧图像超分辨率重建方法,刘娜,李翠华,构建了一个应用于超分辨率重建的PMJ模型(Perception, Memory, Judgment - Super Resolution,简称 PMJ-SR),在感知阶段对图像进行初步的特征...
  • 基于多层卷积神经网络学习的单帧图像超分辨率重建方法.pdf
  • 针对多帧分辨率图像重建问题,提出了基于稀疏编码和随机森林的超分辨率算法。首先,使用高分辨率训练图像和低分辨率训练图像获取高分辨率字典;然后,使用重叠块缓解块边界的振铃现象,并使用反向投影保证全局一致...
  • 基于聚类的单帧图像超分辨率重建方法.pdf
  • 深度学习单帧图像超分辨率重建研究综述.pdf
  • 基于各向异性MRF建模的多帧图像变分超分辨率重建,邵文泽,韦志辉,本文在MRF-MAP框架下提出一种新的变分分辨率图像重建算法.基于国际上近期报道的双边滤波器,研究设计出一种结构自适应的各向异性�
  • 基于深度学习特征字典的单帧图像超分辨率重建.pdf
  • 根据图像的降质模型,基于凸集投影( POCS)原理,结合降质图像模型,提出一种使用中值滤波 初值处理的高效 POCS单帧图像超分辨率重建方法。计算机仿真结果表明,和双线性内插、经典 POCS方法比较,改进后的该方法重建...
  • 基于学习的单图超分辨率重建算法能获得较好的超分效果,但存在重建图像伪影较为明显的问题。为解决这一问题,提出了一种基于双正则化参数的在线字典学习超分辨率重建算法。在字典学习过程中运用在线字典学习方法(on...
  • 图像超分辨率重建

    2021-04-04 10:57:24
    关于图像超分辨率重建的相关知识点总结(一) ** 1.图像增强与图像超分辨率重建的区别 图像增强能够将清晰度较低、视觉效果较差的图像转变成具有高清晰度的图像图像超分辨率重建在将分辨率较低的图像转化为高分辨...

    关于图像超分辨率重建的相关知识点总结(一)

    **

    1.图像增强与图像超分辨率重建的区别

    图像增强能够将清晰度较低、视觉效果较差的图像转变成具有高清晰度的图像;
    图像超分辨率重建在将分辨率较低的图像转化为高分辨率图像的同时,还能够达到提高图像清晰度的效果。

    2.对超分辨率重建的原理理解描述

    超分辨率重建是一个病态求逆的过程,由于通过已知条件无法重建一幅唯一的图像,因此需要根据各种已知的信息来约束解的空间范围,以最大程度地逼近所求的理想图像。

    3.超分辨率重建的前提

    图像中存在互补的非冗余信息

    4.多帧图像超分辨率重建的一般过程

    首先,在已知的多帧图像序列中选择一幅低分辨率图像作为参考图像帧,对其进行插值,使其放大到与所求高分辨率图像具有相同大小,作为初始估计。该初始估计过程既可以采用基于单帧图像的各种插值算法,也可以采用基于多帧图像的融合算法。然后将其它的低分辨率图像与初始估计进行配准,获得相应的位移矢量。最后根据超分辨率重建算法进行图像重建。

    5.图像超分辨率重建的方法分类

    (1)基于频域的方法
    基本思想:根据离散和连续傅里叶变换间的平移、混叠性质,计算高分辨率图像的傅里叶变换系数,通过傅里叶变换系数得到重建的高分辨率图像。
    优点:原理简单、能够实现数据的并行处理,运算效率较高。
    缺点:仅适用于只有全局位移且图像带宽有限的低分辨率图像序列。难以灵活地加入空域先验知识,不能有效利用数据间的相关性信息。
    (2)基于空域的方法
    在空域定义和求解低分辨率图像序列的前向模型,能够加入先验知识的约束。
    非均匀插值:计算量低、实时性好,在噪声较小时重建效果较好。缺点:过于简单化,在插值阶段引入了误差,使算法的最优性难以保证,重建图像的频域信息为单帧图像的频域信息,且降质模型有限,使用的先验约束较少。
    迭代反投影法(IBP):简单直观、易于理解。利用先验知识较少,难以灵活加入先验知识,重建图像的病态求逆过程会造成IBP方法解的不稳定性而且不唯一。
    POCS:非线性先验约束可以很容易的组合到重建过程中,可扩展性好,但运算量相对较大。
    统计复原方法:利用数学上统计估计方法对多帧图像进行超分辨率重建,主要包括最大后验概率(MAP)估计法和最大似然(ML)估计法。ML只考虑条件概率模型,可以看作是MAP在等概率先验模型中的特例。MAP是根据已知LR图像序列的各种信息,求出后验概率最大的HR重建图像。MAP方法可以有效地利用图像的先验模型,但运算量大,不适合时间要求高的场合。
    (3)基于学习的方法
    该方法适用于LR图像序列的数目较少或者是分辨率提高倍数较大的情形。此时LR图像序列提供的互补性信息相对有限,不足以使超分辨率重建算法恢复出更多的高频信息。

    展开全文
  • 基于图像在过完备字典下的稀疏表示,建立了稀疏性正则化的多帧图像超分辨凸变分模型。模型中的正则项刻画了理想图像的稀疏性先验约束,保真项度量其在退化模型下与观测图像的一致性。基于线性化Bregman方法,将正则项...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,369
精华内容 2,147
关键字:

多帧图像超分辨率重建