【超分辨率】SRCNN论文笔记

论文名称:Image Super-Resolution Using Deep Convolutional Networks
论文下载地址:https://arxiv.org/pdf/1501.00092.pdf
翻译参考:https://blog.csdn.net/PPLLO_o/article/details/90040801


1.论文概述

1.SRCNN算是深度学习在图像超分辨率领域的开山之作。虽然这篇论文年代比较久远了,但是仍然值得一读。(看到论文的作者是何凯明大佬没?)
2.在这篇论文中,作者提出了一种单图像超分辨率的深度学习方法。该方法直接学习低\高分辨率图像之间的端到端映射。SRCNN将低分辨率图像作为输入并输出高分辨率图像。
3.作者提出的方法共同优化了所有的网络层结构(而传统的方法是分别处理每个组件),并且作者提出的深层卷积神经网络是一种轻质的结构,因此速度非常快,但是却有着最先进的修复质量。

2.论文提出的背景

  • 图像的超分辨(Super-Resolution)重构技术是指从一张或多张低分辨率的图像中,重构出相应的高分辨率图像。主要分为两类,一类是单图像超分辨率,即从单张低分辨率图像中重建出高分辨率图像。另一类是多图像超分辨率,即从多张低分辨率图像中重建出高分辨率图像。基于深度学习的SR,主要是基于单张图像的重构方法。
  • 超分辨重构和凸图像去噪、去雨、去模糊等问题是类似的,而这一类问题本身是ill-posed problem。(当一个问题的解不能同时满足以下三个条件时,称该问题为ill-posed problem:1. 解必须存在;2. 解必须唯一; 3. 解能根据初始条件连续变化,不会发生跳变,即解必须稳定)。
  • 对于一张低分辨图像,可能会有多张高分辨图像与之对应,因此在传统方法中通常在求解高分辨率图像时会加一个先验信息进行规范化约束,先学习这个先验信息。而基于深度学习的SR方法,则是通过神经网络直接进行从低分辨图像到高分辨图像的端到端的学习。
  • 在前面已经说过,传统的方法通常是先学习先验信息。为了学习先验信息,最新的方法大多采用基于实例的策略。基于实例的策略又可以分为外部实例和内部实例(这些不是本文的重点,所以不在详细展开)。
  • 其中,基于稀疏编码的方法就是基于外部实例的SR方法之一。作者认为基于稀疏编码的整个流程实际上相当于是深度卷积神经网络。受此启发,作者考虑一种卷积神经网络,它直接学习低分辨率图像和高分辨率图像之间的端到端映射。

3.SRCNN网络结构

作者在本节中先类比了基于稀疏编码方式与卷积神经网络的相似性。

3.1 公式化

  • 首先,进行唯一的预处理,将一张低分辨率图像采用双三次插值将其放大到所需的大小。将插值图像表示为Y,作者希望学习映射F,使F(Y)尽可能与 ground truth (标签) X相似。而这个映射F在概念上由三个操作组成:
    1.补丁提取和表示:该操作从低分辨率图像Y中提取(重叠)补丁,并将每个补丁表示为高维向量。这些高维向量组成一组特征图,特征图的个数等于向量的维数。
    2.非线性映射:将每个高维向量非线性地映射到另一个高维向量上。每个映射向量在概念上都是一个高分辨率补丁的表示。这些向量组成了另一组特征映射。
    3.重建:聚合高维向量以生成最终的高分辨率图像。重建后的图像应该和ground truth X尽量的相似。

如下图是网络的概述,作者并进一步证明了上述操作是如何形成卷积神经网络的。
在这里插入图片描述
注释图二所示,给定低分辨率图像Y,SRCNN的第一卷积层提取一组特征图。第二层将这些特征映非线性地映射到高维补丁表示。最后一层组合空间领域内的预测以产生最终的高分辨率图像F(Y)。

3.1.1补丁提取和表示

