Papers | 超分辨 + 深度学习(未完待续)
1. SRCNN
Home page
http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.htmlECCV 2014,TPAMI 2015,2018年被引超1000次。
1.1. Contribution
end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 )。
指出了超分辨方向上传统方法( sparse-coding-based SR methods )与深度学习方法的关系,insightful 。
SRCNN网络非常简单,PSNR、SSIM 等却有小幅提升(< 1dB)。
应用(测试)时是完全 feed-forward ,因此网络速度比传统方法快。
1.2. Inspiration
SR 的本质 & 可行性
This problem (SR) is inherently ill-posed since a multiplicity of solutions exist for any given low-resolution pixel.
Such a problem is typically mitigated by constraining the solution space by strong prior information.
用样本训练 CNN ,就是在利用先验知识。CNN 为什么比传统方法更简单还更好用
传统方法中,各个组件是分离的,比如图像预处理和字典学习。
传统方法着重于学习和优化 dictionaries ,但对其他部分鲜有优化。
但 SRCNN 是一个 LR 和 HR 之间的端到端网络。
其训练过程中的优化是一体的,比如,其卷积层负责 patch extraction and aggregation ,隐藏层充当 dictionaries ,统一被优化。
因此,我们只需要极少的 pre/post-processing ,同时能实现对整体框架的全面优化。特征表示方法的不同
过去,我们用 a set of pre-trained bases such as PCA, DCT, Haar 来表示 patches 。
现在,我们用不同的卷积核,就实现了多样化的表示。更简单:由于 overlapping ,因此卷积使用的像素信息比简单的字典映射更多。
1.3. Network
1.3.1. Pre-processing
将低分辨率的图片,通过 Bicubic interpolation 得到 \(\mathbf Y\) 。
注意我们仍然称之为 low-resolution image 。
1.3.2. Patch extraction and representation
从 \(\mathbf Y\) 提取出 overlapping patches ,每一个 patch 都代表一个 high-dimensional vector 。
这些向量共同组成 a set of feature maps 。
每一个 vector 的维数,既是总特征数,也是 feature map 的总数。
\[
F_1(\mathbf Y) = max(0, W_1 * \mathbf Y + B_1)
\]
1.3.3. Non-linear mapping
通过一个非线性变换,由原 high-dimensional vector 变换到另一个 high-dimensional vector 。
该 high-dimensional vector 又组成了一个 set of feature maps ,在概念上代表着 high-resolution patch 。
\[
F_2(\mathbf Y) = max(0, W_2 * F_1(\mathbf Y) + B_2)
\]
1.3.4. Reconstruction
生成接近 ground truth: \(\mathbf X\) 的 output 。
过去常用取平均的方法。实际上,平均也是一个特殊的卷积。
因此我们不妨直接用一个卷积。
此时,输出patch不再是简单的平均,还可以是频域上的平均等(取决于 high-dimensional vector 的性质)。
\[
F_3(\mathbf Y) = W_2 * F_2(\mathbf Y) + B_3
\]
注意不要再非线性处理。
1.4. Story
- 深度CNN日益受欢迎的3大诱因:
- 更强大的GPU;
- 更多的数据(如ImageNet);
- ReLU的提出,加快收敛的同时保持良好质量。
- CNN此前被用于 natural image denoising and removing noisy patterns (dirt/rain) ,用于 SR 是头一回。
这就是讲好故事的重要性,无非是映射 pairs 不同。 - auto-encoder 也曾被用于超分辨网络,但仍没有摆脱 separated framework 的弊端。
1.5. Further Learning
Traditional sparse-coding-based SR methods.
从低分辨率图像到 \(\mathbf Y\) 采用的是 Bicubic interpolation ,实际上也是卷积。但为什么不当作卷积层呢?
文中解释,因为输出比输入还大,为了有效利用 well-optimized implementations sucha as cuda-convnet ,就暂且不当作一个“层”。
事实上,当输出大于输入时,CNN的效率会很低。可以继续往下学,后面就会逐渐体会。
2. FSRCNN
Home page
http://mmlab.ie.cuhk.edu.hk/projects/FSRCNN.html2016 ECCV ,2018年被引超250次。
2.1. 亮点
将单个 wide mapping layer 分解成多个 layers with fixed filter size \(3 \times 3\) 。
复杂的非线性映射是最消耗运算资源的。减小尺寸,加大层数,极大提高了运算速度。取消了 SRCNN 前端的双三次插值,将 LR 直接输入网络。
进一步减小了参数数量,进而提高了运算速度。- 在 FSRCNN 末端采用反卷积层,而不是简单的插值升采样。
- 反卷积层从 high-dimensional feature maps 和真实 HR 中学习多个卷积核,实现了超越一般插值的恢复效果。
- 由于放在网络末端,因此网络运算速度与 HR 尺寸无关。
- HR 尺寸可调,并且只需要重新训练利用特征的反卷积层,而不需要重新训练提取特征的CNN网络。
用PReLU替换ReLU,可以避免由 0 梯度带来的 dead features 现象。实验证明它更稳定。
2.2. Improvement
- 与SRCNN相比,速度提升了17到40倍(小型FSRCNN),在一般的CPU上实现了实时性。
原SRCNN在3倍 upsample \(240 \times 240\) 图像时,帧率只有1.32。但实时性要求24fps,差17倍。 - 恢复质量不减反升。
2.3. Analysis
限制原SRCNN运算速度的两大主谋:
升采样。设升采样因子为 \(n\) ,则运算时间增长至 \(n^2\) 倍。
非线性映射。该层越大,恢复质量越高,但时间越长。
对应的解决方法:
取消网络前端的升采样,在网络末端采用反卷积 deconvolution 。
此时,由于输入网络的是 LR ,因此运算时间只和 LR 图像的尺寸成比例。把单个大的非线性映射层,分解为多个小的固定大小的滤波器。
2.4. Network
整体形状像一个前端小,后端大的沙漏:
我们着重理解一下最后的反卷积。
先回顾卷积:
假设输出维数为 \(d\) ,则对于每一维,都有一个特定的卷积核(相当于一个匹配模板)。
同一个卷积核,要对输入的每一个通道的每一个patch进行相同系数的卷积运算。
这样,输出的每一维都是一个 feature map ,组成一个有厚度的 feature maps 。
而反卷积恰好相反。
对于输入的 feature maps ,网络需要找到最佳的卷积核,使得输出经卷积运算后逼近 feature maps 。
前面的CNN,在大小固定,计算量受限的情况下,尽全力让 feature maps 承载足够的信息;
后面的反卷积层,即根据 \(d\) 种不同的特征,尽全力恢复 HR 图像。
由于每一个 map 的含义都不尽相同,因此如果将反卷积替换成一般的插值,PSNR将剧烈下降。
这是实验得到的反卷积图像,显然都学到了不同的特征:
反卷积还有一个好处:
当我们希望输出不同大小的 HR 图片时,我们只需要对该层进行调整,而不需要重新训练前面的CNN网络。
实验结果表明,PSNR基本没有变化。
理论解释是,前面的CNN只起到抽象特征的作用,如何从有限的特征恢复图像,基本上属于反卷积的任务。
2.5. Inspiration
通过减小单个层的体积,可以有效减小运算复杂度。
后面的 expanding 的表面作用是辅助升采样,本质作用是提高恢复质量(提高学习复杂度)。
实验证明,如果取消这一环节,PSNR会有0.3dB左右的下降。
理解:把一个相对 low-dimensional 的 feature maps 直接交给反卷积层学习,是困难的。
2.6. Further Learning
De-convolution.
下一节介绍。CNNs acceleration.
PReLU.
3. ESPCN
2016 CVPR ,2018年引用超380次。
TensorFlow代码:https://github.com/Tetrachrome/subpixel & https://github.com/drakelevy/ESPCN-TensorFlow
3.1. Similarity & Network
作者的观点与FSRCNN有许多相似之处。在论文中提到:
Additionally, as noted by Dong et al. [6], there are no efficient implementations of a convolution layer whose output size is larger than the input size and well-optimized implementations such as convnet [21] do not trivially allow such behaviour.
因此,本文作者同样没有将 upscaling 放到CNN网络之中,并且也是在网络的最末端设置了一个额外的 upscaling 层: sub-pixel convolution layer ,以增强网络的实时性。
总而言之,卷积层不能在 HR space 上运作,否则计算成本就会很高。
3.2. The Drawback of Transposed Convolution ( Deconvolution )
本文也提到了转置卷积操作,同时指出:
However, any reduction (summing) after convolution is expensive.
关于转置卷积及其低效的解释,有以下推荐参考(点击超链接):
图解:
- 在原像素点周围补零;
- 将 kernel 转置(为什么?首先卷积可以看作一个稀疏矩阵乘法,则为了从相同尺寸的输出得到相同尺寸的“输入”,乘法矩阵就要转置);
- 然后进行正常卷积即可。
注意,我们是将kernel转置而不是求逆,因此转置卷积准确来说不应该称为逆卷积。
转置卷积可以用于 feature maps 可视化,但在运算速度上存在致命缺点:
- 首先,卷积是 highly parallelizable 的,原因在于卷积核对于某一维特征而言是固定的,因此可以并行计算各个patch。相比之下,转置卷积却很复杂。
- We should add zero values to the upscale the image, that have to be later filled in with meaningful values.
- Maybe even worse, these zero values have no gradient information that can be backpropagated through.
3.3. Efficient Sub-pixel Convolution Layer
为此,作者提出了新的 upscaling 结构:Efficient subpixel convolution layer 。
虽然名字带“卷积”,但具体实现居然只是一个简简单单的“PS”(重排)!!
重排方式见 Network 。其中要求通道数为 \(r^2\) ,这样才能实现重排。
为什么高效?
- CNN仍然是在 LR space 上进行。
- upscaling 是简单的重排,没有卷积运算。
为什么精度不降反升?
尽管重排是线性的,但前面的CNN是非线性的。
CNN的训练不再注重于简单的特征提取,而是注重于组合规则下的特征提取,并且速度更快的同时层数还能更多。
3.4. 亮点
A key assumption that underlies many SR techniques is that much of the high-frequency data is redundant and thus can be accurately reconstructed from low frequency components.
4. VDSR
Home page (MatConvent)
https://cv.snu.ac.kr/research/VDSR/2016 CVPR ,2018年引用超730次。
TensorFlow代码:https://github.com/Jongchan/tensorflow-vdsr
学习这个网络前,要了解残差学习网络:我的另一篇博客
关于 SR 问题,作者指出3大限制因素:
It relies on the context of small image regions;
Training converges too slowly;
The network only works for a single scale.
为此,本文提出以下措施:
不再只从 LR 的小 patch 中获取信息,而利用 very big image regions ;
不再用重排和转置卷积,而是和 SRCNN 一样用插值法,一开始就得到同输出尺寸的图片。采用残差学习;
作者认为,LR 图片中的低频信息被保留到 HR 图片中,需要重构的只有高频信息。
因此,低频映射没有必要学习,而是直接迁移即可。这是残差学习的一个比较好的解释。采用较高的学习率( SRCNN 的 \(10^4\) 倍)以及 Adjustable gradient clipping ;
让梯度保持在一个较好的范围内。Scale factor 可调,可以包含分数。比如需要缩放图片观看时很有用。
不需要重复训练网络,网络适应性非常好。
方法:训练集中包含多种尺寸的图片,同时训练。
其他特别之处:
由于深度的贡献非常明显,因此采用20层网络结构。
虽然滤波器尺寸固定为 \(3 \times 3\) ,但感受野仍然很大。在图片边缘,由于卷积不能很好地执行,因此传统方法往往会裁掉边缘区域再输出。
而 VDSR 在每一层卷积前都填充 0 ,包括最后的输出也填充0。
这样做的效果非常好,图像边缘也被很好的预测了。
当图像信息被充分挖掘后,0 位置再填上有意义的数。
Papers | 超分辨 + 深度学习(未完待续)的更多相关文章
- springcloud-netflix组件学习-未完待续!!!
SpringCloud学习 Spring Cloud是什么鬼? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现 ...
- 浅析Oracle PL/SQL 学习--未完待续
这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...
- 【tomcat】sessionId学习(未完待续)
这里主要研究tomcat中session的管理方式以及sessionId的原理,下文将研究sessionid存到redis中以及基于redis实现session共享. 平时也就是了解session是基 ...
- 可持久化Treap(fhq Treap,非旋转式Treap)学习(未完待续)
简介: Treap,一种表现优异的BST 优势: 其较于AVL.红黑树实现简单,浅显易懂 较于Splay常数小,通常用于树套BST表现远远优于Splay 或许有人想说S ...
- jmeter 工具学习 未完待续
about Apache JMeter是Apache组织的开源项目,是 一个纯Java桌面应用,用于压力测试和性能测试,它最初被设计用于 web应用测试,后来逐渐的扩展到其他领域 jmeter可以用于 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- Java开发中的23+2种设计模式学习个人笔记(未完待续)
注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...
- CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)
目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...
- 堆学习笔记(未完待续)(洛谷p1090合并果子)
上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...
随机推荐
- for each in for in 与for of
for each in for each in是作为E4X标准的一部分在javascript 1.6中发布的,而它不是ECMAScript标准的一部分. 这将意味着存在各种浏览器的兼容性问题.for ...
- Windows下文件加固
今天学到一种Windows下简单的文件加固方法,可以防止文件被(普通)删除. CMD找到要加固的文件. 例:C盘下有个 1516.txt 文本文件需要加固. 然后 copy 该文件.(注意:这里并非普 ...
- 在BootStrap的modal中使用Select2搜索框无法输入
用modal来show一个对话框 dialog.modal({ backdrop:true, keyboard:true, show:true }); 1 2 3 4 5 然后再modal中初始化se ...
- 【亲测】解决虚拟机CentOS7联网ping不通相关问题(通俗易懂)
对于是使用windows操作系统的小伙伴来说(mac用户忽略),要学习一些技术可能需要使用Linux系统,自然就需要使用虚拟机安装Linux,当然现在很多主流的学习网站上的教程都会提供老师配置好的虚拟 ...
- 在HTML中显示base64 img 图片
base64的图片可以直接显示在网页上面 <img src=“data:image/png;base64,******************************************** ...
- 买二手iphone的建议
手机到手后一定要在第一时间把“按键开关.指纹解锁.指南针.照相机.话筒.听筒.手电筒.定位.WiFi”都测一遍. 环境有无wifi:imei:×××××序列号:××××× 外观和零件:1外观,1是否粗 ...
- css:pointer-events: none
css3新属性pointer-events: none: pointer-events: none 顾名思义,就是鼠标事件拜拜的意思.元素应用了该 CSS 属性,链接啊,点击啊什么的都变成了 “浮云牌 ...
- html css col-md-offset
有的时候,我们不想让两个相邻的列挨在一起,这时候利用栅格系统的列偏移(offset)功能来实现,而不必再定义margin值.使用.col-md-offset-*形式的样式就可以将列偏移到右侧.例如,. ...
- c# NPOI 导出EXCEL (在下方显示图片)
需要引入dll文件 也可以在NuGet里面管理(推荐) 比较方便 . using System; using System.Collections.Generic; using System.Linq ...
- 音频音乐播放 Service
界面效果: 界面就一个播放的Button和一个进度条SeekBar,也可以自己加上两个显示时间的TextView: 点击播放时,有音乐声音,进度条也会自动更新,Button文字变成暂停 ...