Meta-SR: A Magnification-Arbitrary Network for Super-Resolution

1. 相关背景

本文发表于2019年,一般来说,SISR(single image super resolution,单张图片超分辨率)的工作都是分为两部分,首先将 H ∗ W ∗ 3 H*W*3 HW3的图片经过特征提取模块(比如2017年ESDR的残差网络,2018年RDN的稠密残差网络),得到相同尺寸的 H ∗ W ∗ C H*W*C HWC的特征图;然后再经过上采样模块(x2或x3或x4的缩放因子)得到超分辨率图像,比如要是上采样模块用了x4,那么最终分辨率就为 4 H ∗ 4 W ∗ 3 4H*4W*3 4H4W3,这种方法的缺点便是我要想放大不同倍数,就得换一下后面的上采样模块,整个架构重新训练(当然为了提升收敛速度,固定好前部分的特征提取模块之后,只优化后面的上采样模块也被证明是可以的);另一个缺点便是缩放因子受限于上采样模块本身的结构,只能是整数倍的,关于小数倍或是任意比例的缩放因子相关的SR研究一直以来是被忽视的。
本文提出的方法称之为Meta-SR,自称是首先使用仅仅一个模型,解决任意缩放因子的图像SR的工作。当然主要的内容,其实是改进了传统SR的后半部分的上采样模块,前半部分的特征提取模块还是用的前人方法。本文的上采样模块称作Meta-Upscale模块,其思想来源于meta-learning

  • 关于Meta-Learning
    有一篇知乎文章对meta-learning介绍的挺好,这里放出文章链接,这里说说个人的理解:

我们所做的机器学习任务,其实目的是为了建立一个从输入到输出的映射关系,由于这种映射关系太过抽象,我们往往将这份映射关系用神经网络来表示。一般来说,我们通常认知的机器学习是这样的:
1. 一般的机器学习:
我有一个数据集,这个数据集里面有采样点(也就是数据集的样本,为了方便后面的理解,暂时称为采样点),这些采样点就是某一个抽象函数的输入与输出(输入就是样本的特征,输出就是样本的标签),我们要做的就是用神经网络,根据采样点,借助反向传播,优化神经网络系数,从而让神经网络拟合这个抽象函数。训练完成之后(抽象函数拟合好之后),对于相同数据集里面的新的样本,我们就可以预测它的输出了。
2. 提炼:
我们其实可以从中抽取出如下数学概念:抽象函数采样点拟合,一般的机器学习任务,其实可以概括为:根据若干采样点,拟合一个抽象函数,以便于根据新的采样点预测输出,(其实哪怕是自监督的GAN,也可以说是拟合一个从正态分布(latent code)到某个数据集分布的映射),根据上面的数学概念,如果我们向下拓展,就成了目前3D视觉里面比较火的场景与物体的隐式表示,如果向上拓展,就成了meta-learning
3. 向下拓展——场景与物体的隐式表示:
将采样点换成场景坐标及这个坐标下的颜色,我们要拟合的抽象函数就成了这个场景本身,也是NeRF的思想;将采样点换成场景坐标与这个点到场景下物体的SDF距离函数值,我们要拟合的抽象函数就成了这个单一物体本身,也是DeepSDF的思想。这便是场景与物体的隐式表示,抽象函数成了这个单一的物体与场景本身,当这个抽象函数拟合好之后,就能够得到这个场景或物体的全部信息(如NeRF在一个新视角下的场景样子,DeepSDF整个物体的没有直接暴露在摄像机下的部分)。当然,既然是做了向下拓展,自然地,这种场景与物体的隐式表示就无法处理新的场景或数据集里的新的物体,因为我学习的抽象函数,是数据集里某个单一样本自身的规律(也就是场景颜色、物体形状),而不是像一般的机器学习里面的抽象函数,学习的是数据集里全部样本遵循的某种规律
4. 小结:
总而言之,对于数据集来说,有单一样本全体样本(也就是数据集本身)多个不同数据集,这三个层层递进的关系,而如果我们把抽象函数放在全体样本,那么采样点就成了单一样本,也就对应着一般的机器学习;如果我们把抽象函数放在单一样本,采样点就成了这个样本的一些空间采样点(当然因为这毕竟是3D视觉里的东西,采样点得是个三维物体或场景),也就对应着场景与物体的隐式表示。其实这样类比的话,在场景与物体的隐式表示中有很多一般机器学习的概念都能对的上,如下面所说的,左边是我们正常认知的机器学习概念,右边是场景与物体的隐式表示所对应的概念:

  1. 泛化性:就对应着我生成的这个三维物体或场景在新视角下到底合不合理
  2. batchsize:就对应着空间采样点的数量,而不是数据集样本的数量
  3. 过拟合:拿DeepSDF的物体举例,我这个三维物体建模好之后,虽然说在采样点的地方是和训练时的采样点一致的,但是在其它地方抖动太大,或者说,物体表面不够光滑
  4. 在某个数据集训练好之后,无法应用在新的数据集(也就是meta-learning的研究动机):就对应着我这个物体或场景建模好之后,面对场景数据集里面新的场景得重新训练建模