图像复原领域中的流行策略是密集地提取补丁,然后通过一组预先训练的方法来表示他们。其实,这种流行的方法就相当于用一组滤波器对图像进行卷积。所以,在形式上,第一层表示为操作 F 1 F_1 F1
F 1 ( Y ) = max ⁡ ( 0 , W 1 ∗ Y + B 1 ) F_1(\mathbf{Y})=\max \left(0, W_1 * \mathbf{Y}+B_1\right) F1(Y)=max(0,W1Y+B1)
注释

  1. W 1 W_1 W1 B 1 B_1 B1分别表示滤波器和偏置," ∗ * "表示卷积操作, W 1 W_1 W1的shape为c* f 1 f_1 f1* f 1 f_1 f1 * n 1 n_1 n1,其中c为输入图像中的通道数, f 1 f_1 f1为滤波器的大小, n 1 n_1 n1为滤波器的数量。
  2. 很明显, W 1 W_1 W1在图像上应用了 n 1 n_1 n1个卷积,每个卷积的内核大小为c* f 1 f_1 f1* f 1 f_1 f1。输出由 n 1 n_1 n1个特征映射组成。 B 1 B_1 B1 n 1 n_1 n1维的向量,其中的每个元素都与一个滤波器相关联(这其实就是在说,其中的每个元素都会和一个滤波器的输出做运算)
  3. 在卷积运算过后,还要经过ReLU激活函数,这在表达式中已经体现出。

3.1.2 非线性映射

第一层为每个补丁提取 n 1 n_1 n1维特征。在第二步的操作中,我们需要将这些 n 1 n_1 n1维向量中的每一个都映射为 n 2 n_2 n2维向量。这其实也可以用卷积运算轻松实现,并且仅需内核大小为1x1的卷积即可。通过1x1的卷积进行运算时,此时的非线性映射仍然是输入图像的补丁(基于1x1卷积运算的特性,这其实仅相当于改变了特征的个数,而特征本身并没有改变,而非线性体现在使用了ReLU激活函数)。第二层的操作 F 2 F_2 F2
F 2 ( Y ) = max ⁡ ( 0 , W 2 ∗ F 1 ( Y ) + B 2 ) F_2(\mathbf{Y})=\max \left(0, W_2 * F_1(\mathbf{Y})+B_2\right) F2(Y)=max(0,W2F1(Y)+B2)
注释

  1. W 2 W_2 W2的大小为 n 1 n_1 n1x f 2 f_2 f2x f 2 f_2 f2 x n 2 n_2 n2 B 2 B_2 B2 n 2 n_2 n2向量。(这里改一下格式,我在使用*符号时,出现无法显示的情况)
  2. 每个 n 2 n_2 n2向量的输出在概念上是将用于重建的高分辨率补丁的表示。
  3. 可以添加更多的层来增加非线性,但是这也会使模型更加的复杂,因此需要更多的时间。

3.1.3 重建

在传统的方法中,经常对预测的重叠高分辨率补丁进行平均以产生最终的完整图像。而平均可以被认为是一组特征映射上的预定义滤波器(其中每个位置都是高分辨率补丁的”扁平“向量形式)。由此推动,作者定义最后的操作以产生最终的高分辨率图像:
F ( Y ) = W 3 ∗ F 2 ( Y ) + B 3 F(\mathbf{Y})= W_3 * F_2(\mathbf{Y})+B_3 F(Y)=W3F2(Y)+B3
注释 W 3 W_3 W3的大小为 n 2 n_2 n2x f 3 f_3 f3x f 3 f_3 f3 x c c c B 3 B_3 B3为c维向量。

将上述的三个操作放在一起并形成了卷积神经网络,如上图的图二所示。在该模型中,将优化所有的滤波器权重和偏置。

3.2稀疏编码和卷积神经网络的关系

