超分辨率技术(Super Resolution,SR)是从观测到的低分辨率图像重建出相应的高分辨率图像。应用可以从两个方面看待,一是提升设备的测量精度,力求恢复真实可靠的细节部分,如医学图像上超分辨率重建,卫星图像重建和监控设备人脸重建等;二是追求整体的视觉效果,细节要求不高,如低分辨率视频恢复,模糊相片恢复等.
DL之前的SR
从信号处理角度看,低分辨率(Low Resolution)图像是无法恢复成高分辨率(High Resolution)图像,由香农采样定理可知,主要因为丢失了图像的高频信息。
1 | 香农采样定理,又称奈奎斯特采样定理,是信息论,特别是通讯与信号处理学科中的一个重要基本结论。1924年奈奎斯特(Nyquist)就推导出在理想低通信道的最高大码元传输速率的公式:理想低通信道的最高大码元传输速率=2W*log2N 。(其中W是理想低通信道的带宽,N是电平强度) |
最简单的方法是梯度锐化和拉普拉斯锐化,但效果聊胜于无。
这里说两种典型的SR算法,左图,找到图片中相似的大尺寸区域,然后利用进行SR,下面这个动图就是这样,这种方法缺点很明显。
右图,对各种边缘信息建立数据库,然后匹配,这个方法也很明显,鲁棒性不够。
DL时代的SR
随着硬件计算性能的提升,人工智能进入了DL时代,SR也相应出现了新的使用DL的方法。
标准介绍
- PSNR(Peak Signal to Noise Ratio,峰值信噪比)
$MSE=\frac{1}{H * W}\sum_{i=1}^h\sum_{j=1}^w(X(i,j)-Y(i,j))^2$
$PSNR=10log_{10}(\frac{(2^n-1)^2}{MSE})$
MSE表示当前图像X和参考图像Y的均方误差(Mean Square Error),H、W分别为图像的高度和宽度;n为每像素的比特数,一般取8,即像素灰阶数为256. PSNR的单位是dB,数值越大表示失真越小。虽然PSNR和人眼的视觉特性并不完全一致,但是一般认为PSNR在38以上的时候,人眼就无法区分两幅图片了。
SSIM(structural similarity, 结构相似性),也是一种全参考的图像质量评价指标,它分别从亮度、对比度、结构三方面度量图像相似性。
SRCNN
先使用双三次(bicubic)插值放大到目标大小,然后三层卷积做非线性映射,输出结果。三层卷积核大小分别为9*9,1*1,5*5,输出channel分别是64,32,3.
SC is outperforms the sparse-coding-based method,是[Image Super-Resolution via Sparse Representation](http://101.96.10.64/www.columbia.edu/~jw2966/papers/YWHM10-TIP.pdf)这篇论文是黄煦涛和马毅小组的Jianchao Yang的作品。这篇论文提出的算法,在形式上和后文这些DL算法已经非常类似了,也是基于HR和LR配对的有监督训练。区别只在于这篇论文使用矩阵的稀疏表示来拟合SR函数,而DL算法使用神经网络拟合SR函数。前者是线性变换,而后者是非线性变换。
FSRCNN
SRCNN加速版本,主要改进有三点:
- 最后一层使用反卷积放大图片,不用bicubic
- 改变特征维数,使用更小的卷积核更多的卷积层
- 共享卷积层,放大不同的倍数只需改变反卷积层fine-tuning最后的反卷积层
FSPCN
也是基于SRCNN,和FSRCNN不同的是在最后层不是反卷积来放大,而是使用多个通道融合,R^2个channel,每个feature map和原图大小一样,然后在R^2个channel相同位置合并成一个R*R的子区域,这样放大为 H*R X H*R
VDSR
作者认为输入的低分辨率图像和输出的高分辨率图像在很大程度上是相似的,也就是指低分辨率图像携带的低频信息与高分辨率图像的低频信息相近,训练时带上这部分会多花费大量的时间,实际上我们只需要学习高分辨率图像和低分辨率图像之间的高频部分残差即可。残差网络结构的思想特别适合用来解决超分辨率问题,可以说影响了之后的深度学习超分辨率方法。
改进个人认为有两点点:
- 使用了ResNet的残差结构,使得网络可以比较深(20层)
- 将不同倍数的图像放到一起训练,使得鲁棒性能比较好
文中使用了自适应梯度裁剪,使得训练收敛加快
看起来提升还是比较明显的,收敛速度提升也很明显
DRCN
主要想法是RNN和Skip connection,原始图像插值输出后进入Embedding network,相当于提取特征,然后进入RNN,每一层都输出,最后合并输出。
可以看出Skip connection类似残差
RED
分为encoder和decoder,感觉像Unet
DRRN
这个是结合了之前的结构,感觉好像 Unet…
LapSRN
本文的主要思想是一点一点的放大,不要一口吃成个胖子,可能撑死,细嚼慢咽。细数前面的集中方法,无论先放大,还是最后放大,都存在一个问题,就是一步到位。具体作者提出存在的三个问题:
- 先上采样的存在计算开销浪费,反卷积和亚像素存在性能较差的问题
- 使用 l2 loss,导致预测模糊
- 一步到位的放大,对不同的放大倍数不能很好的适应
LapSRN通过逐步上采样,一级一级预测残差的方式,在做高倍上采样时,也能得到中间低倍上采样结果的输出。由于尺寸是逐步放大,不是所有的操作都在大尺寸特征上进行,因此速度比较快。LapSRN设计了损失函数来训练网络,对每一级的结果都进行监督,因此取得了不错的结果。
SRDenseNet
这个听名字看上图的模型可以看出来,这就是DenseNet版本的SR啊。作者在三种情况下做了对比,结果猜都可以猜出来
不同模型对比,不知道放大多少倍…
SRGAN
- 论文[Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network], CVPR2017
- 代码
利用GAN做SR,一个生成网络,一个测试网络。只是这里的Loss有点不一样,作者说使用普通的均方差loss虽然峰值信噪比不错,但是感官上并不好,作者了其它的loss,感官效果提升,但是细节有些会丢失。
EDSR
EDSR是NTIRE2017超分辨率挑战赛上获得冠军的方案。
作者认为在SR任务中使用Resnet结构的话,不需要使用BN层。作者文章中说,原始的ResNet最一开始是被提出来解决高层的计算机视觉问题,比如分类和检测,直接把ResNet的结构应用到像超分辨率这样的低层计算机视觉问题,显然不是最优的。去掉BN后,节省了内存资源。
- EDSR
- MDSR
DBSR
- 论文Deep Back-Projection Networks For Super-Resolution,CVPR2018
- 代码
Winner (1st) of NTIRE2018 Competition (Track: x8 Bicubic Downsampling).从上图可以看出来是怎么搞得,不断的上采样,再卷积下采样,然后这样重复来回搞。想想参数应该不少。
作者把深度学习在超分辨率中分四种类型:
1)Predefined upsampling:这种方法通常是先在网络之外将原始的LR(Low Resolution)的图像通过插值法扩大到MR级别的图像,再将MR图像输入网络。这种方法是深度学习方法在超分辨率领域的开山之作SRCNN所采用的,SRCNN先将图像插值扩大,在通过三个简单的卷积层将其映射到HR图像上。之后使用同样方法的网络通常是通过残差结构(VDSR、DRCN)或者递归结构(DRCN)来获得更好的非线性映射的。然而,这种方法有一个问题,就是有可能在插值过程中向图像中加入新的噪声。
2)Single upsampling:FSRCNN和ESPCN都属于这个类型,输入他们的都是原始的LR图像,通过非线性映射之后,在网络的最后再重组成为HR图像(FSRCNN是反卷积,ESPCN是亚像素卷积层)。这种方法在实践中非常的快,但是因为网络容量有限,这两个网络都不能学习到太过复杂的映射。NTIRE2017的冠军EDSR也是这样的方法,但是因为其参数过多,需要过长的训练时间,所以为后续实现更少参数的网络留下了空间。
3)Progressive upsampling:代表就是LapSRN,这种方法在一个前向传播的网络中逐步的放大图像的分辨率,我们可以将其简化成为是几个stack在一起的升采样网络,因为这种方法仅仅依赖于有限的低分辨率信息,所以很轻易的就被深度较浅的DBPN打败了。
4)Iterative up and downsampling:也就是这篇文章所提出的方法,作者关注在不同的深度提高SR的采样率,并且将重建的损失分布到各个阶段去,这种方法通过学习多个升降采样算子来使得网络能在生成更深的特征的时候保留更多的HR信息。
作者称以前的方法没有充分的学习到图片中的信息,这样来回上采样下采样可以充分学习。
当让网络也用到了DenseNet的结构
看来参数量还好
看起来很厉害的样子
参考: