论文地址
CVPR2019的新文章,主要是针对以前超分辨率问题中需要固定上采样因子的问题作出的改进。
随着DNN的发展,超分辨率技术得到了巨大的改进。但是,超分辨率问题中的任意scale factor问题被忽视了很久。前面的很多工作都是把不同scale factor(即HR和LR之间的分辨率比)的超分辨率看作是独立的任务,然后分别训练模型。在这篇文章,作者提出了单模型解决任意scale factor的方法,叫做Meta-SR。 在Meta-SR中,一个Meta-SR Upscale Module代替了传统的upscale模块。对于任意的scale factor,Meta-SR Upscale Module能够动态地预测上采样滤波器的权重,然后用这些权重来生成HR。总而言之,Meta-SR能够以任意的上采样因子放大任意低分辨率的图像。
在ESPCNN,EDSR,RDN,RCAN等SOFT方法中,它们通常是在网络末端放大feature map。但是这些方法只能设计针对每个scale factor设计一个特定的上采样模块,并且这个上采样模块通常只对正整数的scale factors有效。这些缺点限制了SISR在现实中的使用。
在本论文中,受mera-learning的启发,作者提出了一个为每个scale factor动态预测的滤波器的权重,因此,我们再也不用保存每个scale factor对应模型的权重了。
可以看到,在Meta-SR中,特征学习模块直接用的RDN的结构。RDN是CVPR18的spotlight,其结构主要是ResNetBlock和DenseNet的结合,具体可以参考这篇博客RDN。
接下来先介绍一下Meta-Upscale 。
假设 F L R F^{LR} FLR是在特征学习模块之后提取到的特征,scale factor表示为 r r r。对于SR图像中的每个像素 ( i , j ) (i,j) (i,j),我们认为它是由LR图像在像素 ( i ′ , j ′ ) (i',j') (i′,j′)上的特征和对应滤波器(卷积核)的权重决定的。由这个观点出发,上采样模块可以看作是从 F L R F^{LR} FLR到 I S R I^{SR} ISR的映射函数。首先,上采样模块需要将 ( i , j ) (i,j) (i,j)和 ( i ′ , j ′ ) (i',j') (i′,j′)匹配。其次,上采样模块需要一个特定的滤波器来映射 ( i ′ , j ′ ) (i',j') (i′,j′)的特征和 ( i , j ) (i,j) (i,j)的值。上采样模块的形式化表述如下:
I S R ( i , j ) I^{SR}(i,j) ISR(i,j)表示SR在 ( i , j ) (i,j) (i,j)的像素值。 ϕ ( . ) \phi(.) ϕ(.)表示的是用来计算像素值的特征映射函数。
因为在SR中的每个像素对应一个滤波器,对于不同的scale factors,滤波器的数量和权重都是彼此不同的。为了解决超分辨率单模型任意输入scale factor的问题,我们提出了Meta-Upscale 模块来基于scale factor和坐标信息动态预测权重W(i,j)。
对于Meta-Upscale 模块,有三个重要的函数:the Location Projection, the Weight Prediction and the Feature Mapping,即位置投影,权重预测和特征映射。位置投影是投影LR中的像素,权重预测模块是预测对应SR每个像素的滤波器的权重,特征映射模块是将LR中的特征加上预测的权重映射回SR图像来计算像素值。
对于SR中的每个像素 ( i , j ) (i,j) (i,j),位置投影模块要找到LR图像对应的 ( i ′ , j ′ ) (i',j') (i′,j′)。我们认为 ( i , j ) (i,j) (i,j)的值是由LR图像中 ( i ′ , j ′ ) (i',j') (i′,j′)的特征决定的。我们用以下的投影操作来映射这两个像素:
T T T是转换函数。位置投影模块可以看作是一种可变分数步长机制,用来上采样任意scale factor的特征图。如图2所示,如果scale factor r r r是2,那么每个像素 ( i ′ , j ′ ) (i',j') (i′,j′)决定两个点。可是,如果scale factor不是整数,比如 r = 0.5 r=0.5 r=0.5,那么一些像素决定两个像素,一些像素决定一个像素。
对于SR中的每个像素 ( i , j ) (i,j) (i,j),我们都能在LR上找到一个独特的像素 ( i ′ , j ′ ) (i',j') (i′,j′),我们认为这两个像素是最有关联的。
典型的上采样模块会预定义卷积核的数量以及由训练集学习得到的权重。在Meta-Upscale模块中,我们用一种网络来预测卷积核的权重,公式化表述为:
W ( i , j ) W(i,j) W(i,j)是SR上的像素 ( i , j ) (i,j) (i,j)对应的卷积核的权重。 φ \varphi φ是权重预测网络, θ \theta θ是权重预测网络的权重。 v i j v_{ij} vij是和i,j关联的向量:
对于像素 ( i , j ) (i,j) (i,j) φ \varphi φ的输入,一个合适的选择是与 ( i ′ , j ′ ) (i',j') (i′,j′)的相对偏移:
为了一起训练多scale factors,最好是将scale factor加入到 v i j v_{ij} vij的计算中以区分不同的scale factor的权重。比如,如果我们要用scale factor 2和4上采样图像,记作 I 2 S R I_2^{SR} I2SR和 I 4 S R I_4^{SR} I4SR。那么 I 2 S R I_2^{SR} I2SR中的 ( i , j ) (i,j) (i,j)和 I 4 S R I_4^{SR} I4SR中的 ( 2 i , 2 j ) (2i,2j) (2i,2j)有相同的卷积核权重和投影坐标,这意味着 I 2 S R I_2^{SR} I2SR只是 I 4 S R I_4^{SR} I4SR的子图,这会限制效果。所以我们重定义 v i j v_{ij} vij:
最后我们要做的就是将特征 F L R F^{LR} FLR投影到SR对应像素的像素值。我们使用矩阵乘积作为Feature Mapping 函数。 ϕ ( . ) \phi(.) ϕ(.)的公式化表示为:
整个Meta-Upscale Module的伪代码如下:
特征学习模块可以是任意SOFT的方法,同时本文的Meta-Upscale模块也可以应用到这些网络中替代自身的上采样模块。本文使用RDN作为特征学习模块
对于Meta-Upscale Module,它包含几个全连接层和几个激活层。每个输入都会输出一组权重 ( i n C , o u t C , k , k ) (inC,outC,k,k) (inC,outC,k,k)。 i n C inC inC是提取到的feature map的通道数,论文里面是64。 o u t C outC outC是所预测的HR图像的通道数,要么是3(彩色图),要么是1(灰度图)。 k k k是卷积核大小。
本文里面激活函数用的是ReLU,卷积核 k k k是 3 × 3 3\times3 3×3。
本文的实验训练集用的是DIV2K,测试集是Set14,B100,Manga109和DIV2K。用PSNR和SSIM来验证效果(仅在Y通道)。
loss用的是L1 loss,batch是16,size是 50 × 50 50×50 50×50,训练的scale factors以0.1的步长从1到4训练,
均匀分布。batch里面的每个图都是一样的scale factor。Meta-SR是从头开始训练的,没有预训练。
各个upscale factor下RDN,EDSR和Meta-SR的表现,可以看到Meta- Upsample Module还是很有效的。
测试环境是Tesla P40。可以看到相比于Feature Learning Module,Weight Prediction Module的运行时间可以忽略不计。
还是期待源码能够早日公开吧!