作者证明了基于稀疏编码的SR方法,可以看作是一个卷积神经网络。如图3给出了一个例子。
在这里插入图片描述

  • 在基于稀疏编码的方法中,我们考虑从输入图像中提取一个 f 1 f_1 f1 × f 1 f_1 f1的低分辨率补丁。该补丁按其均值减去,然后投影到(低分辨率)字典上。如果字典大小为 n 1 n_1 n1,这相当于在输入图像上应用 n 1 n_1 n1个线性滤波器( f 1 f_1 f1 × f 1 f_1 f1)(平均减法也是线性运算,也可以作为卷积运算的一部分 )。这部分操作为图3的左侧部分。这里就等同于SRCNN的第一层操作。
  • 稀疏编码求解器将迭代处理 n 1 n_1 n1维向量,该求解器的输出为一个 n 2 n_2 n2维向量。在稀疏编码的情况下通常为 n 2 n_2 n2 = n 1 n_1 n1。这些 n 2 n_2 n2维向量是高分辨率补丁的表示。在这个意义上,稀疏编码求解器表现为非线性映射运算符的特殊情况。参见图3的中间部分。然而,稀疏编码求解器不是前馈的,即它是迭代算法。相反,作者的非线性算子是完全前馈的,可以有效地计算。如果我们设置 f 2 f_2 f2= 1,那么我们的非线性算子可以被认为是像素方式的完全连接层。然后将上述 n 2 n_2 n2维向量(在稀疏编码之后)投影到另一个(高分辨率)字典上以产生高分辨率的补丁。这里就等同于SRCNN的第二层操作。
  • 然后对重叠的高分辨率补丁进行平均。如上所述,这相当于 n 2 n_2 n2特征图上的线性卷积。如果用于重建的高分辨率补丁大小为 f 3 x f 3 f_3 x f_3 f3xf3,那么线性滤波器具有大小为 f 3 x f 3 f_3 x f_3 f3xf3的等效空间支持。请参见图3的右侧部分。这里就等同于SRCNN的第三层操作。

上述讨论表明,基于稀疏编码的SR方法可以看作是一种卷积神经网络(具有不同的非线性映射)。

3.3 损失函数

学习端到端的映射F需要评估网络参数 Θ = { W 1 , W 2 , W 3 , B 1 , B 2 , B 3 W_1,W_2, W_3, B_1, B_2, B_3 W1,W2,W3,B1,B2,B3 },通过最小化重建图像 F ( Y ; Θ ) F(\mathbf{Y} ; \Theta) F(Y;Θ)和ground truth高分辨图像X之间的损失来实现,作者采用均方误差作为损失函数:
L ( Θ ) = 1 n ∑ i = 1 n ∥ F ( Y i ; Θ ) − X i ∥ 2 L(\Theta)=\frac{1}{n} \sum_{i=1}^n\left\|F\left(\mathbf{Y}_i ; \Theta\right)-\mathbf{X}_i\right\|^2 L(Θ)=n1i=1nF(Yi;Θ)Xi2
注释:n是训练样本的数量。使用均方误差作为损失函数有利于高PSNR。

4.实验部分

SRCNN网络有如下几点引人注目的特性:1.它的结构在设计时考虑到了简单性,与最先进的基于实例的方法相比,提供了更高精度,如下图所示。2.适度数量的卷积和网络层使作者的网络,即便在CPU上运行也能实现较快的速度。3.通过实验表明,更大的数据集或者更大、更深的模型可以进一步改善网络的恢复质量。
图一

4.1训练数据集

正如众多参考文献中所说,深度学习通常受益于大的数据集。作者使用了一个小型数据集和一个大型数据集进行了对比实验。其中小型数据集由91个图像构成,大型数据集来自ILSVRC 2013 ImageNet检测训练分区的30多万张图像。使用不同数据集的测试收敛曲线如下图所示。结果表明,使用更大和更多样化的图像训练集可以进一步提高SRCNN的性能。
在这里插入图片描述
在之后的实验中,默认使用ImageNet数据集。

4.2模型和性能权衡

