论文:Meta-SR: A Magnification-Arbitrary Network for Super-Resolution 任意尺度的超分辨率
代码:https://github.com/XuecaiHu/Meta-SR-Pytorch.git
简介
随着深度卷积神经网络(DCNNs)的发展,近年来对超分辨率的研究取得了巨大的成功。然而,任意尺度因子的超分辨率长期以来一直被忽视。以往的研究大多将不同尺度因子的超分辨视为独立的任务。他们针对每个尺度因子训练一个特定的模型,计算效率较低,且只考虑了几个整数尺度因子的超分辨率。
本文提出了一种称为Meta-SR的新方法,第一个使用单一模型求解任意尺度因子(包括非整数尺度因子)的超分辨率。在Meta-SR中,提出了Meta-Upscale模块来替代传统的上采样(Upscale)模块。对于任意尺度因子,MetaUpscale模块通过将尺度因子作为输入,动态预测高级滤波器的权重,并使用这些权重生成任意大小的HR图像。对于任何低分辨率的图像,Meta-SR仅使用一个单一的模型就可以用任意的比例因子持续地放大它。
本文通过在广泛使用的单图像超分辨率基准数据集上的大量实验来评估该方法。实验结果表明了本模型的优越性。
从固定尺度因子的Upsacle到Meta-Upscale
目前比较先进的SISR方法,如ESPCNN, EDSR , RDN, RCAN,这些方法都是通过亚像素卷积对网络末端的feature map进行放大。不幸的是,这些方法必须为每个比例因素设计一个特定的高档模块。每个上采样模块只能放大固定整数比例因子的图像。超像素卷积只适用于整数尺度因子。这些缺点限制了SISR在真实场景中的使用。但是,我们可以通过适当的放大输入图像来实现非整数尺度因子的超分辨率。但由于计算量的重复和投入量的增大,使得这些方法费时费力,难以投入实际应用。
回忆上面提到的这些SISR的上采样方法:ESPCN,EDSR,RCAN 的不同之处在于它们的Feature Learning Module设计,而相同之处在于都通过网络后面的Upscale Module,以PixelShuffle的方式进行图像的上采样。
以RCAN的网络结构和Pytorch代码为例:
其中深蓝色的为RCAN的Upscale Module,在它后面一般只有负责将feature map的channel变为3的卷积核。
class RCAN(nn.Module):
def __init__(self, args):
super(RCAN, self).__init__()
scale = args.scale
num_features = args.num_features
num_rg = args.num_rg
num_rcab = args.num_rcab
reduction = args.reduction
self.sf = nn.Conv2d(3, num_features, kernel_size=3, padding=1)
self.rgs = nn.Sequential(*[RG(num_features, num_rcab, reduction) for _ in range(num_rg)])
self.conv1 = nn.Conv2d(num_features, num_features, kernel_size=3, padding=1)
self.upscale = nn.Sequential(
nn.Conv2d(num_features, num_features * (scale ** 2), kernel_size=3, padding=1),
nn.PixelShuffle(scale)
)
self.conv2 = nn.Conv2d(num_features, 3, kernel_size=3, padding=1)
PixelShuffle的实现方式如下图所示,它将 ( r 2 C , H ,