5. 向上拓展——Meta Learning
根据上面的类比,我们可以进一步向上拓展,这就成了Meta-Learning,抽象函数就变成了多个不同数据集,采样点就成了全体样本(也就是一个个不同的数据集),因此,Meta-Learning要解决的问题就是如何去预测某个具体数据集上的针对这个数据集的“抽象函数”(当然总的抽象函数是在多个不同数据集之上的那个抽象函数),而由于我们一般用神经网络表示抽象函数,所以meta-Learning其实聚焦于如何预测数据集上的神经网络组件的权重,也就是说如何用一个神经网络去预测另一个神经网络

2. 方法

本文整个方法的行文思路其实是很容易理解的,如下所述:

  1. 对于输入的图像,我们先经过特征提取模块(比如RDN的稠密残差模块),得到 H ∗ W ∗ C H*W*C HWC的特征图(文章中 C = 64 C=64 C=64),记为 F L R F_{LR} FLR,LR代表low resolution的意思
  2. 记我们想要得到的高分辨率的图像为 I H R I_{HR} IHR,缩放因子为 r r r,其中缩放因子可以为任意的数值,如 1.5 , 2 1.5,2 1.5,2等等
  3. 我们假定将 F L R F_{LR} FLR I H R I_{HR} IHR都给统一放到 [ − 1 , 1 ] [-1,1] [1,1]的平面直角坐标系中,那么很显然 I H R I_{HR} IHR有着更为稠密的网格,而对于 I H R I_{HR} IHR的每个像素 ( i , j ) (i,j) (i,j),其实都能唯一确定一个 F L R F_{LR} FLR上的点 ( i ′ , j ′ ) (i^{\prime},j^{\prime}) (i,j),就不说具体算法了,想想这个坐标系就行。下面如果我们以这个 ( i ′ , j ′ ) (i^{\prime},j^{\prime}) (i,j)作为某个卷积核(比如k=3)的中心的话,卷积运算一下就能得到 ( i , j ) (i,j) (i,j)应有的颜色了
  4. 因此,现在的问题其实就变成了:我该如何根据 I H R I_{HR} IHR的每个像素 ( i , j ) (i,j) (i,j)去得到专属与这个像素的卷积核,得到卷积核之后和 ( i ′ , j ′ ) (i^{\prime},j^{\prime}) (i,j)做一下卷积操作就能得到 ( i , j ) (i,j) (i,j)应有的颜色了,从而实现超分辨率重建, I H R I_{HR} IHR有多少像素我就应该得到多少个卷积核
  5. 其实得到卷积核的方式就成了meta-learning里的用神经网络去预测另一个神经网络,使用一个weight prediction network,接收的输入是 ( i , j ) (i,j) (i,j) ( i ′ , j ′ ) (i^{\prime},j^{\prime}) (i,j)相对位置,以及 1 / r 1/r 1/r,输出是 k ∗ k k*k kk的卷积核值(文中k=3),另外值得一提的是,这个神经网络的batchsize的上限其实就是 I H R I_{HR} IHR的总像素数量

下面是Meta-SR的流程图:
Meta-SR: A Magnification-Arbitrary Network for Super-Resolution_第1张图片

你可能感兴趣的:(神经网络,机器学习,深度学习)