参考基本网络设置( f 1 = 9 , f 2 = 1 , f 3 = 5 , n 1 = 64 , n 2 = 32 f_1 = 9, f_2 = 1, f_3 = 5, n_1 = 64, n_2 = 32 f1=9,f2=1,f3=5,n1=64,n2=32),作者逐渐修改其中的一些参数,以研究性能和速度之前的最佳平衡,研究性能和参数之间的关系。

4.2.1卷积的数量(网络的宽度)

通常,如果以运行时间为代价增加网络的宽度,即增加更多的滤波器,可以提升网络的性能。具体而言,网络的默认设置为 n 1 = 64 , n 2 = 32 n_1 = 64, n_2 = 32 n1=64,n2=32,进行两组对照实验:1.一个更大的网络: n 1 = 128 , n 2 = 64 n_1 = 128, n_2 = 64 n1=128,n2=64;2.一个更小的网络: n 1 = 32 , n 2 = 16 n_1 = 32, n_2 = 16 n1=32,n2=16。网络的性能对比如下表所示,显然,增加网络的宽度可以实现优异的性能,但是模型的速度会变慢。
在这里插入图片描述

4.2.2卷积的大小

  • 在本节中,作者探索了网络对于卷积大小的敏感性。在网络的默认设置中,设置卷积的大小为 f 1 = 9 , f 2 = 1 , f 3 = 5 f_1 = 9, f_2 = 1, f_3 = 5 f1=9,f2=1,f3=5,为简单起见,将网络表示为9-1-5。首先,为了与稀疏编码的方法保持一致,固定第二层 f 2 = 1 f_2 = 1 f2=1,然后将网络扩大为11-1-7。实验的结果由32.52dB提升到了32.57dB(PSNR),这表明一个合理的较大的过滤器尺寸可以掌握更丰富的结构信息,进而导致更好的结果。
  • 随后,作者进一步扩大第二层卷积的大小,将网络扩大为:9-3-5和9-5-5。收敛曲线如下图7所示。根据实验表明,使用更大的卷积能够显著提升性能。这一结果也表明,在映射阶段利用邻近信息是有益的。
    在这里插入图片描述

4.2.3 网络层数

  • 最近的研究也表明,适度的增加网络的层数也可以提升性能。作者添加了另一个非线性映射层,设置如下: n 22 = 16 n_{22}=16 n22=16 f 22 = 1 f_{22}=1 f22=1,并进行了三组对照实验,其网络的的设置分别为9-1-1-5,9-3-1-5,9-5-1-5。添加层的初始化方案和学习率都与第二层相同。从下图8中,我们可以观察到:与三层的网络相比,四层的网络收敛更慢。
    在这里插入图片描述
  • 深层结构对超分辨率的有效性发现不像图像分类任务那样明显。更进一步说,作者发现:更深层的网络并不总是造成更好的结果。如下图所示,绿线要明显低于其他曲线,而绿线所代表的网络最深。即便在加深网络的同时扩大卷积的大小也不能带来性能的提升。
    在这里插入图片描述
  • 作者对并不是”越深越好“给出了一定的解释,这可能是由于训练困难造成的。SRCNN网络不包含池化层和全连接层,因此对初始化参数和学习速率非常敏感。当作者深入研究时(例如,4或5层),发现很难设置适当的学习率来保证收敛。即使它收敛,网络也可能陷入一个糟糕的局部极小值,即使有足够的训练时间,学习到的滤波器也缺乏多样性。

4.3与最新方法的比较

  • 在本节中,作者使用的SRCNN模型的参数为 f 1 = 9 , f 2 = 5 , f 3 = 5 , n 1 = 64 , n 2 = 32 f_1 = 9, f_2 = 5, f_3 = 5, n_1 = 64, n_2 = 32 f1=9,f2=5,f3=5,n1=64,n2=32的三层网络,这是基于性能和速度权衡的选择。
  • 与SRCNN模型对比的方法包括:SC、NE+LLE、ANR、A+、KK。
  • 测试的数据集包括:Set5、Set14、BSD200。
  • 评估指标包括:PSNR、SSIM、IFC、NQM、WPSNR、MSSSIM。

