端侧用一层卷积实现超分
作者:互联网
【前言】
以下解读与见解均为我的个人理解,要是我有哪里曲解了,造成了不必要的麻烦,可以联系我删除文章,也可以在评论区留言,我进行修改。也欢迎大家在评论区进行交流,要是有什么有意思的paper也可以留言,我抽空看一下也可以写一些。正文内容中的“作者”二字,均是指paper的作者,我的个人观点会显式的“我”注明。而文中的图基本都是从paper上cv过来的,我也没本事重做这么多的图,况且作者的图弄得还挺好看的。
Paper基本信息
题目:edge–SR: Super–Resolution For The Masses
作者:Pablo Navarrete Michelini, Yunhua Lu, Xingqun Jiang, 是BOE的工作
链接:https://arxiv.org/pdf/2108.10335.pdf
总结:提出了三个可在端侧使用的只需要一层卷积的超分辨率网络架构
Paper内容介绍
【基本介绍】
文章的出发点:BOE专属的电视场景,未来最适合的应该是从4k超分到8k,这种小放大场景下,需要非常高的输入吞吐量,同时考虑到电视这种端侧,超分就成为一个非常具有挑战性的问题。
- 超分辨率的历史
- 标准的上采样算法:linear或者bicubic上采样,在低分辨率图像上插0然后低通滤波得到,对应pytorch、tf中的反卷积
- 先进的上采样算法:利用几何原理提升质量,自适应上采样和滤波为主
- 深度学习:用CNN的SRCNN、用ResNets的EDSR、用DenseNets的RDN、用attention的RCAN、用非局部attention的RNAN等
- 实时的超分辨率
- SRCNN,60k参数,适合边缘设备用
- FSRCNN,在低分辨率进行计算,在最后用反卷积提升分辨率,小分辨率下实时性较好
- ESPCN,用了像素重组,只要20k参数
- EDSR,效果卓著,但是参数量太大了,实时没法用
- 边缘设备的问题
- 边缘设备进行超分辨率的问题主要是如何简化网络结构来达到跟传统非自适应上采样算法的效果
- 经典的2倍bicubic上采样,可以用一个反卷积+121个参数的滤波器实现
- 解决方案
- 引入一组最小架构edge-SR,用单个卷积层实现超分辨率
- 设计了三个网络eSR-MAX、eSR-TM、eSR-TR
文章主要有三个贡献点:
- 提出了几个单层网络的架构,填补了传统上采样算法和深度学习超分辨率算法之间的差距
- 搜了185个模型,统计了一个如上图所示的数据
- 对单层架构的attention提出了解释和分析
【边缘设备的超分辨率】
A. 经典算法
上图是经典的上采样算法,这是从下采样算法推出来的。下采样的流程是:滤波->下采样。因此上采样是反过来:上采样->滤波。但这个算法性能比较低,下图是这个算法比较常用的高效实现:
原算法上采样的时候引入了大量的0,在卷积的时候效率会比较低,将原本1通道的sk×sk的卷积,转成通道的k×k卷积,后面再接通道重组,性能能有较大的提升。
B. Maxout(文章中有模型的pytorch实现代码)
这个很简单,就是conv多输出几层,通道重组之后也就会多出来几层,然后选个最大值就完事了。
C. 自注意力(文章中有模型的pytorch实现代码)
eSR-TM是边缘SR模板匹配算法,用模板匹配检测每个方向的概率。如下图所示:
eSR-TR就是把transformer弄进去了,没什么特别的。
D. 深度学习(文章中有模型的pytorch实现代码)
eSR-CNN是将单层的eSR-TM跟ESPCNN结合起来的架构。
【实验】
可以看到,eSR-MAX、TR、TM这三个网络,在bicubic的同等质量下,要比它快,同等速度下,要比他质量好,看起来非常不错,很有移动端落地的潜质。
不过可惜文章里面虽然给了eSR几个网络的pytorch代码,但是没有完全开源工程,不然跑一跑,在端侧试一试还是挺有意思的。
标签:采样,eSR,端侧,分辨率,超分,pytorch,卷积,算法 来源: https://blog.csdn.net/zeusee/article/details/120798734