Shawn作者

使用高效子像素卷积神经网络,实时完成超分辨率任务

Twitter 的研究者提出了一种实时的单图像和视频超分辨率方法,其中使用了一种高效的子像素卷积神经网络。

论文地址:https://arxiv.org/pdf/1609.05158.pdf

项目地址:https://github.com/torch/nn/blob/master/PixelShuffle.lua

引言

单图像/视频超分辨率的目标是基于单张低分辨率图像得到高分辨率的图像。这篇论文的作者提出了一种计算高效的卷积层(在这篇论文中被称为子像素卷积层),以将最后的低分辨率特征图扩展为高分辨率的输出。在这种方法中,这种子像素卷积层没有使用双线性(bilinear)或双三次(bicubic)采样器等人工设计的扩展过滤器,而是可以通过训练学会更复杂的扩展操作,而且还能降低整体的计算时间。相比于原来的输入图像/帧,你只需要定义一个重构损失(比如 L2 损失),然后执行端到端训练即可。

上图是一个单图像超分辨率示例。左图基于双三次扩展过滤器,右图基于新提出的模型。很显然,与左图(双三次过滤)相比,右图更清晰,背景噪声也更少。

之前,单图像超分辨率都基于高分辨率空间,这种方法有些主要缺陷。一方面,如果你首先先提升低分辨率图像的分辨率,那么当你处理卷积运算时,计算时间会增加。另一方面,从低分辨率空间到高分辨率空间的转换基于传统的插值方法,这可能会引入额外的信息来解决不适定的重建问题。

新提出的模型

基于这些缺陷,作者假设如果存在任何可能性,我们可以基于低分辨率空间执行超分辨率步骤吗?基于这些假设,研究者提出了一种子像素卷积层,对于有 L 层的网络,他们像普通情况一样学习 n_{L-1} 个特征图,但在最后一层,他们会执行一种“像素混洗”技巧来得到高分辨率的结果,然后完成更复杂的低分辨率到高分辨率的映射,这是一种非常简单和直观的思想。

上图展示了从低分辨率图像映射成高分辨率图像的整体模型。如图所示,他们应用了第 l 层子像素卷积,其可将 I_{LR} 特征图扩展成 I_{SR}。

上面的两个式子是该网络的数学描述,其中 W_l、b_l 分别是可学习的权重和偏置;l ∈ (1, L - 1)。W_l 是一个大小为 n_{l-1} x n_l x k_l x k_l 的卷积张量,其中 n_{l-1} 是 l-1 层中特征图的数量,n_l 是 l 层中过滤器的数量,k_l 是过滤器的大小,b_l 是偏置向量。非线性函数 φ 是逐元素应用的。

在最后一层,会进行一次分辨率扩增运算。扩增低分辨率图像的方法是在低分辨率空间以 1/r 的步幅进行卷积,过滤器大小为 k_s,权重间隔为 1/r。卷积运算会激活过滤器的不同部分,在这种情况下,落在像素之间的权重和过滤器根本不会得到计算。为了建模该运算,这篇论文的作者提出了一个数学公式:

其中 PS 的意思是周期性像素混洗(periodic pixel shuffling),这可以将 C * r^2 x H x W 的输入张量重新排列为形状为 C x rH x rW 的张量。这种运算的效果如上图所示。

在 NumPy 中可以写成这样:

def PS(Input, r):
   assert len(Input.shape) == 3
   assert r>0
   r = int(r)
   Output = np.zeros((Input.shape[0]*r, Input.shape[1]*r, Input.shape[2]/(r*2)))
   C = Ouput.shape[2]
   for x in range(Output.shape[0]):
     for y in range(Output.shape[1]):
       for c in range(Output.shape[2]):
         a = np.floor(x/r).astype("int")
         b = np.floor(y/r).astype("int")
         d = C*r*(y%r) + C*(x%r) + c
         print a, b, d
         Output[x, y, c] = Input[a, b, d]
   return Output

注意卷积算子 W_l 的形状为 n_{l-1} x C*r^2 x k_l x k_l,而且最后一层中没有非线性。

其训练目标基于均方误差(MSE)。给定一个高分辨率训练集 I_n^{HR},其中 n=1 ... N;他们生成对应的低分辨率图像 I_n^{LR},n=1 ... N,然后经过超分辨率步骤之后,计算像素层面的 MSE 损失:

图像超分辨率结果

对于训练,研究者选择了 ImageNet [1] 中的图像。他们还对图像进行了数据预处理,将图像从 RGB 颜色空间转换到了 YCbCr 颜色空间,因为人类对亮度变化更敏感。在训练过程中,会从原图像 I^{HR} 提取出 17r x 17r 像素的子图像(比如可以选择 r=2,则就是 34×34)。衡量表现的指标基于 PSNR。

上图展示了单图像超分辨率的结果。新提出的模型得到了最佳的 PSNR,局部放大的图像部分表明新提出模型能创建出更锐利和更高对比度的图像,并且相对于其它方法有明显的改善。

上表展示了在不同数据集上的平均 PSNB(dB)。每个类别的最优结果用粗体标出。在这些数据集中,新提出的模型都优于其它方法。

运行时间分析

新提出的模型的最大进步之一是速度。研究者最后还在 Set14 数据集上评估了他们的模型。

如上所示,这里给出了不同的模型在执行超分辨率扩展时在准确度和速度之间的权衡。与其它方法相比,上图表明新方法能在准确度和速度上都更优,其中速度提升 10 倍以上,表现优 0.15 dB 以上;这使得新提出的模型有可能在单个 GPU 上实时执行 HD 视频的超分辨率。

分析师简评

我认为单图像超分辨率的能力是很值得讨论的。比如,它可以被部署在视频播放、人脸识别和医疗图像领域。对于 HD 视频播放,它能带来更好的画质;对于人脸识别和医疗图像,它能帮助研究者分析数据。这篇论文的贡献是通过一个简单的技巧(即像素混洗)来学习单图像超分辨率模型。在这种情况下,与之前的固定大小的上采样核相比,它不仅能学习更复杂的上采样函数,还能让其非常快地运行,甚至达到实时处理。在论文中,研究者还表明,基于这一技术,能够为 HD 视频超分辨率实现实时性能。更重要的是,由于其高效的像素混洗,它还可以被直接应用于 3D 卷积,这对于空间-时间视频建模而言是很重要的。

参考文献

[1] O. Russakovsky, J. Deng, H. Su, J. Krause, S. Satheesh, S. Ma, Z. Huang, A. Karpathy, A. Khosla, M. Bernstein, et al. Imagenet large scale visual recognition challenge. International Journal of Computer Vision, pages 1–42, 2014. 

技术分析图像处理超分辨率卷积神经网络
1
看了原论文,但不太理解。除了文末,还有哪些是分析师自己的分析啊?希望注明,避免再看一遍原文内容