如下三表为实验的定量结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注释

  • 作者所提出的SRCNN模型在大多数指标中获得了最高分。
  • 作者同时指出IFC和NQM这两个指标可能不能真实地反映图像质量。因此,不考虑这两个指标,SRCNN在所有方法和缩放因子中获得了最好的性能。

在Set5数据集上的收敛曲线:
在这里插入图片描述
注释:作者推测,SRCNN训练时间越长,结果越好,直至收敛。

如下三图为实验的定性结果,可以观察到,SRCNN比其他方法产生了更尖锐的边缘,在图像中没有任何明显的伪影:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.总结

  • 作者针对单幅图像超分辨率问题,提出了一种新的深度学习方法并证明了传统的基于稀疏编码的SR方法可以被重新表述为一个深度卷积神经网络。

  • 作者所提出的网络为SRCNN,该网络学习低分辨率和高分辨率图像之间的端到端映射,除了优化之外几乎没有额外的预处理/后处理,所有是一种轻质模型。由于结构轻巧,SRCNN比最先进的方法获得了更好的性能。

  • 作者探索更多的过滤器和不同的训练策略,可以进一步获得额外的性能。此外,该结构具有简单和鲁棒性的优点,可以应用于其他低层次的视觉问题,如图像去模糊或同步SR+去噪。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29205.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

版面分析:[ICCV2017] Fast CNN-based document layout analysis

论文链接:https://openaccess.thecvf.com/content_ICCV_2017_workshops/papers/w18/Oliveira_Fast_CNN-Based_Document_ICCV_2017_paper.pdf 自动文档布局分析是认知计算和从文档图像中提取信息的过程中的关键步骤,如特定领域知识数据库创建、图形和图像…

论文笔记之数据增广(1):mixup

mixup:BEYOND EMPIRICAL RISK MINIMIZATION 文章:https://arxiv.org/pdf/1710.09412.pdf 代码:github 作者:张宏毅 mixupBEYOND EMPIRICAL RISK MINIMIZATION 摘要背景 引入贡献 方法 公式理解 实验讨论 摘要 如今大规模深度…

【图像超分辨率重建】——EnhanceNet论文精读笔记

2017-EnhanceNet: Single Image Super-Resolution Through Automated Texture Synthesis(EnhanceNet) 基本信息 作者: Mehdi S. M. Sajjadi Bernhard Scholkopf Michael Hirsch 期刊: ICCV 引用: * 摘要: 单一图像超分辨率是指从…

旷视CVPR2019图卷积多标签图像识别Multi-Label Image Recognition with Graph Convolutional Networks论文详解

背景:GCN刚出来,很多很容易想到的idea会被运用起来,很容易产生一些paper。我们解析此篇论文,了解其中原理,一来看看如何将图卷积应用于目前技术上,二来看到底如何快速的把准确率刷到state of the art以便发…

Hierarchical Modular Network for Video Captioning【论文阅读】

Hierarchical Modular Network for Video Captioning 发表:CVPR 2022代码:HMNidea:现有方法在有监督学习的框架下比较生成句子与标注,没有对语义有详尽的探索。基于此,作者考虑从三个层面来连接视频特征和语义&#x…

CVPR2019超分辨率文章:Meta-SR,任意输入upsample factor的超分辨率网络

论文地址 CVPR2019的新文章,主要是针对以前超分辨率问题中需要固定上采样因子的问题作出的改进。 摘要 随着DNN的发展,超分辨率技术得到了巨大的改进。但是,超分辨率问题中的任意scale factor问题被忽视了很久。前面的很多工作都是把不同s…

GAIDC大会:飞桨邀你来大模型技术与应用论坛

