1. SRCNN
论文题目:Learning a Deep Convolutional Network for Image Super-Resolution
存在的问题
现在比较能取得比较好的性能的方法都是基于样本的(example-based)。基于样本的方法有两大类,一类是基于内部相似性的(internal similarity),另一类是基于外部的(external example-based)。其中,稀疏编码(sparse coding)作为基于外部的样本学习的代表,由下面几个步骤组成:
1. 重叠的小块(batch)从图像中密集提取并进行预处理。
2. 小块被编码成低像素的字典(low-resolution dictionary)。
3. 这些字典的稀疏系数被传递到高低像素字典(high-resolution dictionary)。
4. 这些重叠的重建过的小块被聚集或者平均,作为重建的输出。
但是,这些过程中,只有建立字典的过程被优化了,其余的过程都没有经过优化。
解决的问题
在本文中,提出来一种从低像素到高像素的端到端的卷积神经网络(SRCNN, super-resolution convolutional neural network)。在这个过程中,我们没有运用到字典,被隐藏节点(hidden units)代替了。并且,提取,聚集以及平均等操作被卷积操作代替了。所以,我们整个的过程都是被优化的。相比稀疏编码只有字典部分是优化的,我们能取得更好的性能。
所提出的SRCNN具有几个吸引人的性质。首先,它的结构是故意设计的,简单的思想,但与最先进的基于样本的方法相比提供了卓越的精度。第二,使用中等数量的滤波器和层,我们的方法即使在CPU上的实际在线使用也实现了较快的速度。我们的方法比一系列基于样本的方法更快,因为它是完全前馈的,不需要解决任何使用上的优化问题。第三,实验表明,当(i)可用数据集较大时,和/或(ii)使用较大的模型时,网络的恢复质量可以进一步改善。相反,更大的数据集/模型可能对现有的基于样本(example-based)的方法是一个挑战。
论文要点
1. 我们首先使用双三次插值将其升级到所需的大小,这是我们执行的唯一预处理。即神经网络的输入和输出的大小是相同的。但是我们扔将输入称为低像素图片,因为其由插值得来。
2. 神经网络的重点是学习一个映射F,它在概念上由三个操作组成:
(1) 小块提取和表示:该操作从低分辨率图像Y提取(重叠)小块,并将每个小块表示为高维向量。 这些向量包括一组特征映射,其数量等于向量的维度。
图像恢复中的流行策略是密集地提取小块,然后通过一组预训练的基底(例如PCA,DCT,Haar等)来表示它们。这等效于通过一组滤波器对图像进行卷积,每个滤波器是一个基础。在我们的公式中,我们涉及这些基础的优化到网络的优化。正式地,我们的第一层被表示为操作F1:
其中,W1和B1分别表示滤波器和偏差。这里W1的大小是cxf1xf1xn1,其中c是输入图像的通道数量,f1是滤波器的空间尺寸,n1是滤波器数量。直观地,W1在图像上应用n1个卷积,并且每个卷积有一个核大小。输出由n1个特征图组成。B1是n1维向量,其每个元素与滤波器相关联。我们对滤波器响应应用修正线性单位。
(2) 非线性映射:该操作将每个高维向量非线性地映射到另一高维向量。每个映射向量在概念上是高分辨率小块的表示。这些向量包括另一组特征映射。
第一层为每个小块提取n1维特征。在第二操作中,我们将这些n1维向量中的每一个映射成n2维向量。这等效于应用具有简单空间支持1×1的n2个滤波器。第二层的操作是
这里,W2的大小为n1×1×1×n2,B2为n2维。每个输出n2维向量在概念上是将用于重建的高分辨率小块的表示。可以添加更多的卷积层(其空间支持是1×1)以增加非线性。但这会显着增加模型的复杂性,因此需要更多的训练数据和时间。在本文中,我们选择在此操作中使用单个卷积层,因为它已经提供了令人满意的质量。
(3) 重建:该操作聚集上述高分辨率小块片表示以产生最终的高分辨率图像。该图像预期与X相似。在传统方法中,预测的重叠高分辨率小块经常被平均以产生最终的完整图像。平均可以被认为是在一组特征图上的预定义滤波器(其中每个位置是高分辨率小块的“平展”矢量形式)。由此,我们定义卷积层以产生最终高分辨率图像:
这里W3大小为n2×f3×f3×c,B3是一个c维向量。
如果高分辨率小块的表示在图像域中(即,我们可以简单地重构每个表示以形成小块),我们期望滤波器像平均滤波器那样工作;如果高分辨率小块的表示在某些其他域中(例如,就某些基底而言的系数),则我们期望W3的行为像首先将系数投影到图像域上,然后进行平均。在任一方式中,W3是一组线性滤波器。
有趣的是,虽然上述三种操作是由不同的直觉驱动的,但它们都导致与卷积层相同的形式。我们把所有三个操作放在一起,形成一个卷积神经网络。在这个模型中,所有的过滤权重和偏差都要优化。
3. 与基于稀疏编码的方法的关系
在基于稀疏编码的方法中,让我们考虑从输入图像中提取f1×f1低分辨率小块。该小块被其平均值减去,然后被投影到(低分辨率)字典上。如果字典大小是n1,这等价于在输入图像上应用n1个(f1xf1)线性滤波器(平均减法也是线性运算,所以可以被吸收)。
然后将稀疏编码解算器应用于投影的n1系数。解码器的输出是n2个系数,并且在稀疏编码的情况下通常是n2=n1。这些n2系数是高分辨率小块的表示。在这个意义上,稀疏编码解码器表现为非线性映射算子。然而,稀疏编码解码器不是前馈的,即,它是迭代算法。相反,我们的非线性算子是完全前馈的,可以有效地计算。我们的非线性算子可以被认为是像素级完全连接层。
然后将上述n2个系数(在稀疏编码之后)投影到另一(高分辨率)字典上以产生高分辨率小块。然后将重叠的高分辨率小块进行平均。如上所述,这等价于n2个特征图上的线性卷积。如果用于重建的高分辨率小块具有大小f3×f3,则线性滤波器具有大小f3×f3的等效空间支持。
上述讨论表明基于稀疏编码的SR方法可以被视为一种卷积神经网络(具有不同的非线性映射)。但是在基于稀疏编码的SR方法的优化中没有考虑所有的操作。相反,在我们的卷积神经网络中,低分辨率字典,高分辨率字典,非线性映射,以及平均减法和平均,都涉及要优化的滤波器。因此,我们的方法优化了由所有操作组成的端到端映射。
上面的类比也可以帮助我们设计超参数。例如,我们可以将最后一层的滤波器大小设置为小于第一层的滤波器大小,因此我们更依赖于高分辨率小块的中心部分(到极端,如果f3=1,则使用没有平均的中心像素)。我们也可以设置n2。
4. 损失函数:MSE(均方误差)。
2. SRCNN+
论文题目:Image Super-Resolution Using Deep Convolutional Networks
存在的问题
对SRCNN进行优化。
解决的问题
1. 运用更大尺寸的滤波器在非线性映射层和添加了更多非线性映射层,尝试了更深的结构。
2. 我们扩展了SRCNN到三色道(three color channels),实验表明,比起用单色道(single channel),性能有提升。
3. 我们用了更大的数据库(200张)。
论文要点
基本和上篇一模一样。
3. CSCN(Cascade sparse coding based network)
论文题目:Deep Networks for Image Super-Resolution with Sparse Prior
解决的问题
在传统的稀疏编码上加上深度学习的几个思想。
(1) 在LISTA的基础上,完善了前向神经网络,它的每一层和稀疏编码的处理流都是一一对应的。
(2) 在对每一层的物理意义理解的初上,我们能初始化更有原则性地对参数进行初始化。
(3) 之前的神经网络只能对特定放大率的图片使用,对于不同的方法率要重新训练不同的网络。这篇论文的提出了瀑布式的多SCNs以达到对任意放大率的都可以实现的效果。
论文要点
1. 输入是低分辨率图片经过双三次插值得到的高分辨率大小的低分辨率图片。
2. 模型结构:
(1) 输入图片经过一个卷基层,这层是对每一个LR patch提取特征。
(2) 每个LR patch被输入到LISTA网络中,在有限的循环阶段k后,得到稀疏编码。LISTA的每个阶段由两个线性层和一个非线性层组成。
(3) 最后一层里,所有被恢复的patch都被放到HR对应的位置。这通过卷积过滤器实现。
3. 代价函数: MSE
4. SCN的好处:
(1) 之前的神经网络的参数优化,有的是固定一些参数不变,再去调其他的参数,或者有的事事人为的设定的,但在SCN中,所有的参数都是一起被优化的。
(2) 和之前的CNN的网络相同的地方是在第一层都用了卷积层进行patch提取和重建,不同的地方是我们用了LISTA子网络进行稀疏表达。
5. 网络瀑布:
为了解决为每个放大率都进行训练一个模型,我们采用了瀑布式的设计。不断地重复一样的放大率在一个图片上,直至达到想要的放大率。比如想得到8倍的放大率图片,将低分辨率先扩大2倍,然后再扩大2倍,再扩大2倍。而不是直接扩大8倍。并且实验表明,对于慢慢地扩大放大率得到的效果比一次性扩大8倍的效果好得多。
所以CSCN同样是一个深度神经网络,每个SCN的输出,在被双三次插值后都作为下一个SCN的输入。
4. VDSR
论文题目:Accurate Image Super-Resolution Using Very Deep Convolutional Networks
存在的问题
尽管SRCNN在解决超分辨率的问题开了先河,但是依然在三个方面存在着问题:
(1) SRCNN依赖于小图片块的内容;
(2) 收敛速度太慢;
(3) 网络只能适用于单一的放大率。
解决的问题
本文提出了VDSR来解决上面的三个问题。
(1) 内容:这个模型利用了大的图片区域。对于大的放大率来说,小的图片块的信息提供的细节常常不足以恢复图片。使用的方法是用一个很深的网络,并且使用大的感受野以利用大的图片块内容。
(2) 收敛速度:利用了残差学习CNN和很大的学习速率。
(3) 放大因子:训练一个适用于多放大因子的模型。
论文的要点
1. 网络结构
(1) 第一层,提取特征。 最后一层用于图片重建,由3x3x64的单一滤波器组成。中间的d个层,由3x3x64的滤波器组成。
(2) 低分辨率插值后作为输入。
2. 对于靠近边缘的像素,center-surround的关系不能很好的利用。为了解决这个问题,我们用了zero-padding的方法。
3. 残差学习。我们发现残差网络收敛的更快,并且取得更好的表现。
4. 学习速率是0.1的时候,比学习速率是0.01和0.001都要好。
5. Adjustable gradient clipping: 将梯度限制在一个范围内[-x/r,x/r]。r是当前学习速率。
5. DRCN
论文题目:Deeply-Recursive Convolutional Network for Image Super-Resolution
存在的问题
在许多神经网络中, 为了增加感受野,通常的做法是增加神经网络的深度。要么在卷积层用大于1x1的滤波器,要么是用pooling层减少中间表现层的维度。但这两种方法都有缺点,卷积层会用到更多的参数,池化层会丢弃掉像素级别的信息。
此外,增加神经网络的深度会带来更多的参数,这就会引起两个问题,一个是过拟合,另一个是模型变得巨大以至于不能被存储和恢复。
解决的问题
为了解决上面提出的问题,本文提出了一种深度循环卷积神经网络(DRCN),旨在重复地利用相同的卷积层。这样,参数的数量就不会增加,尽管重复执行了许多次。此外,我们采用了比SRCNN更大的感受野(41x41)。但是,如果用传统的随机梯度下降的办法,会很难收敛,因为这个是由于梯度消失/爆炸引起的。
为了解决这个问题,本神经网络用了两种方法解决这个问题。一个是recursive-supervision,另一个是skip-connection。
论文要点
1. 网络模型:
这个模型由三个子网络组成:嵌入层,推断层和重建层。
嵌入层(embedding net): 接收输入层,然后用一系列的feature maps来表示他。
推断层(inference net): 该层解决超分辨率任务的主要成分。通过单一的循环层来分析图片的大片区域。
重建层(reconstruction net): 将推断层的输出进行重建,以恢复原始的图像。
2. 迭代监督(Recursive-supervision):
为了解决梯度和最优迭代次数的问题,用了一个改进型模型。为了减轻梯度爆炸/消失的影响,我们监督所有的迭代。我们用了所有的D个中间预测去计算最终的输出。所有的预测在测试的时候都被平均。
一个相似但是不同概念的监督中间层被Lee层提出。但是有两个不同,他们为每个隐藏层都用了一个特殊的分类器,每个分类器都需要新的参数。如果我们用了他们的想法,那么我们就需要D个不同的重建层。但这个和我们的初衷是违背的,因为这样的话又增加了许多参数。还有个不同的是,Lee他们在test的时候,是丢掉了中间的分类器的。只在训练模型的时候用到。但是无论如何,这种借用了他们思想的ensemble模型提高了我们的性能。
这种方法有两个好处:
(1) 如果监督信号直接从损失层到之前的迭代层,方向传播就只会通过很少的层数。这样把所有的梯度方向传播的结果加起来会得到一个相对平滑的结果。这样能减轻了梯度消失/爆炸的问题。
(2) 这个方法对选择最优迭代次数也是有好处的因为我们的监督能利用中间层的输出。如果迭代太深,那么我们期望后面预测的参数会很小,反之亦然。通过观察参数的变化,我们能推断出迭代次数是否最优。
如果参数不允许被共享,那么我们也提出了CNN的扩展版本,但是这个模型参数会成指数级增长。
3. 跨越连接(skip-connection):
对于SR问题,输入和输出具有高度的关联性。我们增加了一个跨越层,将输入图片直接喂入重建层。这样做有两个好处:
(1) 在迭代期间,存储输入信号的网络能力被保留了下来。
(2) 输入信号的准确拷贝将在预测中被直接利用。
虽然这个方法简单,但是十分有效。
4. 训练
目标函数: 最小二乘法
评价指标: PSNR
5. 效果