深度学习大规模预训练模型的兴起,以其极强的通用能力和突破性的效果,正推动通用人工智能(AGI)快速发展,并带来了AI研发应用新范式,逐步改变AI生态格局。近期以大规模语言模型为基础的技术工作,展…

人工智能大模型多场景应用原理解析

​强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan 前言 在上篇文章《人工智能大模型之ChatGPT原理解析》中分享了一些大模型之ChatGPT的核心原理后,收到大量读者的反馈,诸如:在了解了核心原理后想进一步了解未来的发展…

3日行程安排

22号 13:30出发到峡山码头坐船--横山岛景区 峡山码头 船费:来回70r 固定开船时间:9:30,12:00,14:00 或者🈵️12人自动开船,最晚4点有船返回 岛上风景 逛山海“小普陀”寺庙普南禅院,被誉为宁…

托福备考经验心得

综述 托福备考准备经验与心得。全部都是个人的反思,带有个人的观点色彩,按需自取即可。首先是几个深刻的经验教训: 对备考的强度要有一个基本的把握,之前一方面在忙别的事情一方面备考感觉自己成效不是特别明显 (可能是我本人能…

初识托福TOEFL口语

对于想要准备托福的童鞋,并不怎么了解托福考试内容的可以看一看,本文主要给大家分享下托福考试中口语部分介绍。 托福考试中总共有4个部分,第一个部分是Reading(阅读),第二个部分是(Listening&…

chatgpt赋能Python-pycharm自动纠错

Pycharm自动纠错:提高开发效率,减少犯错 随着Python语言的流行,Pycharm成为了众多Python工程师的首选IDE之一。Pycharm具有丰富的功能,其中之一就是自动纠错。本文将介绍Pycharm自动纠错的优点和如何正确使用它来提高开发效率&am…

KFC - VME = 50

KFC - VME 50 CalHeightFromPointToPlane.java_spencer_tseng的博客-CSDN博客

kfc 商家地址获取

简单获取商家地址(kfc) 学习源址 基本的查找url,请求方式我也是在上面的链接中学到的,在此就不赘述了,只是重点分享和记录一下自己遇到的一些bug 代码 import requestsurl http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opkeyw…

java实现kfc点餐系统

一、题目分析 1.1、题目要求 正常餐品结算和找零。基本套餐结算和找零。使用优惠劵购买餐品结算和找零。可在一定时间段参与店内活动(自行设计或参考官网信息)。模拟打印小票的功能(写到文件中)。 基本要求:程序设计风…

html网页肯德基设计代码作业,Illustrator设计一幅肯德基广告单页制作教程

给各位Illustrator软件的使用者们来详细的解析分享一下设计一幅肯德基广告单页的制作教程。 教程分享: 首先来看一下最终效果图: 本幅广告页面我们很常见,就是一幅肯德基广告页面。在现实生活中,同学可以细心观察身边的事物&#…

kfc扫描点餐系统java_Java实现KFC点餐系统过程解析

这篇文章主要为大家详细介绍了java实现KFC点餐系统,模拟肯德基快餐店的收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银…

python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址

随着人们生活水平的提高,肯德基这类的快餐消费的十分火爆,成为小朋友和年轻人的最爱,我们到一个地方想要找到肯德基店面,会根据导航获取肯德基地址,那你知道我们也可以使用python爬虫获取KFC地址吗?我们可以…

爬虫爬取国内肯德基门店信息

预期效果 爬取每个城市(300城市)所有的肯德基门店信息,保存到excel中,效果如下: 代码实现 import requests import csv import jsondef getData(page,key):urlhttp://www.kfc.com.cn/kfccda/ashx/GetStoreList.as…

python爬取肯德基KFC全国门店2021-01-11

python爬取肯德基KFC全国门店 改进版 之前,参考两位网友的代码,爬取全国KFC门店,发现有些许问题。在参考网友代码的基础上,进行改进,最终爬取了全国KFC门店。 思路如下: 第一步:通过KFC门网页…